0

我正在尝试从我的原始文件夹中传递 sdcard 一个 pdf 以默认意图打开它。

当我打开它时,它对我说 pdf 已损坏。因为我不太了解流的工作原理,所以我认为问题来自那里。

final String extStorageDirectory = Environment
                        .getExternalStorageDirectory().toString();
                final String festivalDirectory_path = extStorageDirectory
                        + Constants.PDF_STORAGE_PATH;
                File pdfOutputFile = new File(festivalDirectory_path, "/");
                if (pdfOutputFile.exists() == false) {
                    pdfOutputFile.mkdirs();
                }
                File pdfFile = new File(pdfOutputFile, nameOfThePdf);

                try {
                    InputStream in = getResources().openRawResource(R.raw.blablublo);

                    FileOutputStream out = new FileOutputStream(pdfFile);
                    byte[] buffer = new byte[1024];
                    int bufferLength = 0;
                    while ((bufferLength = in.read(buffer)) > 0) {
                        out.write(buffer, 0, bufferLength);
                    }
                    out.close();
                } catch (Exception e) {
                    Log.e("tag", e.getMessage());
                }
                Uri path = Uri.fromFile(pdfFile);
//              Uri path = Uri.parse(Constants.SPLASH_URI + R.raw.cartecannotpdf);
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(path, "application/pdf");
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);

希望有人能帮助我!

谢谢

雷诺

4

1 回答 1

0

好吧,看起来你的解决方案已经完成了一半。

InputStream inputStream = assetManager.open("cartecanotpdf.pdf");- 创建一个流,您可以使用该流从资产文件夹中的 PDF 文件中读取所有数据。

File file = new File(dir, "cartecannotpdf.pdf");- 这只是创建一个指向 SDCARD 上文件所在位置的链接。

您缺少的部分实际上是将字节从输入流复制到输出流。目前,SDCARD 上的文件要么不存在,要么只是一个空壳(没有任何数据),因此您的意图会抱怨它已损坏。

这是一个为您提供完整解决方案的 QA。 如何将文件从“资产”文件夹复制到 SD 卡?

编辑:此外,我不确定您是否需要将文件放在资产文件夹中,或者是否可以将其保留在 RAW 文件夹中。我一直使用资产文件夹中的文件。确保您在调用assetManager.open(...) 时实际上得到了一个文件

于 2012-05-07T14:03:06.633 回答