NO IMAGE

7.0以後,谷歌開始收緊Android應用許可權

對於面向 Android 7.0 的應用,Android 框架執行的 StrictMode API 政策禁止在您的應用外部公開 file:// URI。如果一項包含檔案 URI 的 intent 離開您的應用,則應用出現故障,並出現 FileUriExposedException 異常。

要在應用間共享檔案,您應傳送一項 content:// URI,並授予 URI 臨時訪問許可權。進行此授權的最簡單方式是使用 FileProvider 類。如需瞭解有關許可權和共享檔案的詳細資訊,請參閱共享檔案。
https://developer.android.com/about/versions/nougat/android-7.0-changes.html#accessibility

程式碼:

    public static void shareContent(Context context, String filename) {
Uri uri = null;
if (Build.VERSION.SDK_INT <= 22) {
//6.0及以下
uri = Uri.fromFile(new File(filename));
} else {
//7.0及以上
uri = FileProvider.getUriForFile(context, "com.painttool.file_provider", new File(filename));
}
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType("image/*");
//在新任務窗體中進行分享
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}

其他配置:
AndroidManifest.xml

<provider
android:authorities="com.painttool.file_provider"
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/filepaths"/>
</provider>

在xml資料夾下新建filepaths.xml

<?xml version="1.0" encoding="utf-8"?>
<path>
<external-path path="." name="external_storage_root" />
</path>

在res目錄下建立xml/file_paths檔案,只有在file_paths中配置的目錄下的檔案才可以在應用間共享

<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path  name="external-path"  path="apk/" />
<cache-path  name="cache-path"   path="." />
<files-path  name="files-path"  path="." />
</paths>
external-path 對應Environment.getExternalStorageDirectory()
cache-path對應 getCacheDir()
files-path對應 getFilesDir() 
path指定對應目錄下的子目錄, path="." 表示該目錄下所有子目錄

“`