我正在尝试从我的原始文件夹传递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);
希望有人能帮助我!
THX
雷诺
答案 0 :(得分:0)
好吧,看起来你的解决方案已经完成了一半。
InputStream inputStream = assetManager.open("cartecanotpdf.pdf");
- 创建一个流,您可以使用该流来读取assets文件夹中PDF文件中的所有数据。
File file = new File(dir, "cartecannotpdf.pdf");
- 这只是创建一个指向SDCARD上文件所在位置的链接。
您丢失的部分实际上是将字节从输入流复制到输出流。目前,SDCARD上的文件要么不存在,要么只是一个空壳(没有任何数据),所以你的意图会抱怨它已经损坏了。
这是一个QA,为您提供完整的解决方案。 How to copy files from 'assets' folder to sdcard?
编辑:此外,我不确定您是否需要将文件放在资源文件夹中,或者是否可以将其保留在RAW文件夹中。我一直在使用我的资源文件夹中的文件。当你调用assetManager.open(...)
时,确保你实际上是在获取文件