Environment中針對的讀寫許可權判斷

2022-08-30 10:03:12 字數 3570 閱讀 2887

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卡但是不能掛載,例如發生在介質損壞--

無法模擬

1

string 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...