700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 小米手机相册选取图片闪退问题

小米手机相册选取图片闪退问题

时间:2021-05-01 16:58:09

相关推荐

小米手机相册选取图片闪退问题

问题:

Caused by: java.lang.SecurityException: UID 10799 does not have permission to content://com.miui.gallery.open/raw/%2Fstorage%2Femulated%2F0%2FDCIM%2FCamera%2Fheader_view.jpg [user 0]

其他手机没有问题,但是我用的这个红米K40选照片做裁剪时,出现了这个问题,主要是两个:

一是从相册选取照片,二是调用裁剪(需要处理权限)

选取照片需要判断:

Build.VERSION.SDK_INT >= 24,处理imageUri的路径,对于24以上版本,需要再Mainifest文件中声明FileProvider,如下:

<providerandroid:name="androidx.core.content.FileProvider"android:authorities="${APPLACATION_ID}.fileprovider"android:grantUriPermissions="true"android:exported="false"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths"/></provider>

file_paths.xml内容如下:

<?xml version="1.0" encoding="utf-8"?><paths><external-path name="images" path="Pictures"/><external-files-path path="/myapp/" name="apk_path"/><external-files-path path="/myapp/head/" name="head_view"/><external-path name="beta_external_path" path="Download/"/><external-path name="beta_external_files_path" path="Android/data/"/></paths>

处理imageUri的路径如下:

Intent intent = new Intent(Intent.ACTION_PICK);file = new File(MyConstants.HEAD_PATH, "header_view.jpg");if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){imageUri = FileProvider.getUriForFile(this,MyConstants.APPLCATION_ID+".fileprovider",file);}else{imageUri = Uri.fromFile(file);}intent.setType("image/*");intent.putExtra("crop",true);intent.putExtra("scale",true);startActivityForResult(intent, CHOOSE_PHOTO);

选取之后,进行裁剪

Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(data.getData(), "image/*");intent.putExtra("scale", true);intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);intent.putExtra("outputX", 300);intent.putExtra("outputY", 300);intent.putExtra("return-data", false);ToastShowUtils.INSTANCE.grantPermissionFix(this, intent, imageUri);startActivityForResult(intent, CUT_PHOTO);// 启动裁剪程序

处理权限方法如下,使用kotlin写的

fun grantPermissionFix(mActivity: Activity, intent: Intent, uri: Uri?) {var flag = Intent.FLAG_GRANT_READ_URI_PERMISSIONflag = flag or Intent.FLAG_GRANT_WRITE_URI_PERMISSIONintent.addFlags(flag)val resInfoList = mActivity.packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)for (resolveInfo in resInfoList) {val packageName = resolveInfo.activityInfo.packageNametry {mActivity.grantUriPermission(packageName, uri, flag)} catch (e: Exception) {continue}intent.action = ponent = ComponentName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name)break}}

以上完美解决选取图片,并成功裁剪保存到指定路径。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。