アセット フォルダーから PDF ファイルを読み取る
この記事では、Android アプリケーション内のアセット フォルダーから PDF ファイルを読み取る問題について説明します。 PDF にアクセスしようとすると、「ファイル パスが無効です。」というエラー メッセージが表示されます。
コード分析
提供されたコードは、アセット フォルダーから PDF ファイルを取得します。 。ただし、インテントで PDF を開くために指定されたパスはアセット フォルダーを参照しているため、権限とアクセスに関して問題が発生する可能性があります。
解決策
この問題を解決するには、次のコードを考えてみましょう:
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); } }
}
説明
その他の考慮事項
以上がAndroid アプリの Assets フォルダーから PDF ファイルを読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。