相机调用储存出现Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)的解决办法(已解决)

1.在AndroidManifest中添加相机和文件读写权限
出现该种报错是因为权限被限制,需要自行设置
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>


2. 在调用相机的Java文件中添加下面代码
    public static final int TAKE_PHOTO = 1;
    public static final int CROP_PHOTO = 2;
    private Button takePhotoBn;
    private ImageView showImage;
    private Uri imageUri; //图片路径
    private String filename; //图片名称

 //6.0以上需要调用权限校验
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS};
    //在 Activity 中添加权限校验
    public static void verifyStoragePermissions(Activity activity) {
        int permission = ActivityCompat.checkSelfPermission(activity,
                Manifest.permission.ACCESS_FINE_LOCATION);

        if (permission != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
                    REQUEST_EXTERNAL_STORAGE);
        }
    }


 
在onCreate中加入以下代码调用上述方法

 //6.0以上需要调用权限校验
        verifyStoragePermissions(this);
        takePhotoBn = (Button) findViewById(R.id.button);
        showImage = (ImageView) findViewById(R.id.imageView);
        //取消严格模式  FileProvider
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
            StrictMode.setVmPolicy( builder.build() );
        }


 3.在AndroidManifest的application中添加android:requestLegacyExternalStorage=“true”

 4、确定你的手机没有连接到电脑,因为SD卡只能被手机访问或者被电脑访问,不能二者同时访问。

5、如果你的应用需要创建文件或者目录,还需要添加如下权限:

 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

猜你喜欢

转载自blog.csdn.net/Liumotor/article/details/119537754