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

”存儲“權限變為”媒體和檔案“,且隻能通路”僅媒體“的檔案目錄。因為項目需要讀取本地導入存儲檔案,”僅媒體“權限無法滿足目前項目需求。
初步分析:
控制變量排查問題根源,而在另一台2.0.0的手機并沒有發生此問題。如下圖中”存儲通路權限“開啟則可以擷取所有外部檔案,因而懷疑與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" />
聲明這個權限後,我們在系統權限管理中就可以找到通路所有檔案的權限入口,如下圖:
2、判斷是否擷取到MANAGE_EXTERNAL_STORAGE權限:
//判斷是否擷取MANAGE_EXTERNAL_STORAGE權限:
Boolean isHasStoragePermission= Environment.isExternalStorageManager()
3、使用系統intent跳轉至權限界面,打開所有檔案通路權限:
Intent intent = Intent();
intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivity(intent);