解決華為手機圖片選擇無效及產生的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);
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM