Android平臺從6.0(API23)開始系統對權限的管理更加嚴格,所有涉及敏感權限都需要用戶授權允許才能獲取,
因此一些應用基礎業務邏輯需要的權限會在應用啟動時申請,并引導用戶允許,
讀寫手機存盤權限
應用需要保存運行狀態等資料到手機SD卡中,啟動時需要獲取讀寫手機存盤權限,此權限為基礎權限,影響真機運行、wgt升級,
- 注意:此權限目標不是要訪問相冊,是Android把相冊寫入權限和存盤寫入權限合并在一個權限里了,
- 注意:wgt熱更新是應用市場不樂見的,不建議明顯提示給用戶或告知應用市場,
申請讀寫手機存盤需要用戶授權,會彈出如下提示框:

- HBuilderX2.4.2及以下版本,用戶拒絕此權限則直接退出應用,
- HBuilderX2.4.3+版本,用戶拒絕后鍵會彈出以下提示框引導用戶重新允許

- 點擊“取消”退出應用;
點擊“確定”重新彈出授權框,如果用戶已經勾選“不再詢問”則打開應用的設定界面,
此提示語可在manifest.json中配置 - HBuilderX2.5.0+開始支持配置應用啟動時申請獲取手機存盤權限,支持以下三種策略
- none
應用啟動時不申請 - once
應用第一次啟動時申請,用戶可以拒絕 - always
應用每次啟動都申請,并且用戶必須允許,用戶拒絕時會彈出以下提示框引導用戶重新允許
- none
原始碼視圖配置
打開manifest.json檔案,切換到“原始碼視圖”項
- uni-app專案
在"app-plus" -> "distribute" -> "android" 節點下添加 permissionExternalStorage 節點 - 5+ App專案
在 "plus" -> "distribute" -> "google" 節點下添加 permissionExternalStorage 節點
permissionExternalStorage節點資料格式如下:
"permissionExternalStorage": {
"request": "always",
"prompt": "應用保存運行狀態等資訊,需要獲取讀寫手機存盤(系統提示為訪問設備上的照片、媒體內容和檔案)權限,請允許,"
}
- equest
字串型別,必填,申請設備資訊權限策略,可取值none、once、always,默認值為always, - prompt
字串型別,可選,用戶拒絕時彈出提示框上的內容,
默認值為:應用保存運行狀態等資訊,需要獲取讀寫手機存盤(系統提示為訪問設備上的照片、媒體內容和檔案)權限,請允許,
國際化配置參考:https://ask.dcloud.net.cn/article/35860#strings
設定自定義鍵名稱為“dcloud_permission_write_external_storage_message”,
保存后提交云端打包生效
訪問設備資訊權限
Android平臺應用獲取設備資訊(如IMEI、IMSI等),統計、推送、廣告等業務功能依賴這些資訊,
此權限不是必選,拒絕此權限不影響App端基座運行,但擁有本權限可以給開發者提供更準確的統計報表,
而申請獲取這些資訊需要用戶授權,會彈出如下提示框:

華為手機應用的設定中權限串列中為“電話”權限
HBuilderX2.3.8+開始支持配置應用啟動時申請獲取設備資訊權限,支持以下三種策略
- none
應用啟動時不申請 - once
應用第一次啟動時申請,用戶可以拒絕 - always
應用每次啟動都申請,并且用戶必須允許,用戶拒絕時會彈出以下提示框引導用戶重新允許

- 此提示框刪的文本可自定義,參考下面的prompt欄位
默認策略為once,即應用第一次啟動時申請
原始碼視圖配置
打開manifest.json檔案,切換到“原始碼視圖”項
- uni-app專案
在 "app-plus" -> "distribute" -> "android" 節點下添加 permissionPhoneState 節點 - 5+ App專案
在 "plus" -> "distribute" -> "google" 節點下添加 permissionPhoneState 節點
permissionPhoneState節點資料格式如下:
"permissionPhoneState": {
"request": "always",
"prompt": "為保證您正常、安全地使用,需要獲取設備識別碼(部分手機提示為獲取手機號碼)使用權限,請允許,"
}
- request
字串型別,必填,申請設備資訊權限策略,可取值none、once、always,默認值為once, - prompt
字串型別,可選,用戶拒絕時彈出提示框上的內容,
默認值為:為保證您正常、安全地使用,需要獲取設備識別碼(部分手機提示為獲取手機號碼)使用權限,請允許,
國際化配置參考:https://ask.dcloud.net.cn/article/35860#strings
設定自定義鍵名稱為“dcloud_permission_read_phone_state_message”,
保存后提交云端打包生效
離線打包提示語配置及彈窗配置,
提示語配置
在主專案的strings.xml中添加如下欄位,strings.xml位于 專案目錄/src/main/res/values下,如果檔案或檔案夾不存在,直接新建即可,
存盤權限提示語配置
<resources>
<string name="dcloud_permission_write_external_storage_message">存盤權限提示語</string>
</resources>
讀取手機狀態權限配置
<resources>
<string name="dcloud_permission_read_phone_state_message">讀取手機狀態權限提示語</string>
</resources>
彈窗配置
在androidManifest.xml的application節點下添加如下欄位,
存盤權限彈窗配置
<application> <meta-data android:name="DCLOUD_WRITE_EXTERNAL_STORAGE" android:value="https://www.cnblogs.com/smileZAZ/archive/2020/12/07/once"/> </application>
value可取值為 none、once、always,
讀取手機狀態彈窗配置
<application> <meta-data android:name="DCLOUD_READ_PHONE_STATE" android:value="https://www.cnblogs.com/smileZAZ/archive/2020/12/07/once"/> </application>
alue可取值為 none、once、always,
補充
溝通發現,部分開發者在main.js里面呼叫了plus.device.getInfo這類方法,
但是其實API操作與permissionExternalStorage設定無關,permissionExternalStorage用于設定應用內部邏輯是否申請訪問SD卡權限
開發者是因為在啟動的時候呼叫API觸發了權限申請,誤以為permissionExternalStorage設定無效(其實設定是生效的),
其它API操作會根據功能需求來申請權限,比如作業系統相冊也會申請訪問SDK卡權限、定位操作會申請定位權限等,
轉載于https://ask.dcloud.net.cn/article/36549
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/231410.html
標籤:其他
