转载 https://blog.csdn.net/u011386173/article/details/88827783
Android9 用AS写了个demoapk,想要创建文件test.pcm,code如下:
File file = new File("/sdcard","test.pcm");
if (!file.exists()) {
boolean created = false;
try {
created = file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
但是却抛出了异常:System.err: java.io.IOException: Permission denied.
看到Permission denied,即使在manifest中添加对应的写权限?
在activity启动时候添加了动态权限申请,仍然会报上面的错
Environment.getDataDirectory()
你想在/data文件夹下一级目录进行操作是不被允许的。
能操作文件夹只有两个地方:
1.sdcard
2./data/<package_name>/files/
详见api doc:
docs/guide/topics/data/data-storage.html#filesExternal
android提供了8个分区公开权限,可以读写,更多和storage相关的可查阅API Docs:docs/guide/topics/data/data-storage.html#filesExternal
google官方提供了一个创建文件的说明:https://developer.android.com/guide/topics/providers/document-provider#create
另外,对于给外置存储设备写入数据,似乎要系统级应用才有权限,AS编译出来的应用或者第三方应用是没有权限的,该结论没有亲测过....对于应用程序不能访问外置存储设备,是因为google为了强化Android系统对应用程序的访问控制,增强应用程序之间的隔离效果,确保每个应用程序之间的独立运作,建立类似于沙盒(sandbox)的隔离效果,从而阻止恶意应用程序对系统或其他应用程序的攻击。