基于设置应用的应用权限、通知设置跳转

场景一:如果应用首次拒绝了消息通知,应用希望能够引导用户拉起设置应用设置允许通知,用来接收应用内的推送消息;并且在设置完后返回页面可以监听到修改后的状态。

方案:

  1. 通过startability显式拉起设置应用-通知管理界面,配置相应的want信息(不推荐使用隐式拉起的方式)。
  2. 在进入页面时通过Notification.requestEnableNotification()监听应用请求通知使能。

核心代码:

为Button绑定拉起事件:

Button(this.buttonText).onClick(()=>{
  let context = getContext(this) as common.UIAbilityContext;
  let want: Want = {
    bundleName: 'com.example.xxx.settings',//设置应用bundleName
    abilityName: 'com.example.xxx.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时(如访问获取联系人信息),若用户首次拒绝授权,则需要引导用户到权限设置页面能够主动进行应用权限的修改。

方案:暂无直接跳转权限管理的方式,可通过跳转至应用详情进行用户申请权限的修改。

核心代码:

为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.example.xxx.settings',
    abilityName: 'com.example.xxx.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.example.xxx.settings',
    abilityName: 'com.example.xxx.settings.MainAbility',
    uri:"bluetooth_entry",
  });
}).margin(10)
 
Button("toNFC").onClick(()=> {
  let context = getContext(this) as common.UIAbilityContext;
  context.startAbility({
    bundleName: 'com.example.xxx.settings',
    abilityName: 'com.example.xxx.settings.MainAbility',
    uri:"nfc_settings",
  });
}).margin(10)
 
Button("to移动网络").onClick(()=> {
  let context = getContext(this) as common.UIAbilityContext;
  context.startAbility({
    bundleName: 'com.example.xxx.settings',
    abilityName: 'com.example.xxx.settings.MainAbility',
    uri:"mobile_network_entry",
  });
}).margin(10)

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的体育馆管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此体育馆管理系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理收货地址管理、购物车管理、场地管理、场地订单管理、字典管理、赛事管理、赛事收藏管理、赛事评价管理、赛事订单管理、商品管理、商品收藏管理、商品评价管理、商品订单管理、用户管理、管理员管理等功能。体育馆管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:体育馆管理系统;SpringBoot框架;Mysql;自动化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值