最佳答案
我正在寻找一种使用 Android 支持库的 文件提供商与外部应用程序正确共享(而不是打开)内部文件的方法。
按照文档中的示例,
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.android.supportv4.my_files"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/my_paths" />
</provider>
并使用 ShareCompat 将文件共享给其他应用程序,如下所示:
ShareCompat.IntentBuilder.from(activity)
.setStream(uri) // uri from FileProvider
.setType("text/html")
.getIntent()
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
不起作用,因为 FLAG _ GRANT _ READ _ URI _ PERMISION 只授予意图的 data
上指定的 Uri 的权限,而不授予 EXTRA_STREAM
额外值(由 setStream
设置)。
我试图通过将提供程序的 android:exported
设置为 true
来破坏安全性,但是 FileProvider
在内部检查它自己是否被导出,当导出时,它会抛出异常。