FileProvider

通常開(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í)際的子目錄名稱

image.png

內(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è)路徑

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容