2016-11-11 153 views
2

我有一个应用程序可以在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 from terminal give me直接访问公共内部目录; Android Device Monitor不;

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

+1

https://developer.android.com/training/permissions/requesting.html – 1615903

+0

非常感谢,1615 ...!这解决了问题。 – speirs23

回答

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

谢谢,但我尝试过。它使用应用程序的私人位置。我需要能够在公共文件夹(下载,DCIM)中创建/读取/写入文件。对于这个特定设备的内部存储器恰好是这样。 – speirs23

相关问题