HarmonyOS NEXT 设置持续定位和后台持续定位

举报
水滴石轩 发表于 2025/03/15 09:30:51 2025/03/15
【摘要】 最近有个需求需要应用息屏或者在后台时,能够一直获取用户的位置信息,查看了很多资料最后确认需要持续定位逻辑 + 后台长时任务一起设置,才能实现该功能。但在测试时发现,应用置为后台或者息屏后,长时间不一定位置,系统会将应用给托管掉,不会获取定位信息,一旦手机移动位置,系统会将该应用激活,继续获取定位信息,这种场景节约了手机能耗,下面继续展示代码上的处理既然是获取用户位置信息,这种隐私性的信息,需...

最近有个需求需要应用息屏或者在后台时,能够一直获取用户的位置信息,查看了很多资料最后确认需要持续定位逻辑 + 后台长时任务一起设置,才能实现该功能。

但在测试时发现,应用置为后台或者息屏后,长时间不一定位置,系统会将应用给托管掉,不会获取定位信息,一旦手机移动位置,系统会将该应用激活,继续获取定位信息,这种场景节约了手机能耗,下面继续展示代码上的处理

既然是获取用户位置信息,这种隐私性的信息,需求向用户申请权限,ohos.permission.LOCATION和ohos.permission.APPROXIMATELY_LOCATION这两个权限是用户授权的权限,需要我们弹框让用户同意,具体如何申请权限可以参考:https://developer.huawei.cn/consumer/cn/blog/topic/03177278991234017

获取权限后,调用function on(type: 'locationChange', request: LocationRequest | ContinuousLocationRequest, callback: Callback<Location>): void;方法设置持续定位代理,不获取权限时也要调用function off(type: 'locationChange', callback?: Callback<Location>): void;注销监听

下面是具体代码实现



import { geoLocationManager } from '@kit.LocationKit';

/**
 * 持续定位。多用于导航、运动轨迹、出行等场景。
 *
 * 首先要实例化ContinuousLocationRequest对象,用于告知系统该向应用提供何种类型的位置服务,以及位置结果上报的频率。
 * 设置locationScenario:
 *   建议locationScenario参数优先根据应用的使用场景进行设置,该参数枚举值定义参见UserActivityScenario,
 *   例如地图在导航时使用NAVIGATION参数,可以持续在室内和室外场景获取位置用于导航。
 *
 * 设置interval:
 *   表示上报位置信息的时间间隔,单位是秒,默认值为1秒。如果对位置上报时间间隔无特殊要求,可以不填写该字段。
 */
export function OnContinuousLocationRequest() {
  let request: geoLocationManager.ContinuousLocationRequest = {
    'interval': 10,
    'locationScenario': geoLocationManager.UserActivityScenario.NAVIGATION
  }

  try {
    geoLocationManager.on('locationChange', request, locationCallback);
  } catch (err) {
    console.info(TAG, "errCode:" + JSON.stringify(err));
  }
}

let locationCallback = (location: geoLocationManager.Location): void => {
  console.info(TAG, 'locationCallback: data: ' + JSON.stringify(location));
};

/**
 *  关闭位置变化订阅,并删除对应的定位请求
 */
export function OffContinuousLocationRequest() {
  try {
    geoLocationManager.off('locationChange', locationCallback);
  } catch (err) {
    console.info(TAG, "errCode:" + JSON.stringify(err));
  }
}

长时任务请参考:https://developer.huawei.cn/consumer/cn/blog/topic/03176671500550091

----------------- end ---------------

后面会继续补充不足之处。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。