通常開(kāi)發(fā)中,適配Android7.0主要就是適配其中文件訪問(wèn)權(quán)限。比如調(diào)用系統(tǒng)拍照,應(yīng)用更新后安裝功能都是涉及到。
在清單文件中聲明provider標(biāo)簽
<provider
android:name="xxxxx.FileProvider"
android:authorities=".fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
android:authorities表示授權(quán)者,這里的格式一般是[appId].fileprovider
android:exported只能為false
android:grantUriPermissions="true"表示授權(quán)Uri權(quán)限 ,且必須為true
meta-data里設(shè)置指定的文件目錄,為引用某個(gè)xml文件,格式如下
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<root-path name="root" path="" />
<files-path name="files" path="" />
<cache-path name="cache" path="" />
<external-path name="external" path="" />
<external-files-path name="name" path="path" />
<external-cache-path name="name" path="path" />
</paths>
每個(gè)節(jié)點(diǎn)都支持兩個(gè)屬性:
name,此值會(huì)隱藏您要共享的子目錄的名稱。
path,實(shí)際的子目錄名稱

內(nèi)部存儲(chǔ)
getCacheDir() =/data/user/0/包名/cache
getFilesDir() = /data/user/0/包名/files
外部存儲(chǔ)
通過(guò)context.getExternalFilesDir()方法可以獲取到 SDCard/Android/data/你的應(yīng)用的包名/files/ 目錄,一般放一些長(zhǎng)時(shí)間保存的數(shù)據(jù)
通過(guò)context.getExternalCacheDir()方法可以獲取到 SDCard/Android/data/你的應(yīng)用包名/cache/目錄,一般存放臨時(shí)緩存數(shù)據(jù)
DIRECTORY_MUSIC:音樂(lè)類型 /storage/emulate/0/music
DIRECTORY_PICTURES:圖片類型
DIRECTORY_MOVIES:電影類型
DIRECTORY_DCIM:照片類型,相機(jī)拍攝的照片視頻都在這個(gè)目錄(digital camera in memory) /storage/emulate/0/DCIM
DIRECTORY_DOWNLOADS:下載文件類型 /storage/emulate/0/downloads
DIRECTORY_DOCUMENTS:文檔類型
DIRECTORY_RINGTONES:鈴聲類型
DIRECTORY_ALARMS:鬧鐘提示音類型
DIRECTORY_NOTIFICATIONS:通知提示音類型
DIRECTORY_PODCASTS:播客音頻類型
1、/storage/sdcard0, /sdcard, /mnt/sdcard ,/storage/emulated/legacy
https://blog.csdn.net/ouyang_peng/article/details/47173367/差異來(lái)源
4.0版本:我們知道Linux中是掛載到mnt下,一開(kāi)始目錄是為/mnt/sdcard,但隨著后來(lái)版本差異等原因,有了/sdcard、/storage/sdcard0,但實(shí)際可以理解指向都是為/mnt/sdcard
到了4.2之后因?yàn)橐恢痹谧儎?dòng),所以直接掛載在/storage/emulated/legacy,而/storage/sdcard0, /sdcard, /mnt/sdcard都為軟連接到/storage/emulated/legacy
而為什么要有一個(gè)0,這個(gè)是由于多用戶原因,此處的多用戶主要谷歌針對(duì)多個(gè)用戶擁有私人的應(yīng)用數(shù)據(jù)而出現(xiàn)的,如多一個(gè)用戶那么0就變成1
2、/data/data,/data/user/0
實(shí)際是掛載在/data/user/0上,/data/data軟連接到前者
所以路徑才有了以上的差異,不同手機(jī)顯示不同,但是實(shí)際上都指向同個(gè)路徑