在JellyBean中,Android添加了一個新的權 限」android.permission.READ_EXTERNAL_STORAGE」,顧名思義該權限說明該程序能夠讀取設備外部存儲空間(內置 SDcard和外置SDCard)的文件,若是您的App已經添加了「WRITE_EXTERNAL_STORAGE 」權限 ,則就不必添加讀的權限了,寫權限已經包含了讀權限了。android
而對於那些既沒有寫權限也沒有設置這個新的讀權限的App,在Jelly Bean以前的版本中讀取SDCard中的內存是沒問題的,而在新的JellyBean的設置選項中Google新添加了一個設置項:「對USB存儲設備 進行讀寫保護」,若是用戶啓用了該選項,則沒有添加」android.permission.READ_EXTERNAL_STORAGE」或者 「WRITE_EXTERNAL_STORAGE 」權限的App是不能讀取SDCard中文件的。
4.1的模擬器目前沒有讀取系統的設置項內存,因此該問題在模擬器上是測試不出來的。ide
若是您的App沒有直接讀取SDcard中的文件,而是處理從Intent或者ContentProvider中獲取的URI,因爲URI可能指向一個文件,因此這種狀況您也須要添加該讀權限,例如(使用 ContentResolver
來打開一個 file://
Uri
)測試
若是您的App提供了ContentProvider,則您應該暴露 content://
Uri給第三方程序使用(而不是
spafile://
Uri
), 第三方程序在使用content://
Uri訪問SDCard中的文件內容的時候 是經過您的ContentProvider來打開文件的,這樣使用您的App的軟件就無需添加讀文件的權限了。
下圖是Jelly Bean中對USB讀寫保護的設置項截圖,注意在確認對話框中 提示可能會致使沒有讀寫權限的App沒法讀取SDcard中的內容:code
對USB進行讀寫保護blog
讀寫保護功能確認對話框內存
Read more: http://blog.chengyunfeng.com/?p=427#ixzz3XNsEwSdA
get