意图在Android N中打开PDF文件

时间:2017-03-28 10:34:14

标签: android android-intent

我一直在尝试使用意图打开PDF文件。它适用于Adroid N之前的设备。以下是我使用的代码

File file = new File(gridItems.get(position).getPath());
                        Intent intent = null;
                        if (Build.VERSION.SDK_INT < 24) {
                            intent = new Intent(Intent.ACTION_VIEW);
                            intent.setDataAndType(Uri.fromFile(file), "application/pdf");
                            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                        } else {
                            intent = new Intent();
                            intent.setAction(Intent.ACTION_VIEW);
                            Uri pdfURI = FileProvider.getUriForFile(GalleryPdfActivity.this, getApplicationContext()
                                    .getPackageName
                                            () +
                                    ".provider", file);
                            intent.putExtra(Intent.EXTRA_STREAM, pdfURI);
                            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                            intent.setType("application/pdf");
                        }
                        try {
                            if (intent.resolveActivity(getPackageManager()) != null)
                                startActivity(intent);
                            else
                                AppUtils.toast("No Application found to open the pdf", GalleryPdfActivity.this);
                        } catch (Exception e) {
                            AppUtils.toast(e.getMessage(), GalleryPdfActivity.this);
                        }

文件选择器打开,我选择了Google PDF Viewer来打开应用程序。但它返回错误“无法显示PDF(没有收到文件)”。我能够在Android N之前的设备中打开相同的文件

2 个答案:

答案 0 :(得分:3)

FLAG_GRANT_READ_URI_PERMISSION案例的Intent上添加FileProvider。否则,其他应用无权访问该内容。请参阅the documentation

答案 1 :(得分:0)

添加FLAG_GRANT_READ_URI_PERMISSION

<application>
   <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:replace="android:authorities">
            <meta-data
                tools:replace="android:resource"
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>
 </application>

还在res - &gt;处添加provider_paths.xml。 xml文件夹 并需要在清单中添加以下代码

symbol_id