我的应用程序在带有External storage
分区或内置/外置SD卡的标准设备上运行良好。但最近我转而使用Acer平板电脑进行测试,所有文件操作都被打破了。
平板电脑只有Internal storage
,标准公共目录所在的位置(下载,DCIM等)。我有一个存储库,检查外部是否可用,如果没有 - 配置为使用内部。但是,无论有没有库,我都无法访问公共目录。这是我的印象:
检测到外部分区,Environment.getExternalDirectory()
返回一些公共文件夹,MEDIA_MOUNTED(读/写)状态,但我无法写入,读取,创建任何内容(读取/写入权限) Manifest.xml
设置正确);如果从某个地方访问/ sdcard是空的,而不是从另一个地方访问,某些伏都教符号魔法,我猜...
另一方面,当我切换到使用Internal storage
时,我只能将文件写入应用程序专用文件夹(com / myapp /.../ app_)/ sdcard是不可访问的,尽管它实际上是在内部。
Intents
和ContentResolvers
以获取Android操作系统
本身决定如何获取/访问数据和公共内部目录。即使它有效,我也需要完全重新实现我的FileUtils和FilePicker,因为该特定设备。(该应用程序在多个平板电脑,手机,模拟器上正常工作......)adb shell
让我可以直接访问公共内部目录; Android Device Monitor
没有; 任何意见表示赞赏。感谢。
答案 0 :(得分:0)
请点击以下链接了解更多详情:
https://developer.android.com/training/basics/data-storage/files.html https://developer.android.com/guide/topics/data/data-storage.html#filesInternal
将文件保存到内部存储时,可以通过调用以下两种方法之一获取相应的目录作为文件:
例如:
File file = new File(context.getFilesDir(), filename);
或者,您可以调用openFileOutput()来获取写入内部目录中文件的FileOutputStream。例如,以下是如何将一些文本写入文件:
String filename = "myfile";
String string = "Hello world!";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}