天天看點

【FAQ】從存儲權限看HarmonyOS 3.0中應用适配

問題背景:

HarmonyOS 3.0釋出了,之前開發的Android的應用,發現系統選項中存儲權限部分有變化,如下圖:

【FAQ】從存儲權限看HarmonyOS 3.0中應用适配

【FAQ】從存儲權限看HarmonyOS 3.0中應用适配

”存儲“權限變為”媒體和檔案“,且隻能通路”僅媒體“的檔案目錄。因為項目需要讀取本地導入存儲檔案,”僅媒體“權限無法滿足目前項目需求。

初步分析:

控制變量排查問題根源,而在另一台2.0.0的手機并沒有發生此問題。如下圖中”存儲通路權限“開啟則可以擷取所有外部檔案,因而懷疑與3.0系統權限控制有關。

【FAQ】從存儲權限看HarmonyOS 3.0中應用适配

真正的原因:

查閱資料後發現,”僅媒體“權限是Android 11中新增的”媒體檔案通路權限“ (​​Android 11 中的存儲機制更新  |  Android 開發者  |  Android Developers​​),是以判斷HarmonyOS 3.0适配的是Android 11以上版本。是以需要做相應的适配,查閱官方文檔針對Android 11上通路所有檔案,有一個新的權限MANAGE_EXTERNAL_STORAGE(​​管理儲存設備上的所有檔案  |  Android 開發者  |  Android Developers​​)

具體步驟如下:

1、在Manifest中聲明權限:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />      
【FAQ】從存儲權限看HarmonyOS 3.0中應用适配

聲明這個權限後,我們在系統權限管理中就可以找到通路所有檔案的權限入口,如下圖:

【FAQ】從存儲權限看HarmonyOS 3.0中應用适配

2、判斷是否擷取到MANAGE_EXTERNAL_STORAGE權限:

//判斷是否擷取MANAGE_EXTERNAL_STORAGE權限:
    Boolean isHasStoragePermission= Environment.isExternalStorageManager()      
【FAQ】從存儲權限看HarmonyOS 3.0中應用适配

3、使用系統intent跳轉至權限界面,打開所有檔案通路權限:

Intent intent = Intent();
    intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
    startActivity(intent);      
【FAQ】從存儲權限看HarmonyOS 3.0中應用适配