from://http://blog.chinaunix.net/uid-26727976-id-3146895.html
在2.x的版本中,在manifest中配置的權限android.permission.WRITE_EXTERNAL_STORAGE確實是用來使得sd卡獲得寫的權限。而在4.0開發的源碼當中,由於有了內外置sd卡的區分,android.permission.WRITE_EXTERNAL_STORAGE的權限用來設置了內置sd卡的寫權限,如果在manifest中只是配置了這個權限,那個應用只能在內置sd卡中進行寫操作,還是無法在外置sd卡中進行寫操作。需要寫外置sd卡的話,需要配置另一個權限android.permission.WRITE_MEDIA_STORAGE,這樣就可以在外置sd卡中進行寫入操作了。
這兩個權限都被定義在 android源碼目錄\frameworks\base\data\etc\platform.xml中:
- <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
- <group gid="sdcard_rw" />
- </permission>
- <permission name="android.permission.WRITE_MEDIA_STORAGE" >
- <group gid="media_rw" />
- </permission>
使用到的類主要是framework/base/core/java/android/os/storage/StorageVolume.java及相同目錄下的StorageManager.java文件。
StorageManager類可以獲得所有的存儲媒體列表,及StorageVolume類型的數組,從而可以獲得對應存儲是否可讀寫一類的信息。
希望可以幫助遇到相同問題的童鞋。
2.3中聲明
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
可以讀寫SDCARD,包括其他storage,比如內部flash,usb等等
4.0中如果只聲明這個,會發現其他mount的設備有可能沒有寫權限,需要同時聲明
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/>
這樣才可以讀寫/mnf/flash , /mnt/usb, /mnt/externa等目錄
