res/raw またはアセット フォルダに保存されている PDF を開くにはどうすればよいでしょうか? 質問する

res/raw またはアセット フォルダに保存されている PDF を開くにはどうすればよいでしょうか? 質問する

アプリケーションで PDF を表示する予定であり、PDF はアプリケーションにバンドルされる必要があります。

これを行う良い方法は何ですか?

PDF ファイルを res/raw フォルダーに追加してそこから読み取ることでこれが可能になるかもしれないと読んだことがありますが、そこに PDF ファイルを置くとプロジェクト エラーが発生します。

そこで、プロジェクトのアセット フォルダーに PDF ファイルを配置してみましたが、エラーは発生しませんでした。

これは私が PDF を表示しようとした方法です:

File pdfFile = new File("res/raw/file.pdf");
Uri path = Uri.fromFile(pdfFile);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

何かアイデアや提案はありますか?

前もって感謝します

ベストアンサー1

PDFファイルを開くことができません直接から資産フォルダー。まず、アセット フォルダーから SD カードにファイルを書き込み、次に SD カードから読み取る必要があります。コードは次のとおりです。

     @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    File fileBrochure = new File(Environment.getExternalStorageDirectory() + "/" + "abc.pdf");
    if (!fileBrochure.exists())
    {
         CopyAssetsbrochure();
    } 

    /** PDF reader code */
    File file = new File(Environment.getExternalStorageDirectory() + "/" + "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(SecondActivity.this, "NO Pdf Viewer", Toast.LENGTH_SHORT).show();
    }
}

//method to write the PDFs file to sd card
    private void CopyAssetsbrochure() {
        AssetManager assetManager = getAssets();
        String[] files = null;
        try 
        {
            files = assetManager.list("");
        } 
        catch (IOException e)
        {
            Log.e("tag", e.getMessage());
        }
        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(Environment.getExternalStorageDirectory() + "/" + files[i]);
                  copyFile(in, out);
                  in.close();
                  in = null;
                  out.flush();
                  out.close();
                  out = null;
                  break;
                } 
                catch(Exception e)
                {
                    Log.e("tag", e.getMessage());
                } 
            }
        }
    }

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

以上です。お楽しみください。+1を忘れないでください。ありがとうございます

おすすめ記事