Maison  >  Article  >  Java  >  Comment lire un fichier PDF à partir du dossier Assets dans une application Android ?

Comment lire un fichier PDF à partir du dossier Assets dans une application Android ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 01:52:30248parcourir

How to Read a PDF File from the Assets Folder in an Android App?

Lire un fichier PDF à partir d'un dossier d'actifs

Cet article aborde le problème de la lecture d'un fichier PDF à partir d'un dossier d'actifs dans une application Android. Les utilisateurs qui tentent d'accéder au PDF rencontrent le message d'erreur "Le chemin du fichier n'est pas valide."

Analyse du code

Le code fourni récupère le fichier PDF du dossier des ressources. . Cependant, le chemin spécifié pour l'ouverture du PDF dans l'intention fait référence au dossier des ressources, ce qui peut entraîner des problèmes d'autorisations et d'accès.

Solution

Pour résoudre ce problème, considérons le code suivant :

public class SampleActivity extends Activity {</p>
<pre class="brush:php;toolbar:false">@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    CopyReadAssets();
}

private void CopyReadAssets() {
    AssetManager assetManager = getAssets();
    InputStream in = null;
    OutputStream out = null;
    File file = new File(getFilesDir(), "abc.pdf");
    try {
        in = assetManager.open("abc.pdf");
        out = openFileOutput(file.getName(), Context.MODE_WORLD_READABLE);
        copyFile(in, out);
        in.close();
        out.flush();
        out.close();
    } catch (Exception e) {
        Log.e("tag", e.getMessage());
    }

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.parse("file://" + getFilesDir() + "/abc.pdf"), "application/pdf");

    //Grant permission to the user after confirming existence of the file
    if (file.exists()) {
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
        try {
            getApplicationContext().startActivity(intent);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(this, "NO PDF Viewer", Toast.LENGTH_SHORT).show();
        }
    }
}

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);
    }
}

}

Explication

  • Ce code lit le fichier PDF du dossier des ressources dans un fichier dans la mémoire interne de l'application.
  • Le chemin dans l'intention est maintenant mis à jour pour pointer vers le fichier dans le stockage interne, garantissant les autorisations d'accès.
  • Cette approche élimine l'erreur "Le chemin du fichier n'est pas valide".

Considérations supplémentaires

  • Assurez-vous que l'autorisation WRITE_EXTERNAL_STORAGE est accordée dans le fichier manifeste.
  • Assurez-vous que le fichier PDF existe à l'emplacement spécifié dans le dossier des ressources.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn