FileProvider提供了一种解决办法,在Oncreate函数中
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy( builder.build() );
builder.detectFileUriExposure();
}
VM会忽略文件URI曝光。
builder.detectFileUriExposure()
启用文件曝光检查,如果我们没有设置VmPolicy,这也是默认行为。
我遇到一个问题,如果我使用a content:// URI发送东西,一些应用程序是无法理解的。并且不允许降级target SDK版本。在这种情况下,我的解决方案是有用的。
看了一下builder.detectFileUriExposure()源码:
不鼓励这种曝光,因为接收应用可能无法访问共享路径。 例如,接收应用可能没有请求{@link android.Manifest.permission#READ_EXTERNAL_STORAGE}运行时权限,或者平台可能跨用户配置文件边界共享{@link android.net.Uri}。 相反,应用程序应使用{@code content://} Uris,以便平台可以扩展接收应用程序访问资源的临时权限。