猛禽洛的程式筆記庫

[Android] Android 11 後的檔案儲存機制

在Android 11以前,我們還可以自由運用手機的儲存空間,能在外部儲存空間自由地進行讀寫。

但從Android 11開始,對於儲存空間的管制變得很嚴,都跟iOS很像了,只能使用APP自己所屬的儲存位置,或是系統內定的資料夾(文件、下載、相片),這樣子一改,帶來了不少麻煩。

以下是Android 11後的檔案儲存方式:

程式移除後,這些資料會一併移除,不需要取得權限即可讀寫。

  • 使用內部儲存空間
//取得內部儲存空間,此區域容量不大,不會存太多東西在這邊,Android 11下預設是看不到此路徑的
//路徑為 data/data/< package name >/files/LUGIA
val filePath = File(filesDir , "LUGIA")

filesDir為內建的變數,直接回傳自己軟體的套件路徑。

 

  • 使用外部儲存空間
//取得外部儲存空間(現在記憶卡比較少見,所以通常會導到手機本身的儲存空間,可用檔案總管看到(Android 11))
//type為指定資料夾 null就是預設的Files 能使用的還有Caches等
//路徑範例: /storage/emulated/0/Android/data/< package name >/files/LUGIA
val filePath = File(getExternalFilesDir(null) , "LUGIA")

 

另外外部儲存空間還有系統內定的位置可以使用。

//取得系統內定的資料夾,下載資料夾、文件資料夾等 (Environment.DIRECTORY_XXXX)
//只有Android 11不需要要求權限,舊版系統需要權限才能存取
//程式移除後,這些資料夾的資料不會被移除
val filePath = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "LUGIA")

Android 11上實測不用取得權限就可以存取,在舊版Android的話還是需要取得權限。

 

以上就是在新架構下的檔案儲存方式。

-END-

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *