在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-
發佈留言