无法访问内部存储上的公用文件夹

时间:2016-11-11 10:51:10

标签: java android

我的应用程序在带有External storage分区或内置/外置SD卡的标准设备上运行良好。但最近我转而使用Acer平板电脑进行测试,所有文件操作都被打破了。

平板电脑只有Internal storage,标准公共目录所在的位置(下载,DCIM等)。我有一个存储库,检查外部是否可用,如果没有 - 配置为使用内部。但是,无论有没有库,我都无法访问公共目录。这是我的印象:

  • 检测到外部分区,Environment.getExternalDirectory()返回一些公共文件夹,MEDIA_MOUNTED(读/写)状态,但我无法写入,读取,创建任何内容(读取/写入权限) Manifest.xml设置正确);如果从某个地方访问/ sdcard是空的,而不是从另一个地方访问,某些伏都教符号魔法,我猜...

  • 另一方面,当我切换到使用Internal storage时,我只能将文件写入应用程序专用文件夹(com / myapp /.../ app_)/ sdcard是不可访问的,尽管它实际上是在内部。

  • 尝试使用IntentsContentResolvers以获取Android操作系统 本身决定如何获取/访问数据和公共内部目录。即使它有效,我也需要完全重新实现我的FileUtils和FilePicker,因为该特定设备。(该应用程序在多个平板电脑,手机,模拟器上正常工作......)
  • 来自终端的
  • adb shell让我可以直接访问公共内部目录; Android Device Monitor没有;

任何意见表示赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

请点击以下链接了解更多详情:

https://developer.android.com/training/basics/data-storage/files.html https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

将文件保存到内部存储时,可以通过调用以下两种方法之一获取相应的目录作为文件:

  • getFilesDir()
  • getCacheDir()

例如:

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();
}