一直以來對android系統目錄的擷取方法和具體代表含義沒有掌握清楚,今天特意整理了一下,分享給大家,對自己也是一個總結。
在android 6.0以前,你可以隻關注外置存儲是否挂載即可,但是從6.0以後,也就是m系統後,還需要判斷是否有讀寫權限,隻有具備這些權限才可以讀寫外置存儲。
1,context.getfilesdir
擷取路徑:/data/user/0/應用包名/files
該目錄是應用的檔案存儲目錄,應用被解除安裝時,該目錄一同被系統删除。預設存在,預設具備讀寫權限(6.0系統可以不用向使用者申請)
2,context.getcachedir
擷取路徑:/data/user/0/應用包名/cache
該目錄是應用的檔案緩存目錄,應用被解除安裝時,該目錄一同被系統删除。預設存在,預設具備讀寫權限。不同于getfiledir,該目錄下的檔案在系統記憶體緊張時,會被清空檔案,來騰出空間供系統使用,著名的圖檔加載庫imageloader就是在沒有外置存儲讀寫權限時使用此檔案夾。getfiledir,不會因為系統記憶體不足而被清空。(6.0系統可以不用向使用者申請)
3,context.getobbdir
擷取路徑:/storage/emulated/0/android/obb/應用包名
該目錄是應用的資料存放目錄,一般被用來存放遊戲資料包obb檔案。預設存在,可讀寫(6.0系統可以不用向使用者申請)
4,context.codecachedir
擷取路徑:/data/user/0/應用包名/code_cache
預設存在,可讀寫。(6.0系統可以不用向使用者申請)
5,context.getexternalfilesdir
擷取路徑:(以下載下傳目錄為準) /storage/emulated/0/android/data/應用包名/files/download
6,context.getexternalcachedir
擷取路徑:/storage/emulated/0/android/data/應用包名/cache
7,context.getdatabasepath
擷取路徑:/data/user/0/應用包名/databases/參數名
預設不存在,可讀寫。(6.0系統可以不用向使用者申請)
8,context.getdir
擷取路徑:/data/user/0/應用包名/app_參數名
預設存在,可讀寫。分為private等三個權限,private代表僅能自己通路。(6.0系統可以不用向使用者申請)
9,context.getpackagecodepath
擷取路徑:/data/app/應用包名-1/base.apk
預設存在,擷取apk包路徑
10,context.getrootdirectory
擷取路徑:/system
預設存在,不可讀寫(除非具備root權限)
11,environment.getexternalstoragedirectory
擷取路徑:/storage/emulated/0
預設存在,聲明權限則可讀寫(6.0和以後系統還需要向使用者申請同意才可以)
12,environment.getexternalstoragepublicdirectory
擷取路徑:/storage/emulated/0/download(以下載下傳目錄為例)
13,environment.getdownloadcachedirectory
擷取路徑:/cache
14,context.getfilestreampath
擷取路徑:/data/data/應用包名/files/download(示例download)
附注:
1)上述路徑是通過getabsulotepath方法獲得,一般情況下等同于getpath
2)在6.0系統上,一般java層實作對外置存儲的檔案操作需要向使用者申請,如果用c層實作,則可以越過這種限制
3)配置targetsdk為19,compilesdk為22,可以避免在6.0手機上的權限限制