android應用開發中,常使用environment類去獲取外部儲存目錄,在訪問外部儲存之前一定要先判斷外部儲存是否已經是可使用(已掛載&可使用)狀態,
並且需要在androidmanifest.xml檔案中新增外部儲存讀和寫的許可權。
environment類中提供了幾個靜態常量用於標識外部儲存的狀態,這些狀態都是string型別直接使用equals()判斷即可!
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卡但是不能掛載,例如發生在介質損壞--
無法模擬
1string state;
2string path;
3 state =environment.getexternalstoragestate();4if
(state.equals(environment.media_mounted)){
5 path =environment.getexternalstoragedirectory().getabsolutepath();
6 }下面是android重的一段**。主要是示例environment檢測sdcard狀態的應用!
//獲取sdcard的目錄
6 file file =environment.getexternalstoragedirectory();
7 fileoutputstream outputstream = null; //
這是方便在後面關閉io流
//這兩個配置檔案中的狀態是不可少的,要向支援連線網路還需要網路允許23
4
在environment中還提供了android標準目錄的路徑,以string型別提供。
directory_alarms 系統提醒鈴聲存放的標準目錄。
directory_downloads
的標準目錄。
directory_movies 電影存放的標準目錄。
directory_music **存放的標準目錄。
directory_notifications 系統通知鈴聲存放的標準目錄。
directory_pictures 存放的標準目錄
directory_podcasts 系統廣播存放的標準目錄。
directory_ringtones 系統鈴聲存放的標準目錄。
static file getdatadirectory() 獲得data的目錄(/data)。
static file getexternalstoragedirectory() 獲得外部儲存**目錄。(/mnt/sdcard or /storage/sdcard0)
static file getrootdirectory() 獲得系統主目錄(/system)
除了用environment獲取儲存目錄之外,還可以通過把路徑寫死的方式,比如要讀取外部儲存/mnt/sdcard目錄下的檔案,可以在程式中直接用全路徑,
但是這樣做是很不好的,應該
android
實在是太開放了,外部儲存的目錄的什麼還是要韌體製作商才知道,但是有一點是毋庸置疑的,就是android框架層裡面
已經是指定好了environment.getdownloadcachedirectory()的返回路徑。所以,盡量用這種方式來獲取和儲存資料,以免韌體廠商不同而造成路徑的差異。
android的實際開發中還用了兩個非常重要的快取目錄,乙個是應用程式自己的快取空間,另乙個是外部儲存為該應該程式提供的快取空間。有什麼差別?
使用過lrucache和dislrucache的童鞋應該知道。
這兩個方法是通過上下文物件context獲取的,只要應用程式被解除安裝,這兩個目錄下的檔案都要被清空。
context.getcachedir() 獲取應用程式自己的快取目錄
context.getexternalcachedir() 獲取應用程式在外部儲存的儲存目錄
參考了:
java中的Environment類的簡單使用
environment 是乙個提供訪問環境變數的類。environment 包含常量 environment 是乙個提供訪問環境變數的類。environment 包含常量 1.media bad removal 返回getexternalstoragestate 表明sd卡被解除安裝前已被移除 2 ...
關於Environment類的使用
import org.springframework.core.env.environment 如何引用這個類 1.可以通過 autowired織入environment autowired private environment environment 2.可以通過實現 implements en...
使用Environment 來獲取系統的資訊
environment類可檢索資訊,如命令列引數 退出 環境變數設定 呼叫堆疊的內容 上次系統引導以來的時間,以及公共語言執行庫的版本 console.writeline 命令列 environment.mandline string arguments environment.get mandli...