安卓Enviroment類的詳解
安卓的enviroment類一般是的到安卓系統的一些目錄路徑的資訊。
1: getDataDirectory() 獲取到Android中的data資料目錄(sd卡中的data資料夾)/data
2:getDownloadCacheDirectory() 獲取到下載的快取目錄 /cache
3:getExternalStorageDirectory() 獲取到外部儲存的目錄
一般指SDcard(/storage/sdcard0)
4:getExternalStorageState()獲取外部設定的當前狀態
一般指SDcard(SDcard存在並且可以進行讀寫)
還有其他的一些狀態,可以在文件中進行查詢。
常量
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未掛載 |
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/你的應用的包名/ 這個目錄下的所有檔案都會被刪除,不會留下垃圾資訊。
而且上面二個目錄分別對應 設定->應用->應用詳情裡面的”清除資料“與”清除快取“選項
如果要儲存下載的內容,就不要放在以上目錄下
專門寫一個方法來獲取快取地址
- public String getDiskCacheDir(Context context) {
- String cachePath = null;
- if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
- || !Environment.isExternalStorageRemovable()) {
- cachePath = context.getExternalCacheDir().getPath();
- } else {
- cachePath = context.getCacheDir().getPath();
- }
- return cachePath;
- }
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