如何使用FileProvider查看/显示PDF文件?仅显示空白屏幕

时间:2018-05-02 09:41:28

标签: android android-fileprovider

Android应用可以创建PDF文件,应存储到外部存储设备并由用户查看或共享。

创建,存储和共享文件没问题。但是,查看文件失败,只显示空白屏幕。

这是我的代码:

<!-- Provider definition in manifest -->
<provider
    android:authorities="com.example.MyApp.fileprovider"
    android:name="android.support.v4.content.FileProvider"
    android:exported="false"
    android:grantUriPermissions="true" >
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>


<!-- file_path.xml in xml resource dir -->
<?xml version="1.0" encoding="utf-8"?>
<path xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="ExternalDir" path="Documents/MyApp" />
</path>


// Sharing and viewing
File baseDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
File appDir = new File(baseDir, "MyApp");
appDir.mkdirs();

File pdfFile = new File(appDir, "Test.pdf");
savePDFToFile(pdfFile)


Uri fileUri = FileProvider.getUriForFile(this, "com.example.MyApp.fileprovider", pdfFile);

// View
Intent viewIntent = new Intent(Intent.ACTION_VIEW);
viewIntent .setDataAndType(fileUri, "application/pdf");
viewIntent .addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
viewIntent .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(viewIntent , "View"));


// Sharing
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("application/pdf");
sharingIntent.putExtra(Intent.EXTRA_STREAM, fileUri);
startActivity(Intent.createChooser(sharingIntent, "Share"));

创建/编写PDF文件没问题。因此,权限似乎没有问题。共享文件(例如将其保存到Google云端硬盘或通过电子邮件发送)也没问题。因此,FileProvider配置和Uri创建似乎是正确的。

那么,查看意图有什么问题?在使用API​​ 26在仿真器中测试时,仅显示空白页面。在具有API 26的设备上运行相同代码的用户获得消息,该文件访问是不可能的(没有原因)。

但是文件存在且访问权限不应该成为问题,否则共享意图也不会有效,是吗?

如何解决这个问题?

0 个答案:

没有答案