在使用紅米手機拍攝照片時,出現閃退的情況。
調用系統相機拍攝照片,使用FileProvider.getUriForFile傳入Uri時,報異常
java.lang.SecurityException: Permission Denial: writing android.support.v4.content.FileProvider uri ...
此時需要調用
grantUriPermission(String toPackage, Uri uri, int modeFlags)
授予Uri的訪問權限
具體代碼如下
try { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); tempFile = File.createTempFile("head", null, StorageUtils.getImageDir(context)); Uri imgUri = FileProvider.getUriForFile(context, context.getPackageName() + ".FileProvider", tempFile); List resInfoList = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); if (resInfoList.size() == 0) { DadaToast.showToast(context, "沒有合適的相機應用程序"); return; } Iterator resInfoIterator = resInfoList.iterator(); while (resInfoIterator.hasNext()) { ResolveInfo resolveInfo = (ResolveInfo) resInfoIterator.next(); String packageName = resolveInfo.activityInfo.packageName; grantUriPermission(packageName, imgUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION); } intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri); startActivityForResult(intent, REQUEST_TAKE); } catch (ActivityNotFoundException e1) { DadaToast.showToast(context, "沒有合適的相機應用程序"); e1.printStackTrace(); } catch (IOException e2) { DadaToast.showToast("創建文件失敗"); e2.printStackTrace(); }