android.system.ErrnoException: open failed: EPERM (Operation not permitted)
Posted guangdeshishe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android.system.ErrnoException: open failed: EPERM (Operation not permitted)相关的知识,希望对你有一定的参考价值。
android 10(Q)开始增加了沙盒机制,不能直接把文件保存到/sdcard目录下,只能保存到APP专属目录下;AndroidManifest.xml在标签下增加属性【android:requestLegacyExternalStorage=“true”】可以暂时保存到/sdcard路径下,但是Android11开始就失效了
我们可以通过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"); //在图库里显示的文件夹名:MyApplicationvalues.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.system.ErrnoException: open failed: EPERM (Operation not permitted)的主要内容,如果未能解决你的问题,请参考以下文章