【发布时间】: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