標籤:dia 解決方案 mod grant ext cap nbsp evel mis
對於面向 Android 7.0 的應用,Android 架構執行的 StrictMode API 政策禁止在您的應用外部公開 file:// URI。如果一項包含檔案 URI 的 intent 離開您的應用,則應用出現故障,並出現 FileUriExposedException 異常。
要在應用間共用檔案,您應發送一項 content:// URI,並授予 URI 臨時存取權限。進行此授權的最簡單方式是使用 FileProvider 類。
解決方案:
首先在AndroidManifest.xml的<application>標籤內添加<provider>
<!-- 檔案分享權限設定 --> <provider android:name="android.support.v4.content.FileProvider" android:authorities="${APPLICATION_ID}.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths"/> </provider>
接下來在res檔案夾下建立xml子檔案夾(如果已存在,忽略),並建立檔案provider_paths.xml
內容如下
<?xml version="1.0" encoding="utf-8"?><paths> <external-path path="." name="external_files"/></paths>
接下來在跳轉時,傳入的Uri不再是使用
Uri.fromFile(tmpFile);
而是使用FileProvider的getUriForFile()方法擷取
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); tempFile = File.createTempFile("head", null, StorageUtils.getImageDir(context)); Uri imgUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", tempFile); intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri); startActivityForResult(intent, REQUEST_TAKE);
參考地址
Android 7.0下,拍攝照片報錯