Android中的Environment.getExternalStorageState使用

來源:互聯網
上載者:User

如果我們想要讀取或者向SD卡寫入,這時就必須先要判斷一個SD卡的狀態,否則有可能出錯。
那麼SD卡狀態為什麼時才能讀取呢,經過我的各種情況的實踐,大致如下:

SD狀態 現象描述 /mnt/sdcard目錄是否存在 canRead返回 canWrite返回 在/mnt/sdcard建立檔案 在/mnt/sdcard建立檔案夾
MEDIA_MOUNTED

SD卡正常掛載 TRUE TRUE TRUE TRUE TRUE
MEDIA_REMOVED

無介質 TRUE FALSE FALSE false:  原因Permission denied FALSE
MEDIA_UNMOUNTED

有介質,未掛載,在系統中刪除 TRUE FALSE FALSE false:  原因Permission denied FALSE
MEDIA_BAD_REMOVAL

介質在掛載前被移除,直接取出SD卡 TRUE FALSE FALSE false:  原因Permission denied FALSE
MEDIA_CHECKING

正在磁碟檢查,剛裝上SD卡時 TRUE FALSE FALSE false:  原因Permission denied FALSE
MEDIA_SHARED

SD卡存在但沒有掛載,並且通過USB大型存放區共用,操作開啟USB儲存 TRUE FALSE FALSE false:  原因Permission denied FALSE
MEDIA_MOUNTED_READ_ONLY

sd卡存在並且已掛載,但是掛載方式為唯讀 - - 無法類比,SD卡不允許修改許可權

MEDIA_NOFS 介質存在但是為空白或用在不支援的檔案系統 - - 無法類比,SD卡格式化後再載入會自動產生系統檔案

MEDIA_UNMOUNTABLE 存在SD卡但是不能掛載,例如發生在介質損壞 - - 無法類比

通過上表可以看出,只有在SD卡狀態為MEDIA_MOUNTED時/mnt/sdcard目錄才是可讀可寫,並且可以建立目錄及檔案。
所以我們讀取SD卡時一般會這麼寫:

?
 
010203040506 String state;String path;state = Environment.getExternalStorageState();if(state.equals(Environment.MEDIA_MOUNTED)){
path = Environment.getExternalStorageDirectory().getAbsolutePath();

讀寫SD卡記得加這兩個許可權:

?

 

01

02

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

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

 

1 在AndroidManifest檔案中加入sdcard操作許可權
  * <!--在SDCard中建立與刪除檔案許可權 -->
  * <uses-permissioandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 
  * <!--往SDCard寫入資料許可權 --> 
  * <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
* 2 確認sdcard的存在
  * android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)
* 3 擷取擴充存放裝置的檔案目錄
  * android.os.Environment.getExternalStorageDirectory();

 

/////////////////////////////////////////////////

http://www.vogella.com/articles/Android/article.html#resources_android

http://www.coreservlets.com/android-tutorial/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.