在我的应用程序中,我希望能够根据文件类型在外部查看器中打开内部文件。我在应用程序清单中设置了一个 FileProvider,如下所示:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.myapp.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths" />
</provider>
我使用以下代码显示应用程序选择器以查看文件。
Uri contentUri = getUriForFile(getApplicationContext(), "com.myapp.fileprovider", thisFile);
Intent viewIntent = new Intent(Intent.ACTION_VIEW);
String mimeType = getApplicationContext().getContentResolver().getType(contentUri);
viewIntent.setDataAndType(contentUri, mimeType);
viewIntent.setFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
try {
startActivity(viewIntent);
} catch(ActivityNotFoundException e) {}
这适用于大多数应用程序,但是如果我在列表中选择 Google+ 照片应用程序,虽然图像可以在 Google+ 照片中正常加载,但如果我尝试通过用手指捏来放大图像,它会立即崩溃。Google+ 照片似乎失去了对该文件的访问权限,当它再次尝试读取该文件时,它被拒绝访问。
我尝试过的所有其他应用程序都可以完美运行任何建议表示赞赏