Sensor 步数传感器后台情况

在后台/锁屏的状态下步数传感器好像不会执行回调,有办法解决吗?

长时任务支持这种情况吗?

测试一:应用放置前台亮屏,开始获取步数(走动)。

【预期结果】调试Log输出:“计步器变化:xxx”

【实际结果】调试Log输出:“计步器变化:xxx”

测试二:应用放置后台亮屏,开始获取步数(走动)。

【预期结果】调试Log输出:“计步器变化:xxx”

【实际结果】调试无Log输出,切至前台后调试Log输出:“计步器变化:xxx”

测试三:应用放置前台熄屏,开始获取步数(走动)。

【预期结果】调试Log输出:“计步器变化:xxx”

【实际结果】调试无Log输出,亮屏后调试Log输出:“计步器变化:xxx”

测试四:应用放置后台熄屏,开始获取步数(走动)。

【预期结果】调试Log输出:“计步器变化:xxx”

【实际结果】调试无Log输出,亮屏后调试Log输出:“计步器变化:xxx”

大概是这样:

@State count: number = 0 

// 计步器变化 
handleStepChange(data: sensor.PedometerResponse) { 
计步器变化:' + JSON.stringify(data.steps)) 
更新当前步数 
  this.count = data.steps 
} 

on() { 
毫秒 
} 

start() { 
请求权限 
  const atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager() 
  atManager.requestPermissionsFromUser(getContext(this) as common.UIAbilityContext, ['ohos.permission.ACTIVITY_MOTION'], (err: BusinessError, data: PermissionRequestResult)=>{ 
    if (err) { 
      console.info(TAG, `requestPermissionsFromUser fail, err->${JSON.stringify(err)}`) 
    } else { 
      this.on() 
      this.running = true 
    } 
  }) 
}
HarmonyOS
2024-09-11 11:01:27
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

长时任务中不支持记步,但是根据应用的场景,可以申请定位导航的长时任务,在定位坐标回调里面,用单次读取接口sensor.once()去读取记步数据。

截取的一部分代码,可以参考一下:

startGeoLocation() { 
  // 申请通知 
  notificationManager.requestEnableNotification() 
    .then(() => { 
 
      let requestInfo:geoLocationManager.LocationRequest = { 
        'priority': geoLocationManager.LocationRequestPriority.FIRST_FIX, 
        'scenario': geoLocationManager.LocationRequestScenario.UNSET, 
        'timeInterval': 0, 
        'distanceInterval': 0, 
        'maxAccuracy': 0}; 
      let locationChange = (location:geoLocationManager.Location):void => { 
        console.log('locationChanger: data: ' + JSON.stringify(location)); 
        this.once() 
      }; 
      try { 
        geoLocationManager.on('locationChange', requestInfo, locationChange); 
      } catch (err) { 
        console.error("errCode:" + (err as BusinessError.BusinessError).code + ",errMessage:" + (err as BusinessError.BusinessError).message); 
      } 
    }) 
} 
 
once() { 
  try { 
    sensor.once(sensor.SensorId.PEDOMETER, (data: sensor.PedometerResponse) => { 
      console.info('Succeeded in invoking once. Step count: ' + data.steps); 
    }); 
  } catch (error) { 
    let e: BusinessError.BusinessError = error as BusinessError.BusinessError; 
    console.error(`Failed to invoke once. Code: ${e.code}, message: ${e.message}`); 
  } 
}
分享
微博
QQ
微信
回复
2024-09-11 15:50:43
相关问题
重力传感器相关问题咨询
209浏览 • 1回复 待解决
获取加速度传感器的方法
301浏览 • 1回复 待解决
如何保证振弦传感器的测量精度?
3333浏览 • 0回复 待解决
什么是智能振弦传感器的电子标签?
3248浏览 • 0回复 待解决
HarmonyOS 怎么获取当天的运动
275浏览 • 1回复 待解决
订阅接近光传感器只出一次数据
1644浏览 • 1回复 待解决