【问题标题】:No write permissions on API 23 but all needed permissions grantedAPI 23 没有写入权限,但授予了所有需要的权限
【发布时间】:2016-08-19 18:41:25
【问题描述】:

文件:

root@generic_x86:/storage # ls -la 1AF9-2810/
-rwxrwx--x root     sdcard_rw   348218 2016-08-19 17:55 2012 (1).JPG
-rwxrwx--x root     sdcard_rw   106512 2014-12-05 19:49 2012 (2).jpg
drwxrwx--x root     sdcard_rw          2016-08-16 19:36 Android
drwxrwx--x root     sdcard_rw          2016-08-16 19:36 LOST.DIR

授予 Android API 23 权限:

ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
true
ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
true

测试新文件1:ko

new File("/storage/emulated/1AF9-2810/test1").createNewFile()
IOException - open failed: ENOENT (No such file or directory)

测试新文件2:ko

new FileOutputStream("/storage/emulated/1AF9-2810/test2", false)
FileNotFoundException - /storage/emulated/1AF9-2810/test2: open failed: ENOENT (No such file or directory)

测试现有文件:ko

new FileOutputStream("/storage/emulated/1AF9-2810/2012 (1).JPG", false)
FileNotFoundException - /storage/emulated/1AF9-2810/2012 (1).JPG: open failed: ENOENT (No such file or directory)

测试 /storage/emulated/0: ok

new FileOutputStream("/storage/emulated/0/test3.JPG", false)
FileOutputStream OK!!

原始的 Google Android 图库对我的图像具有写入权限,并且可以写入其中。 (见时间戳“2016-08-19 17:55 2012 (1).JPG”)

有人可以解释发生了什么吗?为什么我无法写入sd卡路径/storage/emulated/1AF9-2810?

root@generic_x86:/storage # ls -la
drwxrwx--x root     sdcard_rw          2016-08-19 17:55 1AF9-2810
drwx--x--x root     sdcard_rw          2016-08-19 17:28 emulated
drwxr-xr-x root     root              2016-08-19 17:28 self

df

root@generic_x86:/storage # df
Filesystem               Size     Used     Free   Blksize
/dev                   249.6M    44.0K   249.6M   4096
/sys/fs/cgroup         249.6M    12.0K   249.6M   4096
/mnt                   249.6M     0.0K   249.6M   4096
/system                  1.2G   861.7M   378.2M   4096
/cache                  61.0M    64.0K    60.9M   4096
/data                    1.9G   205.6M     1.7G   4096
/storage               249.6M     0.0K   249.6M   4096
/mnt/runtime/default/emulated     1.9G   205.6M     1.7G   4096
/storage/emulated        1.9G   205.6M     1.7G   4096
/mnt/runtime/read/emulated     1.9G   205.6M     1.7G   4096
/mnt/runtime/write/emulated     1.9G   205.6M     1.7G   4096
/mnt/media_rw/1AF9-2810  1020.0M   474.0K  1019.5M   2048
/mnt/runtime/default/1AF9-2810  1020.0M   474.0K  1019.5M   2048
/storage/1AF9-2810    1020.0M   474.0K  1019.5M   2048
/mnt/runtime/read/1AF9-2810  1020.0M   474.0K  1019.5M   2048
/mnt/runtime/write/1AF9-2810  1020.0M   474.0K  1019.5M   2048

编辑: 有趣的讨论:http://forum.xda-developers.com/showthread.php?t=2634840&page=2

但如果没有 root 访问权限,它就无法工作。我们需要只允许系统进程使用的 WRITE_MEDIA_STORAGE 权限。

【问题讨论】:

  • 为什么不尝试正确的方法,使用 getExternalStoragePublicDirectory()、getExternalFilesDir() 或 getExternalFilesDirs()
  • 因为我需要写入原始文件才能更新exif信息。
  • /storage/emulated/1AF9-2010 的任何试用都会失败,因为它是无效路径。 /storage/emulated/0/test3.JPG 的测试没问题,因为 0 正如预期的那样,是一个 user_id(你)。 1AF9-2810 是外接 SDD 还是 USB?您能否报告ls -la /mnt/runtime/write/1AF9-2810 并尝试在该文件夹上创建一个新文件?

标签: android file permissions


【解决方案1】:

自 Android 4.4 以来,您无法写入 removable storage 上的任意位置。您的权限适用于external storage,它不是可移动存储。

【讨论】:

  • 为什么原来的图库可以写入这个文件夹?还有任何第三方文件浏览器?
  • @DennyWeinberg:“为什么原来的画廊可以写入这个文件夹?” -- ROM 开发者可以授予预装应用程序额外的权限。 “还有第三方文件浏览器吗?” -- 通常,它们也不能与可移动存储一起使用。
  • 那么绝对没有解决方案?你也许是对的。有人向我报告说 ES File Explorer 可以访问这些文件。但也许只有读取权限?没有写权限?
  • @DennyWeinberg:“所以绝对没有解决方案?” -- 欢迎您使用ACTION_OPEN_DOCUMENTACTION_CREATE_DOCUMENTthe Storage Access Framework 的其余部分。这两个Intent 操作对应于桌面操作系统的“文件打开”和“文件另存为”对话框。用户可以使用任何存储提供商:外部存储、可移动存储、Google Drive、Dropbox 等。您可以使用 Uri 对象(类似于 URL)和 ContentResolver(类似于 HTTP 客户端 API)来读取和写内容。
  • 这真的很疯狂不是吗?硬件提供商/谷歌可以开发一个创建照片的相机应用程序,普通开发人员无法更改 exif 信息并且不存在“硬写”权限......或者只是从图库中删除图像......只有我一个人有这种观点?
猜你喜欢
  • 2023-01-16
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-22
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多