在API 23没有写权限,但所有所需的权限授予
[email protected]_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)
测试/存储/模拟/ 0:OK
new FileOutputStream("/storage/emulated/0/test3.JPG", false)
FileOutputStream OK!!
原来的谷歌Android库有写权限我的图片,并能写进去。 (见时间戳“2016-08-19 17:55 2012(1).JPG”)
有人可以解释会发生什么吗?为什么我无法写入SD卡路径/ storage/emulated/1AF9-2810?
[email protected]_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
[email protected]_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权限,该权限仅适用于系统进程。
自Android 4.4以来,您无法写入removable storage的任意位置。您的权限为external storage,这不是可移动存储。
为什么原始画廊可以写入这个文件夹?还有任何第三方文件浏览器? –
@DennyWeinberg:“为什么原始画廊可以写入这个文件夹?” - 预安装的应用程序可以被ROM开发者授予额外的权利。 “还有任何第三方文件浏览器?” - 通常,它们也不能与可移动存储一起使用。 – CommonsWare
那么绝对没有解决方案吗?你也许是对的。有人向我报告ES文件资源管理器可以访问这些文件。但也许只能读取访问?没有写入权限? –
为什么不用正确的方法使用getExternalStoragePublicDirectory(),getExternalFilesDir()或getExternalFilesDirs() – lionscribe
因为我需要写入原始文件以更新exif信息。 –
对'/ storage/emulated/1AF9-2010'的任何尝试都会失败,因为它是无效路径。使用'/ storage/emulated/0/test3.JPG'进行测试是可以的,因为如预期的那样,0是一个user_id(你)。 1AF9-2810是外部scdard还是USB? 你能举报'ls -la/mnt/runtime/write/1AF9-2810'并尝试在该文件夹上创建一个新文件吗? – libeasy