/storage/emulated/0/bluetooth/Screenshot.competeordersb.png: open failed: EACCES (Permission denied)

简介: /storage/emulated/0/bluetooth/Screenshot.competeordersb.png: open failed: EACCES (Permission denied)

这种问题一看就是权限问题,解决办法如下:

1,查看AndroidManifest.xml文件中是否添加静态读写权限。

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

2,6.0以上系统,查看在进行读写操作时是否动态申请读写权限

 void getPermission(){
        try{
            //需要的权限
            String[] permArr={
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS,
            };
            boolean needReq = false;
            for(int i=0;i<permArr.length;i++){
                if(ContextCompat.checkSelfPermission(this, permArr[i])!= PackageManager.PERMISSION_GRANTED){
                    needReq = true;
                    break;
                }
            }
            if(needReq)
                ActivityCompat.requestPermissions(this,permArr,1);
        }catch (Exception e){
            Log.w("动态申请权限时,发生异常。",e);
        }

3,10.0以上系统,在AndroidManifest.xml文件的application节点下添加

android:requestLegacyExternalStorage="true"

4.Android 11+

android:requestLegacyExternalStorage="true" 失效 如果需要使用公共存储,需要系统签名+

android:sharedUserId="android.uid.system"

我们可以通过Context的getExternalFilesDir(null)方法获取APP专属目录,例如:/storage/emulated/0/Android/data/com.example.myapplication/files如果需要把图片保存到系统相册里可以参考下面代码:

val bitmap = BitmapFactory.decodeResource(resources, R.drawable.image_03)
val values = ContentValues();
values.put( MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + File.separator + "MyApplication"); //在图库里显示的文件夹名:MyApplication
values.put(MediaStore.MediaColumns.DISPLAY_NAME, "test");
values.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
values.put(MediaStore.MediaColumns.DATE_ADDED, System.currentTimeMillis() / 1000);
values.put(MediaStore.MediaColumns.DATE_MODIFIED, System.currentTimeMillis() / 1000);
values.put(MediaStore.MediaColumns.IS_PENDING, 1);
val resolver = contentResolver;
val uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
val out = resolver.openOutputStream(uri!!)
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out)
values.clear()
values.put(MediaStore.MediaColumns.IS_PENDING, 0)
values.putNull(MediaStore.MediaColumns.DATE_EXPIRES)
resolver.update(uri, values, null, null)
Android 11 获取存储路径错误 android.system.ErrnoException: open failed: EPERM (Operation not permitted),Android11 不能获取sdcard通用空间路径。
 
private String getSavePath() {
        String path;
        if (Build.VERSION.SDK_INT > 29) {
            path = mContext.getExternalFilesDir(null).getAbsolutePath() + "/log/update/";
        } else {
            path = Environment.getExternalStorageDirectory().getPath() + "/log/update/";
        }
        return path;
    }
获取的空间路径为 Android/data/XXXX(应用包名)/log
<!-- Allows an application a broad access to external storage in scoped storage.
         Intended to be used by few apps that need to manage files on behalf of the users.
         <p>Protection level: signature|appop|preinstalled -->
    <permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        android:permissionGroup="android.permission-group.UNDEFINED"
        android:protectionLevel="signature|appop|preinstalled" />


目录
相关文章
|
Shell
xhost: unable to open display ":0.0"
-bash: xhost: 未找到命令 原因是因未没有安装相关的包(其他类似command not found命令没有可以用这种方式解决) yum whatprovides "*/xhost" 安装对应版本
1427 0
|
Java 开发工具 Android开发
Android Studio 解决:error adding symbols: File in wrong format clang++.exe: error: linker command...
错误日志: Error:FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:externalNativeBuildDebug'.
6406 0
|
Android开发
Permission failure: android.permission.CAPTURE_AUDIO_OUTPUT 解决办法
Permission failure: android.permission.CAPTURE_AUDIO_OUTPUT 解决办法
305 0
|
编解码
configure: error: You requested G729 audio codec but not found...die
configure: error: You requested G729 audio codec but not found...die
61 0
error: insufficient permissions for device
error: insufficient permissions for device
237 0
ERROR: Could not install packages due to an Oserror: [Errno 13] Permission denied: RECORD Consider
ERROR: Could not install packages due to an Oserror: [Errno 13] Permission denied: RECORD Consider
934 0
ERROR: Could not install packages due to an Oserror: [Errno 13] Permission denied: RECORD Consider
|
开发工具 Android开发
Error while waiting for device: The emulator process for AVD Pixel_API_30 has terminated.
Error while waiting for device: The emulator process for AVD Pixel_API_30 has terminated.
2900 0
Error while waiting for device: The emulator process for AVD Pixel_API_30 has terminated.
|
开发工具 Android开发
Error while waiting for device: The emulator process for AVD Pixel_2_XL_API_28 was killed.
Error while waiting for device: The emulator process for AVD Pixel_2_XL_API_28 was killed.
984 0
Error while waiting for device: The emulator process for AVD Pixel_2_XL_API_28 was killed.
|
Android开发
【错误记录】Android 文件查看错误 ( Error opening contents of device file ““: Cannot create directory )
【错误记录】Android 文件查看错误 ( Error opening contents of device file ““: Cannot create directory )
518 0
【错误记录】Android 文件查看错误 ( Error opening contents of device file ““: Cannot create directory )
|
编解码
configure: error: You requested G729 audio codec but not found...die
configure: error: You requested G729 audio codec but not found...die
166 0