用新的Android SDK 29編譯的時候,Studio提示Environment.getExternalStorageDirectory()過時了,要用Context#getExternalFilesDir代替,Android Q以後Environment.getExternalStorageDirectory()返回的路徑可能無法直接訪問,所以改成了Context#getExternalFilesDir
所以Environment.getExternalStorageDirectory()可以改成:
getExternalFilesDir(null);
得到的路徑如下:
/storage/emulated/0/Android/data/yourPackageName/files
這個目錄會在應用被卸載的時候刪除,而且訪問這個目錄不需要動態申請STORAGE權限。
如果這個目錄不存在,系統會自動幫你創建,看下源碼:
getExternalFilesDir的參數可以傳以下幾種:
String?: The type of files directory to return. May be null for the root of the files directory or one of the following constants for a subdirectory: android.os.Environment#DIRECTORY_MUSIC , android.os.Environment#DIRECTORY_PODCASTS , android.os.Environment#DIRECTORY_RINGTONES , android.os.Environment#DIRECTORY_ALARMS , android.os.Environment#DIRECTORY_NOTIFICATIONS , android.os.Environment#DIRECTORY_PICTURES , or android.os.Environment#DIRECTORY_MOVIES . This value may be null . |
例如我們傳一個
getExternalFilesDir(Environment.DIRECTORY_PICTURES);
得到的路徑如下:
/storage/emulated/0/Android/data/yourPackageName/files/Pictures