想了解更多關于開源的內容,請訪問:
51CTO 鴻蒙開發者社區
https://ost.51cto.com
引導用戶跳轉到系統設置頁進行權限,通知的相關設置,類似android和iOS應用中常見的應用內跳轉到設置進行通知開啟或權限設置的操作。
應用經常會遇到如下的業務訴求:
場景一:如果應用首次拒絕了消息通知,應用希望能夠引導用戶拉起設置應用設置允許通知,用來接收應用內的推送消息;并且在設置完后返回頁面可以監聽到修改后的狀態。
場景二:當用戶使用一些需要用戶授權的api時(如訪問獲取聯系人信息),若用戶首次拒絕授權,則需要引導用戶到權限設置頁面能夠主動進行應用權限的修改。
場景三:支持打開/關閉系統功能如Wi-Fi、NFC、移動網絡、藍牙等。
如果應用首次拒絕了消息通知,應用希望能夠引導用戶拉起設置應用設置允許通知,用來接收應用內的推送消息;并且在設置完后返回頁面可以監聽到修改后的狀態。
為Button綁定拉起事件。
Button(this.buttonText).onClick(()=>{ let context = getContext(this) as common.UIAbilityContext; let want: Want = { bundleName: 'com.huawei.hmos.settings',//設置應用bundleName abilityName: 'com.huawei.hmos.settings.MainAbility',//設置應用abilityName uri: "systemui_notification_settings",//通知管理頁面 parameters: { pushParams: { bundleName:context.abilityInfo.bundleName//拉起方應用包名 } }; context.startAbility(want) }).margin(10) Text(this.message)
在打開頁面時獲取通知管理中按鈕狀態,Notification.requestEnableNotification()請求發送通知的許可,第一次調用會彈窗讓用戶選擇。
onPageShow(): void { Notification.requestEnableNotification().then(() => { //已打開通知 this.message = "已允許接收消息推送。" this.buttonText = "去關閉通知" console.info("requestEnableNotification success"); }).catch((err:Error) => { //未打開通知 this.message = "已禁止接收消息推送。" this.buttonText = "去開啟通知" console.info("requestEnableNotification error"); }); }
當用戶使用一些需要用戶授權的api時(如訪問獲取聯系人信息),若用戶首次拒絕授權,則需要引導用戶到權限設置頁面能夠主動進行應用權限的修改。
是否為用戶授權可參考允許ACL跨級別申請-應用權限列表-應用權限管控-程序訪問控制-Ability Kit(程序框架服務)-開發 | 華為開發者聯盟 (huawei.com)
暫無直接跳轉權限管理的方式,可通過跳轉至應用詳情進行用戶申請權限的修改。
為button綁定獲取聯系人信息事件:
Button("獲取聯系人").onClick(async () => { const permissions: Array<Permissions> = ['ohos.permission.READ_CONTACTS']; let context: Context = getContext(this) as common.UIAbilityContext; let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); // requestPermissionsFromUser會判斷權限的授權狀態來決定是否喚起彈窗 atManager.requestPermissionsFromUser(context, permissions).then((data: PermissionRequestResult) => { //grantStatus:授權狀態:0 已授權 1未授權 2未授權 表示請求無效, let grantStatus: Array<number> = data.authResults; let length: number = grantStatus.length; for (let i = 0; i < length; i++) { if (grantStatus[i] === 0) { // 已經授權,可以繼續訪問目標操作 this.getContact(context) } else { // 用戶拒絕授權,提示用戶必須授權才能訪問當前功能,并引導用戶到系統設置中打開相應的權限 this.contacts = [] this.dialogControllerConfirm.open() return; } } }).catch((err: BusinessError) => { console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); }) }).margin(10)
調用 contact.queryContacts獲取聯系人信息。
getContact(context:Context){ contact.queryContacts(context, (err: BusinessError, data) => { this.contacts = data }); }
拒接授權后的引導彈窗:
dialogControllerConfirm: CustomDialogController = new CustomDialogController({ builder: AlertDialog({ content: '已拒絕訪問系統通訊錄,是否前往開啟?', primaryButton: { value: '取消', action: () => {}, }, secondaryButton: { value: '確認', fontColor: $r('sys.color.ohos_id_color_warning'), action: () => { this.openAppInfo() } }, }), autoCancel: true, customStyle: true, alignment: DialogAlignment.Bottom })
進入設置-應用詳情頁。
openAppInfo(){ let context = getContext(this) as common.UIAbilityContext; context.startAbility({ bundleName: 'com.huawei.hmos.settings', abilityName: 'com.huawei.hmos.settings.MainAbility', uri: 'application_info_entry', parameters: { pushParams: "com.example.startability" } }); }
支持打開/關閉系統功能如Wi-Fi、NFC、移動網絡、藍牙等。
同設置應用內相應界面
通過配置對應的uri進行跳轉,藍牙uri:"bluetooth_entry",NFC uri:"nfc_settings",移動網絡uri:"mobile_network_entry"
Button("to藍牙").onClick(()=> { let context = getContext(this) as common.UIAbilityContext; context.startAbility({ bundleName: 'com.huawei.hmos.settings', abilityName: 'com.huawei.hmos.settings.MainAbility', uri:"bluetooth_entry", }); }).margin(10) Button("toNFC").onClick(()=> { let context = getContext(this) as common.UIAbilityContext; context.startAbility({ bundleName: 'com.huawei.hmos.settings', abilityName: 'com.huawei.hmos.settings.MainAbility', uri:"nfc_settings", }); }).margin(10) Button("to移動網絡").onClick(()=> { let context = getContext(this) as common.UIAbilityContext; context.startAbility({ bundleName: 'com.huawei.hmos.settings', abilityName: 'com.huawei.hmos.settings.MainAbility', uri:"mobile_network_entry", }); }).margin(10)
想了解更多關于開源的內容,請訪問:
51CTO 鴻蒙開發者社區
https://ost.51cto.com
本文鏈接:http://www.tebozhan.com/showinfo-26-87497-0.html基于設置應用的應用權限、通知設置跳轉
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 原來在 Vue、React 頁面中管理 <head> 標簽這么簡單!
下一篇: Navigation常見場景的解決方案