2017-10-21 44 views
0

我感谢你的帮助,使我的代码可以打开一个PDF文件,意图,这是我一直在使用的代码:如何在Android Nougat中使用Intent打开PDF文件?

String pathFile = 
    Environment.getExternalStorageDirectory().toString() + 
    FileUtils.PATH_SEPARATOR + "myFolder" + 
    FileUtils.PATH_SEPARATOR + "myFile.pdf"; 
File pdfFile = new File(pathFile); 
if (pdfFile.exists()) { 
    Uri uri = Uri.fromFile(new File(pathFile)); 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(uri, "application/pdf"); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 

但据我所知,现在(从Android-N版)的特权处理方式不同,所以我希望你能通过指出我必须做出什么改变来获得使用Intent打开的PDF文件来帮助我。

PS:在我的AndroidManifest.xml我正在寻找在存储的所有权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

您是否允许读取外部存储? – Karthik

+0

我在我的AndroidManifest.xml上有关于存储的权限请求 – Pepo

+0

您是否声明了运行时权限,因为从nogout开始,我们需要声明运行时权限。 – Karthik

回答

0

试试这个代码。

Intent intent = new Intent(Intent.ACTION_VIEW); 
try { 
    String newFilePath = filePath.replaceAll("%20", " "); 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { 
     intent.setDataAndType(Uri.parse(newFilePath), "application/pdf"); 
    } else { 
     Uri uri = Uri.parse(newFilePath); 
     File file = new File(uri.getPath()); 
     if (file.exists()){ 
      uri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file); 
      intent.setDataAndType(uri, "application/pdf"); 
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     } 
    } 

    intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
    startActivity(intent);