原来的分享是这样的
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(sourceDir)));
intent.setType("*/*");
startActivity(Intent.createChooser(intent, "分享"));
因为适配全面屏导航栏背景,targetSdkVersion 改成了24,然后分享的时候就报这个错误了。
根据 https://blog.csdn.net/xiaoyu940601/article/details/54406725 所说,是安全策略不允许分享 file:// 开头的路径。
方法一
1.AndroidManifest.xml 增加:
<application>
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="完整包名"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
</application>
2.新建文件 res/xml/filepaths.xml:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<root-path name="root" path="" />
</paths>
3.分享:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(getApplicationContext(),"完整包名", new File(sourceDir)));
intent.setType("*/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, "分享"));
方法二
他说在Application中的onCreate加上我这没成功,在Activity的onCreate后面加上成功了。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
}
方法二更简单。
最好写在 MainApplication.onCreate 中,并注册: <application android:name=".MainApplication",不注册不会运行。