调试证书动态申请定位相关权限不弹窗问题

不弹窗直接返回 03-27 17:41:42.216 42683-42683 A03D00/JSAPP com.heao....jiaohome I requestPermissionsFromUser => [2,2,2]。

HarmonyOS
2024-11-08 11:06:13
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
superinsect

​由于安全隐私要求,应用不能通过弹窗的形式被授予后台位置权限,应用如果需要使用后台位置权限,需要引导用户到设置界面手动授予。

参考链接:​https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/permissions-for-all-V5

const permissions1: Array<Permissions> = ['ohos.permission.LOCATION_IN_BACKGROUND']; 
const permissions3: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION',]; 
const permissions4: Array<Permissions> = [ 
  'ohos.permission.READ_MEDIA', 
  'ohos.permission.WRITE_MEDIA', 
  'ohos.permission.MEDIA_LOCATION', 
  'ohos.permission.MICROPHONE', 
  'ohos.permission.CAMERA' 
]; 
 
@Entry 
@Component 
struct ReqPermission { 
  @State message: string = 'Hello World' 
 
  reqPermissionsFromUser(permissions: Array<Permissions>): void { 
    let context: Context = getContext(this) as common.UIAbilityContext; 
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); //获取访问控制模块 
 
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗 
    atManager.requestPermissionsFromUser(context, permissions).then((data: PermissionRequestResult) => { 
      let grantStatus: Array<number> = data.authResults; 
      let length: number = grantStatus.length; 
      for (let i = 0; i < length; i++) { 
        if (grantStatus[i] === 0) { 
          // 用户授权,可以继续访问目标操作 
          AlertDialog.show({ message: "授权成功" }) 
          console.log("(授权完成)") 
        } else { 
 
          // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限 
          console.log("(授权失败)") 
          return; 
        } 
      } 
      // 授权成功 
    }).catch((err: BusinessError) => { 
      console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); 
    }); 
  } 
  async onRemoteMessageRequest(): Promise<boolean> { 
    let flag: boolean = true; 
    let callerTokenId: number = rpc.IPCSkeleton.getCallingTokenId(); 
    console.log("RpcServer: getCallingTokenId result: " + callerTokenId); 
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 
    try { 
      let res: number = await atManager.checkAccessToken(callerTokenId, 'ohos.permission.LOCATION_IN_BACKGROUND') 
      if (res == -1) { 
        flag = false; 
      } else { 
        flag = true; 
      } 
    } catch (err) { 
      console.log(`catch err->${JSON.stringify(err)}`); 
    } 
    return flag; 
  } 
 
  build() { 
    Row() { 
      Column() { 
        Text('授权2222') 
          .textAlign(TextAlign.Center) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .width('100%') 
          .onClick(() => { 
            this.reqPermissionsFromUser(permissions3) 
          }) 
        Text('授权333') 
          .textAlign(TextAlign.Center) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .width('100%') 
          .onClick(() => { 
            this.reqPermissionsFromUser(permissions1) 
          }) 
        Button('跳转到应用详情') 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .width('100%') 
          .onClick(() => { 
            let context = getContext(this) as common.UIAbilityContext; 
            openPermissionsInSystemSettings(context) 
          }) 
        Text('检验') 
          .textAlign(TextAlign.Center) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .width('100%') 
          .onClick(() => { 
            this.onRemoteMessageRequest().then((data) => { 
              AlertDialog.show({ message: "==>" + data }) 
            }); 
          }) 
 
      } 
    } 
    .height('100%') 
  } 
}` 
function openPermissionsInSystemSettings(context: common.UIAbilityContext): void { 
let wantInfo: Want = { 
bundleName: "com.huawei.hmos.settings", 
abilityName: "com.huawei.hmos.settings.MainAbility", 
uri: 'application_info_entry', 
// action: 'action.settings.app.info', 
parameters: { 
settingsParamBundleName: 'com.example.api11' // 打开指定应用的详情页面 
} 
} 
context.startAbility(wantInfo).then(() => { 
// ... 
}).catch((err: BusinessError) => { 
// ... 
}) 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
分享
微博
QQ
微信
回复
2024-11-08 16:27:11
相关问题
HarmonyOS 线上监控如何定位相关问题
705浏览 • 1回复 待解决
HarmonyOS 申请定位权限失败问题
1244浏览 • 1回复 待解决
HarmonyOS 动态申请权限申请不了
874浏览 • 1回复 待解决
动态申请权限能否添加描述
1756浏览 • 1回复 待解决
HarmonyOS 证书相关问题
1052浏览 • 1回复 待解决
HarmonyOS 申请权限返回是否弹窗结果
895浏览 • 1回复 待解决
HarmonyOS 申请权限,禁止后不再弹窗
1291浏览 • 1回复 待解决
HarmonyOS定位权限问题
1356浏览 • 1回复 待解决
动态申请权限的步骤是怎样的?
1528浏览 • 1回复 待解决
HarmonyOS 证书相关问题咨询
836浏览 • 1回复 待解决
HarmonyOS权限申请问题
1237浏览 • 1回复 待解决
HarmonyOS 权限弹窗问题
906浏览 • 1回复 待解决
HarmonyOS 权限申请拒绝问题
1006浏览 • 1回复 待解决
HarmonyOS 麦克风权限弹窗
898浏览 • 1回复 待解决