使用Adobe Reader显示PDF文件

时间:2012-08-03 06:03:38

标签: android file pdf bytearray

我创建了一个类openPDF,它将一个字节数组作为输入,并使用Adobe Reader显示PDF文件。代码:

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

当我通过打算时,adobe reader的错误是“文件路径无效”。我阅读了有关下载和查看android中的PDF的所有其他帖子,但dint帮助很多。有什么建议吗?

2 个答案:

答案 0 :(得分: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" />
    
  3. 此致

    陈子腾

答案 1 :(得分: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);

它对我有用。所以我想你的问题可能是temprorary文件。尝试将文件写入SD卡。为此,您需要将android.permission.WRITE_EXTERNAL_STORAGE添加到AndroidManifest.xml。