0

バイト配列を入力として受け取り、AdobeReaderでPDFファイルを表示するクラスopenPDFを作成しました。コード:

private void openPDF(byte[] PDFByteArray) {


    try {
        // create temp file that will hold byte array
        File tempPDF = File.createTempFile("temp", ".pdf", getCacheDir());
        tempPDF.deleteOnExit();

        FileOutputStream fos = new FileOutputStream(tempPDF);
        fos.write(PDFByteArray);
        fos.close();

        Intent intent = new Intent();
           intent.setAction(Intent.ACTION_VIEW);
           Uri uri = Uri.fromFile(tempPDF);
           intent.setDataAndType(uri, "application/pdf");
           intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);     

           startActivity(intent);


    } catch (IOException ex) {
        String s = ex.toString();
        ex.printStackTrace();
    }
}

意図を渡すと、AdobeReaderからのエラーは「無効なファイルパス」です。私はAndroidでのPDFのダウンロードと表示に関連する他のすべての投稿を読みましたが、dintは大いに役立ちます。助言がありますか?

4

2 に答える 2

1

問題は、他のアプリがアプリのプライベートデータ領域(キャッシュディレクトリなど)のファイルにアクセスできないことだと思います。

候補となるソリューション:

  1. ファイルのモードをMODE_WORLD_READABLEに変更して、他のアプリで読み取れるようにします

    ...
    String fn = "temp.pdf";
    Context c = v.getContext();
    FileOutputStream fos = null;
    try {
        fos = c.openFileOutput(fn, Context.MODE_WORLD_READABLE);
        fos.write(PDFByteArray);
    } catch (FileNotFoundException e) {
        // do something
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        if (fos!=null) {
            try {
                fos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    String filename = c.getFilesDir() + File.separator + fn;
    File file = new File(filename);
    Uri uri = Uri.fromFile(file);
    intent.setDataAndType(uri, "application/pdf");
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);     
    startActivity(intent);
    ...
    
  2. または、pdfファイルを/sdcardパーティションに書き込みます。

    android.os.Environment APIを使用してパスを取得し、アプリのAndroidManifest.xmlファイルに権限を追加することを忘れないでください。

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

よろしく

Ziteng Chen

于 2012-08-03T08:52:38.940 に答える
0

このコードを作成して、AdobeのアプリケーションでDowloadsフォルダーに存在する特定の.pdfファイルを開きます。

    File folder = new File(Environment.getExternalStorageDirectory(), "Download");
    File pdf = new File(folder, "Test.pdf");

    Uri uri = Uri.fromFile(pdf);

    PackageManager pm = getPackageManager();
    Intent intent = pm.getLaunchIntentForPackage("com.adobe.reader");
    intent.setDataAndType(uri, "application/pdf");
    startActivity(intent);

わたしにはできる。だから私はあなたの問題が一時的なファイルである可能性があると思います。ファイルをSDカードに書き込んでみてください。これを行うにはandroid.permission.WRITE_EXTERNAL_STORAGE、AndroidManifest.xmlに追加する必要があります。

于 2012-09-26T13:13:59.700 に答える