Introduction
Cet article fournit une solution à un problème lors de la tentative d'ouverture un fichier PDF du dossier Assets utilisant une intention entraîne un message d'erreur « Le chemin du fichier n'est pas valide ».
Description du problème
Le code d'origine tente d'accéder un fichier PDF dans le dossier des ressources en utilisant le chemin suivant :
<code class="java">File file = new File("android.resource://com.project.datastructure/assets/abc.pdf");</code>
Cependant, ce chemin est incorrect, car il ne tient pas compte de l'emplacement réel du fichier PDF dans la structure de répertoires de l'application.
Solution
Pour résoudre ce problème, nous pouvons utiliser le code mis à jour suivant :
<code class="java">public class SampleActivity extends Activity { @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(); in = null; out.flush(); out.close(); out = null; } 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"); startActivity(intent); } 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); } } }</code>
Ce code copie d'abord le fichier PDF du dossier des ressources vers le répertoire de stockage privé de l'application, en utilisant un FileOutputStream pour garantir qu'il est accessible par d'autres applications. Il crée ensuite une intention d'ouvrir le fichier PDF à partir du répertoire de stockage privé, ce qui résout le problème du chemin de fichier non valide.
Autorisations
Pour copier des fichiers vers le répertoire de stockage privé, il est nécessaire d'inclure l'autorisation suivante dans le fichier AndroidManifest.xml :
<code class="xml"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></code>
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!