趟坑記錄-FileProvider

FileProvider

當(dāng)使用FileProvider生成uri時(shí),使用uri的intent應(yīng)添加

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

來(lái)授予權(quán)限。

·使用系統(tǒng)裁剪時(shí)遇到的坑

Intent intent = new Intent("com.android.camera.action.CROP");

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

intent.setDataAndType(uri, "image/*");

// 下面這個(gè)crop=true是設(shè)置在開(kāi)啟的Intent中設(shè)置顯示的VIEW可裁剪        
intent.putExtra("crop", "true");

intent.putExtra("return-data", false);

intent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);

startActivityForResult(intent,REQUEST_CODE_CUT_PHOTO);

當(dāng)intent.setDataAndType(uri,"image/*");中的 uri 和 intent.putExtra(MediaStore.EXTRA_OUTPUT,tempUri); 中 tempUri 一致時(shí),

使用intent.addFlags即可,但當(dāng)uri和tempUri不一致時(shí)則會(huì)報(bào)錯(cuò)


java.lang.SecurityException: Permission Denial: opening provider android.support.v4.content.FileProvider from ProcessRecord,

這是因?yàn)閕ntent.addFlags只是為inten訪(fǎng)問(wèn)uri添加了權(quán)限,沒(méi)有為訪(fǎng)問(wèn)tempUri添加權(quán)限,所以保存裁剪圖時(shí)會(huì)報(bào)錯(cuò),這時(shí)必須使用如下代碼來(lái)為intent添加tempUri權(quán)限


List resInfoList = getActivity().getPackageManager().queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);

for(ResolveInfo resolveInfo : resInfoList) {

    String packageName = resolveInfo.activityInfo.packageName;

    getActivity().grantUriPermission(packageName,tempUri,Intent.FLAG_GRANT_WRITE_URI_PERMISSION| 
    Intent.FLAG_GRANT_READ_URI_PERMISSION);

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容