Lire un fichier pdf à partir d'éléments de dossier
public void DOCS(View btnDocs)
{
File fileBrochure = new File("android.resource://com.project.datastructure/assets/abc.pdf");
if (!fileBrochure.exists())
{
CopyAssetsbrochure();
}
/** PDF reader code */
File file = new File("android.resource://com.project.datastructure/assets/abc.pdf");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),"application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try
{
getApplicationContext().startActivity(intent);
}
catch (ActivityNotFoundException e)
{
Toast.makeText(Stack_dr.this, "NO Pdf Viewer", Toast.LENGTH_SHORT).show();
}
}
private void CopyAssetsbrochure() {
AssetManager assetManager = getAssets();
String[] files = null;
try
{
files = assetManager.list("");
}
catch (IOException e){}
for(int i=0; i<files.length; i++)
{
String fStr = files[i];
if(fStr.equalsIgnoreCase("abc.pdf"))
{
InputStream in = null;
OutputStream out = null;
try
{
in = assetManager.open(files[i]);
out = new FileOutputStream("/sdcard/" + files[i]);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
break;
}
catch(Exception e){}
}
}
}
private void copyFile(InputStream in, OutputStream out) throws IOException
{
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
}
Je suis en train de lire un fichier pdf à partir d'éléments de dossier qui est présent dans mon dossier de l'application . Tout fonctionne parfaitement lorsque je clique sur mes DOCS bouton une fenêtre pop-up vient de laissez-moi choisir une application pour ouvrir le pdf que j'ai.e "abc.pdf", mais après avoir sélectionné une option, je reçois un message d'erreur "Le chemin d'accès au fichier n'est pas valide". Je pense que leur est un problème avec le chemin que j'ai indiqué dans le code.
s'il vous plaît aider
- avez-Vous vérifié si le copié pdf existe vraiment sur votre carte sd? Par le chemin, Vous devez spécifier avec l'Environnement.getExternalStorageDirectory() pour spécifier le chemin d'accès au lieu de "/sdcard/"
- Le fichier pdf qui existe dans mon dossier des actifs, qui sera b livré avec l'app
Vous devez vous connecter pour publier un commentaire.
Essayer cette
Assurez-vous d'inclure
dans le manifeste
Vous pouvez le faire comme ceci (testé et de travail sur l'API 27)
Étape 1
Ajouter dépendance suivant dans votre application gradle:
Étape 2
Ajouter le code XML suivant:
Étape 3
Ajouter le code suivant dans votre fichier java:
Ces changements permettront de charger un fichier PDF sur la création de votre activité.
Bien que ce qui a été répondu, je voulais partager ma solution car je pense que c'est un peu plus facile à inclure.
Utilisation:
Et voici le
OpenLocalPDF
classe:ajouter cette autorisation dans
Manifest.xml
comme le disent sunsil, mais dans le cas de répertoire externe.
changer des parties de code de ce genre:
de l'avant de l'exemple est pour les fichiers Pdf, dans le cas de l'exemple .txt
essayez ceci:
J'ai eu du succès, à l'aide de la réponse de cYrixmorten, avec la OpenLocalPDF classe.
Mais, De L'Environnement.DIRECTORY_DOCUMENTS n'est pas pris en charge pour Android 18. À l'appui de Android 18 - 28, j'ai eu à faire les changements suivants.
Dans "CopyFileAsyncTask", modifier le fileRoot déclaration:
À ceci:
Dans "onPostExecute", modifiez ce qui suit:
À ceci:
Enfin, la configuration de votre manifeste à l'appui de la FileProvider comme décrit dans ce post.
Si vous voulez ouvrir un .pdf fichier qui est stocké localement dans le dossier des actifs sans l'aide d'une Intention de lancer une application externe, je suggère d'utiliser le Android classe PdfRenderer. La Documentation trouvé ici.
Cette est un bon exemple de ce qui a fonctionné pour moi.
Cependant, cet exemple ne pas s'exécuter lorsque je l'ai téléchargé. J'ai dû changer un peu les copyReadAssets() comme mentionné dans les autres réponses ici, puis à la référence du fichier (après qu'il a été copié) j'utilise:
J'ai aussi fini la modification de onAttach() car c'est à l'aide de l'obsolète forme de onAttach() et closeRenderer() car il jetait des erreurs de clôture des objets qui ont été nulle.
Donc mon complet PdfRendererBasicFragment.java fichier ressemble à ceci:
Ce code fonctionne sur tous les android version:
Activité:
Manifest.xml:
file_paths.xml:
Testé dans l'API 16-28, a travaillé sur toutes les api!