HarmonyOS requestPermissionsFromUser和requestPermissionOnSetting行为表现不一致?

requestPermissionsFromUser和requestPermissionOnSetting行为表现不一致。主要差异在于“精确定位”是否自动勾选上

import { testAop } from '../testAopModule/testAOP';
import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';
import deviceInfo from '@ohos.deviceInfo';
import { CustomBottomTipView } from './CustomBottomTipView';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  public requestSysPermission(callBack: (isGranted: boolean) => void) {
    let permissions: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION'];
    let context = getContext(this) as common.UIAbilityContext;
    let atManager = abilityAccessCtrl.createAtManager();
    atManager.requestPermissionsFromUser(context, permissions).then(async (data) => {
      let grantStatus: Array<number> = data.authResults;
      let length: number = grantStatus.length;
      let isShowResults = data.dialogShownResults;
      let systemIsShow = true;
      let userAuth = false;
      for (let i = 0; i < length; i++) {
        if (isShowResults != undefined) {
          if (isShowResults[i] == false) {
            systemIsShow = false;
          }
          if (isShowResults[i]) {
            if (grantStatus[i] === 0) {
              userAuth = true;
            } else {
              userAuth = false;
            }
          }
        }
      }
      if (!systemIsShow) {
        // 系统框已经出过, 二次拉起权限设置弹框。
        atManager.requestPermissionOnSetting(context, permissions)
          .then((data: Array<abilityAccessCtrl.GrantStatus>) => {
            let length: number = grantStatus.length;
            for (let i = 0; i < length; i++) {
              if (data[i] == abilityAccessCtrl.GrantStatus.PERMISSION_DENIED) {
                userAuth = false;
              } else {
                userAuth = true;
              }
            }
            if (callBack != undefined) {
              callBack(userAuth);
            }
            return;
          })
      } else {
        if (callBack != undefined) {
          callBack(userAuth);
        }
      }
    }).catch((err: Error) => {
    })
  }

  build() {
    NavDestination() {
      Stack() {
        Row(){
          Scroll() {
            Column() {
              Button('授权弹窗测试').onClick(()=>{
                this.requestSysPermission((isGranted: boolean) => {
                  console.log('授权弹窗测试' + isGranted);
                })
              })
            }
            .height('100%')
            .width('100%')
          }
          .height('100%')
          .width('100%')
          CustomBottomTipView({
            goToSetClick:()=>{
            },
            closeClick:()=>{
            }
          })
        }
        .height('100%')
        .width('100%')
      }
    }
  }
}
阅读 897
1 个回答

在首次申请模糊和精确位置的时候,选择不允许是将模糊定位和精确定位全部关闭,再次申请的时候会拉起模糊和精确的,如果首次同意模糊,拒绝了精确,再次拉起只会拉起精确位置的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进