ホームページ  >  記事  >  Java  >  Android アプリの Assets フォルダーから PDF ファイルを読み取る方法は?

Android アプリの Assets フォルダーから PDF ファイルを読み取る方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-29 01:52:30248ブラウズ

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

アセット フォルダーから 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);
    }
}

}

説明

  • このコードは、PDF ファイルをアセット フォルダーからアプリの内部ストレージ内のファイルに読み取ります。
  • インテント内のパスが、次のファイルを指すように更新されました。
  • このアプローチにより、「ファイル パスが無効です」エラーが解消されます。

その他の考慮事項

  • マニフェスト ファイルで WRITE_EXTERNAL_STORAGE 権限が付与されていることを確認してください。
  • PDF ファイルがアセット フォルダー内の指定された場所に存在していることを確認してください。

以上がAndroid アプリの Assets フォルダーから PDF ファイルを読み取る方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。