解决华为手机图片选择无效及产生的open failed: EACCES (Permission denied)错误

Posted sharley

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决华为手机图片选择无效及产生的open failed: EACCES (Permission denied)错误相关的知识,希望对你有一定的参考价值。

在华为手机上调起图片选择时原来的效果如下

技术分享图片

原来的代码是

 Intent intent = new Intent();
 intent.setAction(Intent.ACTION_GET_CONTENT);
 intent.setType("image/*");
 startActivityForResult(intent, CODE_PHOTO_REQUEST);

当使用ACTION_GET_CONTENT时,直接点击“图片”里的照片返回的uri = content://com.android.providers.media.documents/document/image%3A164287,而点击“图库”的照片返回的uri = content://media/external/images/media/164287,选择“图片”中的照片去截取时无效或提示此图片无法加载。

后将action改为ACTION_PICK:

 Intent intent = new Intent();
 intent.setAction(Intent.ACTION_PICK);
 intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
 startActivityForResult(intent, CODE_PHOTO_REQUEST);

界面效果为:

技术分享图片

这时候选择的图片返回的URI就都是content://media/external/images/media/164287格式的,都可以跳转裁剪界面

但是在裁剪后报出open failed: EACCES (Permission denied)的错误,说是由于没有READ_EXTERNAL_STORAGE(或WRITE_EXTERNAL_STORAGE)的权限,但是在清单文件中 已经加入了这两项权限,最后找到是因为应用的权限管理中禁用了存储权限,在跳转相册的代码前设置打开即可

    public static void verifyStoragePermissions(Activity activity) {
        // Check if we have write permission
        int permission = ActivityCompat.checkSelfPermission(activity,
                Manifest.permission.WRITE_EXTERNAL_STORAGE);//缺少什么权限就写什么权限
        if (permission != PackageManager.PERMISSION_GRANTED) {
            // We don‘t have permission so prompt the user
            ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE);
        }
    }

 

以上是关于解决华为手机图片选择无效及产生的open failed: EACCES (Permission denied)错误的主要内容,如果未能解决你的问题,请参考以下文章

苹果手机点击付款与配送时显示:无法连接icloud

iOS11中navigationBar上 按钮图片设置frame无效 不受约束 产生错位问题 解决

Camtasia录制时出现video codec open failed错误的解决方法

为啥华为手机OTG连不上

安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法

华为荣耀各型号手机怎么查EMUI及系统版本?