【问题标题】:Unable to access public folders on Internal storage无法访问内部存储上的公用文件夹
【发布时间】:2016-11-11 10:51:09
【问题描述】:

我的应用程序可以在带有External storage 分区或内置/外置 SD 卡的标准设备上正常运行。但是最近换了个Acer平板测试,上面所有的文件操作都坏掉了。

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

  • 检测到外部分区,Environment.getExternalDirectory() 返回一些公用文件夹,MEDIA_MOUNTED(读/写)状态,但我无法写、读、创建任何目录(@987654325 中的读/写权限@设置正确); /sdcard 如果从某个地方访问,而不是从另一个地方访问,那么 /sdcard 是空的,我猜是某种巫毒符号链接魔法......

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

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

感谢任何意见。谢谢。

【问题讨论】:

标签: java android


【解决方案1】:

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

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

【讨论】:

  • 谢谢,但我试过了。它使用应用程序的私人场所。而且我需要能够在公共文件夹(下载、DCIM)中创建/读取/写入文件。恰好在此特定设备的内部存储中。
猜你喜欢
  • 2020-02-27
  • 2015-07-08
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 2020-11-06
  • 2021-03-21
  • 1970-01-01
相关资源
最近更新 更多