2012-12-01 50 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