HarmonyOS NEXT 设置持续定位和后台持续定位
最近有个需求需要应用息屏或者在后台时,能够一直获取用户的位置信息,查看了很多资料最后确认需要持续定位逻辑 + 后台长时任务一起设置,才能实现该功能。
但在测试时发现,应用置为后台或者息屏后,长时间不一定位置,系统会将应用给托管掉,不会获取定位信息,一旦手机移动位置,系统会将该应用激活,继续获取定位信息,这种场景节约了手机能耗,下面继续展示代码上的处理
既然是获取用户位置信息,这种隐私性的信息,需求向用户申请权限,ohos.permission.LOCATION和ohos.permission.APPROXIMATELY_LOCATION这两个权限是用户授权的权限,需要我们弹框让用户同意,具体如何申请权限可以参考:https://developer.huawei.com/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 **********'; /** * 持续定位。多用于导航、运动轨迹、出行等场景。 * * 首先要实例化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.com/consumer/cn/blog/topic/03176671500550091
----------------- end ---------------
后面会继续补充不足之处。
#商务##Ark-TS语言#