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%')
}
}
}
}
在首次申请模糊和精确位置的时候,选择不允许是将模糊定位和精确定位全部关闭,再次申请的时候会拉起模糊和精确的,如果首次同意模糊,拒绝了精确,再次拉起只会拉起精确位置的