HarmonyOS 如何区分定位获取失败具体原因

如何区分定位获取失败具体原因,能否区分用户对于定位权限是否授权、系统定位开关是否开启等不同场景

比如用户授予定位权限后,在使用时关闭了系统定位开关,程序在获取定位时会失败,这时如何区分定位权限是为授权或者是取消授权,还是用户关闭了系统定位开关。我们希望能够区分不同场景以做出不同的提示。

HarmonyOS
2024-08-28 14:19:39
471浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zxjiu

目前只能判断定位权限是否授权。无法区分是否是用户主动关闭了系统定位。

// 校验应用是否被授予定位权限,可以通过调用checkAccessToken()方法来校验当前是否已经授权。 
async checkPermissions(): Promise<boolean> { 
  const permissions: Array<Permissions> = ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION']; 
  for (let permission of permissions) { 
  let grantStatus: abilityAccessCtrl.GrantStatus = await this.checkAccessToken(permission); 
  if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) { 
  return true; 
} 
} 
return false; 
} 
 
async checkAccessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> { 
  let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 
  let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED; 
 
  // 获取应用程序的accessTokenID 
  let tokenId: number = 0; 
  try { 
  let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION); 
  let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo; 
  tokenId = appInfo.accessTokenId; 
} catch (error) { 
  let err: BusinessError = error as BusinessError; 
  console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`); 
} 
 
// 校验应用是否被授予权限 
try { 
  grantStatus = await atManager.checkAccessToken(tokenId, permission); 
} catch (error) { 
  let err: BusinessError = error as BusinessError; 
  console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`); 
} 
 
return grantStatus; 
}
  • 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.

开发者可以自己本地在申请权限的时候记录授权或取消授权的状态值,通过首选项记录例如,1和2其余的情况均属于用户主动关闭了系统定位。

分享
微博
QQ
微信
回复
2024-08-28 20:23:45
相关问题
HarmonyOS 获取定位失败问题
945浏览 • 1回复 待解决
精度优先获取定位失败
2689浏览 • 1回复 待解决
HarmonyOS 获取定位一直失败
881浏览 • 1回复 待解决
startAbility调用失败如何定位
1488浏览 • 1回复 待解决
HarmonyOS 定位功能定位失败问题
1598浏览 • 1回复 待解决
HarmonyOS 内网环境定位失败
848浏览 • 1回复 待解决
HarmonyOS 申请定位权限失败问题
1223浏览 • 1回复 待解决
定位权限未开通能区分场景吗?
1132浏览 • 1回复 待解决
地图定位不准,是什么原因啊?
844浏览 • 1回复 待解决
HarmonyOS 定位失败 错误码3301200:
813浏览 • 1回复 待解决
hi3861编译失败原因
12678浏览 • 2回复 待解决
Web加载失败问题定位定界指导
797浏览 • 1回复 待解决
求告知如何获取当前定位
1173浏览 • 1回复 待解决
鸿蒙next开发中如何获取定位服务?
579浏览 • 2回复 待解决