1. 程式人生 > >安卓Enviroment類的詳解

安卓Enviroment類的詳解

安卓的enviroment類一般是的到安卓系統的一些目錄路徑的資訊。

1: getDataDirectory() 獲取到Android中的data資料目錄(sd卡中的data資料夾)/data

2:getDownloadCacheDirectory() 獲取到下載的快取目錄     /cache

3:getExternalStorageDirectory() 獲取到外部儲存的目錄 

一般指SDcard/storage/sdcard0

4:getExternalStorageState()獲取外部設定的當前狀態 

一般指SDcardSDcard存在並且可以進行讀寫)

還有其他的一些狀態,可以在文件中進行查詢。

常量

String

MEDIA_BAD_REMOVAL

在沒有正確解除安裝SDCard之前移除了

String

MEDIA_CHECKING

正在磁碟檢查

String

MEDIA_MOUNTED

已經掛載並且擁有可讀可寫許可權

String

MEDIA_MOUNTED_READ_ONLY

已經掛載,但只擁有可讀許可權

String

MEDIA_NOFS

物件空白,或者檔案系統不支援

String

MEDIA_REMOVED

已經移除擴充套件裝置

String

MEDIA_SHARED

如果SDCard未掛載

,並通過USB大容量儲存共享

String

MEDIA_UNMOUNTABLE

不可以掛載任何擴充套件裝置

String

MEDIA_UNMOUNTED

已經解除安裝

判斷外部記憶體卡是否是可寫入

 String state = Environment.getExternalStorageState();    if (Environment.MEDIA_MOUNTED.equals(state)) {     return true;SD卡可以建立資料夾  }    return false; 沒有SD卡不能使用}

不可用就getCacheDir() 獲得應用的快取路徑,儲存在data/data/包名/cache 資料夾下,或者自己指定一個具體路徑


5:getRootDirectory()  獲取到Android Root路徑       /system

6.getExternalStoragePublicDirectory(String type) 

 得到當前app所在手機的sdcard位置下的公共子資料夾/storage/sdcard/...

type型別詳解

//警報的鈴聲Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS).getPath()=/storage/emulated/0/Alarms//相機拍攝的圖片和視訊儲存的位置Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath()=/storage/emulated/0/DCIM//下載檔案儲存的位置Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath()=/storage/emulated/0/Download//電影儲存的位置Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES).getPath()=/storage/emulated/0/Movies//音樂儲存的位置Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getPath()=/storage/emulated/0/Music//通知音儲存的位置Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS).getPath()=/storage/emulated/0/Notifications//下載的圖片儲存的位置Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath()=/storage/emulated/0/Pictures//用於儲存podcast(部落格)的音訊檔案Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PODCASTS).getPath()=/storage/emulated/0/Podcasts//儲存鈴聲的位置Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES).getPath()=/storage/emulated/0/Ringtones


getCacheDir()方法用於獲取/data/data/<application package>/cache目錄

getFilesDir()方法用於獲取/data/data/<application package>/files目錄


應用程式在執行的過程中如果需要向手機上儲存資料,一般是把資料儲存在SDcard中的。
大部分應用是直接在SDCard的根目錄下建立一個資料夾,然後把資料儲存在該資料夾中。
這樣當該應用被解除安裝後,這些資料還保留在SDCard中,留下了垃圾資料。
如果你想讓你的應用被解除安裝後,與該應用相關的資料也清除掉,該怎麼辦呢?

通過Context.getExternalFilesDir()方法可以獲取到 SDCard/Android/data/你的應用的包名/files/ 目錄,一般放一些長時間儲存的資料
通過Context.getExternalCacheDir()方法可以獲取到 SDCard/Android/data/你的應用包名/cache/目錄,一般存放臨時快取資料

如果使用上面的方法,當你的應用在被使用者解除安裝後,SDCard/Android/data/你的應用的包名/ 這個目錄下的所有檔案都會被刪除,不會留下垃圾資訊。

而且上面二個目錄分別對應 設定->應用->應用詳情裡面的”清除資料“與”清除快取“選項

如果要儲存下載的內容,就不要放在以上目錄下


專門寫一個方法來獲取快取地址

  1. public String getDiskCacheDir(Context context) {  
  2.     String cachePath = null;  
  3.     if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())  
  4.             || !Environment.isExternalStorageRemovable()) {  
  5.         cachePath = context.getExternalCacheDir().getPath();  
  6.     } else {  
  7.         cachePath = context.getCacheDir().getPath();  
  8.     }  
  9.     return cachePath;  
  10. }  
可以看到,當SD卡存在或者SD卡不可被移除的時候,就呼叫getExternalCacheDir()方法來獲取快取路徑,否則就呼叫getCacheDir()方法來獲取快取路徑。前者獲取到的就是 /sdcard/Android/data/<application package>/cache 這個路徑,而後者獲取到的是 /data/data/<application package>/cache 這個路徑。

Android開發:filePath放在哪個資料夾


Environment.getDataDirectory() = /data
Environment.getDownloadCacheDirectory() = /cache
Environment.getExternalStorageDirectory() = /mnt/sdcard
Environment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/test
Environment.getRootDirectory() = /system
getPackageCodePath() = /data/app/com.my.app-1.apk
getPackageResourcePath() = /data/app/com.my.app-1.apk
getCacheDir() = /data/data/com.my.app/cache
getDatabasePath(“test”) = /data/data/com.my.app/databases/test
getDir(“test”, Context.MODE_PRIVATE) = /data/data/com.my.app/app_test
getExternalCacheDir() = /mnt/sdcard/Android/data/com.my.app/cache
getExternalFilesDir(“test”) = /mnt/sdcard/Android/data/com.my.app/files/test
getExternalFilesDir(null) = /mnt/sdcard/Android/data/com.my.app/files
getFilesDir() = /data/data/com.my.app/files