Android 10、11 存儲(chǔ)適配總結(jié)

作者:fishforest

鏈接:http://www.itdecent.cn/p/d5573e312bb8

先來看看存儲(chǔ)區(qū)域劃分

1、分區(qū)存儲(chǔ)原理

1、App訪問自身內(nèi)部存儲(chǔ)空間、訪問外部存儲(chǔ)空間-App私有目錄不需要任何權(quán)限(這個(gè)與Android 10.0之前一致)

2、外部存儲(chǔ)空間-共享存儲(chǔ)空間、外部存儲(chǔ)空間-其它目錄 App無法通過路徑直接訪問,不能新建、刪除、修改目錄/文件等

3、外部存儲(chǔ)空間-共享存儲(chǔ)空間、外部存儲(chǔ)空間-其它目錄 需要通過Uri訪問

分區(qū)存儲(chǔ)的變更在于第二點(diǎn)、第三點(diǎn)。

2、Android 10.0 存儲(chǔ)訪問方式變更地方在于

自帶外部存儲(chǔ)-共享存儲(chǔ)空間和自帶外部存儲(chǔ)-其它目錄

以上兩個(gè)地方不能通過路徑直接訪問文件,而是需要通過Uri訪問。

3、Android 10/11 存儲(chǔ)適配建議

通過分析Android 10/11存儲(chǔ)適配方式,了解到了不同的系統(tǒng)需要如何進(jìn)行適配,此時(shí)就需要一個(gè)統(tǒng)一的適配方案了。

適配核心

分區(qū)存儲(chǔ)是核心,App自身產(chǎn)生的文件應(yīng)該存放在自己的目錄下:

/sdcard/Android/data/packagename/ 和/data/data/packagename/

這兩個(gè)目錄本App無需申請?jiān)L問權(quán)限即可申請,其它App無法訪問本App的目錄。

適配共享存儲(chǔ)

共享存儲(chǔ)空間里的文件需要通過Uri構(gòu)造輸入輸出流訪問,Uri獲取方式有兩種:MediaStore和SAF。

適配其它目錄

在Android 11上需要申請?jiān)L問所有文件的權(quán)限。

具體做法

第一步

在AndroidManifest.xml里添加如下字段:

權(quán)限聲明:

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

在<application/>標(biāo)簽下添加如下字段:

android:requestLegacyExternalStorage="true"

第二步

如果需要訪問共享存儲(chǔ)空間,則判斷運(yùn)行設(shè)備版本是否大于等于Android6.0,若是則需要申請WRITE_EXTERNAL_STORAGE 權(quán)限。拿到權(quán)限后,通過Uri訪問共享存儲(chǔ)空間里的文件。

如果需要訪問其它目錄,則通過SAF訪問

第三步

如果想要做文件管理器、病毒掃描管理器等功能。則判斷運(yùn)行設(shè)備版本是否大于等于Android 6.0,若是先需要申請普通的存儲(chǔ)權(quán)。若運(yùn)行設(shè)備版本為Android 10.0,則可以直接通過路徑訪問/sdcard/目錄下文件(因?yàn)榻昧朔謪^(qū)存儲(chǔ));若運(yùn)行設(shè)備版本為Android 11.0,則需要申請MANAGE_EXTERNAL_STORAGE 權(quán)限。

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

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

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