2012-12-01 75 views
5

我正在开发一个需要直接访问sdcard的根文件夹的应用程序,但是它似乎在Android 4.2中,标准/ sdcard目录现在指向特定于用户的“模拟”sdcard运行应用程序。这不太好,因为我的应用程序需要访问存储在SD卡顶层的文件。有谁知道如何直接访问Android 4.2中的SD卡?Android 4.2中的访问/ sdcard

+0

这是一个实际的可移动SD卡?在我见过的4.x设备上,实际上没有SD卡,只是模拟了内部存储卷中的一个,所以目标将毫无意义。如果有物理卡,您可以使用adb shell的'mount'命令来查看它的处理方式。 –

+0

你似乎是误会。总是有一个/ sdcard分区,即使它是虚拟的。但是随着4.2更新,/ sdcard的处理完全不同。访问sdcard分区(在代码中)不再指向* real */sdcard,它指向您的sdcard的虚拟“分区”,该分区是当前用户特有的。 请记住,我正在开发的应用程序在低于4.2的Android版本上工作得很好,无论设备如何。 – Drew

+0

Koushik Dutta(ROM Manager的开发者)看到这篇文章,他抱怨同一个问题。 https://plus.google.com/103583939320326217147/posts/D7mZBjTJj5j – Drew

回答

2

您可以使用存储目录作为文件类型吗? (java.io.File

如果是这样,你可以得到外部存储(通常是SD卡,但将在没有SD卡的手机主存储)的使用如下代码在你的方法:

File path = Environment.getExternalStorageDirectory(); 

此外,存储访问权限需要Android Manifest中的READ_EXTERNAL_STORAGE权限 - 如果修改了任何数据,则需要WRITE_EXTERNAL_STORAGE。下面是这些权限因为它们将出现在清单:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

来源:

http://developer.android.com/reference/android/os/Environment.html http://developer.android.com/reference/android/Manifest.permission.html

+0

这就是我目前使用的,但问题是,在Android 4.2中,它不是重定向到/ sdcard(ExternalStorageDirectory)分区的实际根目录,而是重定向到/ sdcard(ExternalStorageDirectory)分区上的特定用户特定位置。 – Drew

+0

啊,我明白了 - 对不起,我误解了你的问题。 – Alex6642122

1

也许我误解你的问题,但是,我的Nexus银河运行的是Android 4.2.1我可以使用Environment.getExternalStorageDirectory()访问我的SD卡。返回的目录是/storage/emulated/0,但内容是/sdcard

+0

有一些关于存储的文档,但对于4.4 source.android.com/devices/tech/storage/config-example.html和doubleencore.com/2014/03/android-external-storage – pevik