SensorManager requestTriggerSensor返回false

问题描述 投票:0回答:2

我正在制作一个使用步数测量距离的健身应用程序。我正在尝试使用sensorManager.requestTriggerSensor()方法在应用程序启动时获取初始步数。但是,我的代码返回false,表示未触发传感器。我已经成功实现了SensorEventListener,我用它继续步数。我的代码片段如下,类似于documentation

private SensorManager mSensorManager;
private Sensor sensorStepCounter;
private TriggerEventListener triggerEventListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

    triggerEventListener = new TriggerEventListener() {
        @Override
        public void onTrigger(TriggerEvent event) {

            float initialSteps = event.values[0];
            Log.d(TAG, "initial Steps: " + Arrays.toString(event.values));
        }
    };

    sensorStepCounter = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
    ....
}

@Override
protected void onResume() {
    ...
    boolean triggered = mSensorManager.requestTriggerSensor(triggerEventListener, sensorStepCounter);
}

或者是否有不同的方法来获取应用程序启动时的当前传感器数据,例如步数?

android wear-os sensor sensormanager
2个回答
1
投票

我认为您希望使用Google Fit API,而不是访问原始传感器数据。来自the documentation

    long total = 0;

    PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(mClient, DataType.TYPE_STEP_COUNT_DELTA);
    DailyTotalResult totalResult = result.await(30, TimeUnit.SECONDS);
    if (totalResult.getStatus().isSuccess()) {
        DataSet totalSet = totalResult.getTotal();
        total = totalSet.isEmpty()
                ? 0
                : totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
    } else {
        Log.w(TAG, "There was a problem getting the step count.");
    }

请注意,此代码不希望在UI线程上运行。您可以将其移动到另一个线程(如我链接的页面上所示)或使用PendingResult.setResultCallback方法。


0
投票

我只假设触发步进传感器是错误的,因为传感器已被触发。然而,我提出了另一种解决方案。

  1. 您可以收听Sensor.TYPE_STEP_COUNTER。然后,您通过第一个传感器事件获得的步骤值就是“偏差”,因此要检测自应用启动以来用户制作的步数,您需要从最新传感器值中减去“偏差”。
  2. 另一方面,还有另一个传感器:Sensor.TYPE_STEP_COUNTER,每一步触发一次。您也可能想要使用这个。
© www.soinside.com 2019 - 2024. All rights reserved.