首先我想说我已经尝试了几种解决方案,方法,建议,并在这里提到了几个链接来打开PDF。你可以叫我慢,但我至少尝试过。我想在我的Android应用程序中打开PDF。我在Nexus 10平板电脑上。我无法使用网络视图。我想在我的一个片段中通过我的OnClickListener打开这个pdf。我认为我最大的问题是我不确定在哪里保存我的PDF。我试过res和资源文件夹。很多例子使用/ sdcard / - 只是将它保存在我的设备上?如果是这样的话/如何获得路径?我在平板电脑上的adobe reader中保存了.pdf文件,我可以访问该路径吗?我正在使用API min 16 target API 19.
我尝试了很多这个
的变体public void onClick(View v)
{
switch(v.getId())
{
case R.id.bizbro3:
File pdfFile = new File( // I don't know what to put here / where to save pdf. Have tried /sdcard/ , getresrouces, absolutepath, ect.);
if(pdfFile.exists())
{
Uri path = Uri.fromFile(pdfFile);
Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(path, "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try
{
startActivity(pdfIntent);
}
catch(ActivityNotFoundException e)
{
Toast.makeText(v.getContext(), "Something went wrong. Returning to the Main Menu",
Toast.LENGTH_LONG).show();
fragment = new FragmentThree();
fragment.setArguments(args);
FragmentManager frgManager = getFragmentManager();
frgManager.beginTransaction().replace(R.id.content_frame, fragment)
.commit();
}
}
}
答案 0 :(得分:2)
首先在清单
中声明权限<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后尝试这个
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/yourfolder";
File file = new File(path,"file.pdf");
答案 1 :(得分:0)
您的代码失败的原因是提取的APK文件夹,包含资产/应用程序是私有的, 并且无法通过外部应用查看。你有&#34;邀请&#34;这样一个外部应用程序来查看您的数据 通过发布意图,没有任何区别。
您需要将文件复制到非私人位置(通常是:sdcard)和 事情将开始奏效:
void coptAssetToSdcard() {
InputStream input = getAssets().open("myFile.pdf");
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/myDir/");
dir.mkdirs();
File outFile = new File(dir, "destFile.pdf");
OutputStream out = new FileOutputStream(outFile);
byte[] buffer = new byte[10*1024];
int nBytes;
while ((nBytes = input.read(buffer)) != -1) {
out.write(buffer, 0, nBytes);
}
out.flush();
out.close();
input.close();
}
请记住将此func放在AsyncTask中。
我还看到你的代码有一个漏洞(捕获ActivityNotFoundException) 案例设备没有pdf查看器,这是正确的事情。