在Android应用中打开PDF

时间:2014-07-02 18:35:18

标签: android pdf fragment onclicklistener

首先我想说我已经尝试了几种解决方案,方法,建议,并在这里提到了几个链接来打开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();                  
            }
        }

    }

2 个答案:

答案 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查看器,这是正确的事情。