首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SensorManager requestTriggerSensor返回false

SensorManager requestTriggerSensor返回false
EN

Stack Overflow用户
提问于 2019-03-29 02:17:39
回答 2查看 396关注 0票数 0

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

代码语言:javascript
复制
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);
}

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

EN

回答 2

Stack Overflow用户

发布于 2019-03-29 22:18:47

我相信您希望使用Google Fit API来完成此任务,而不是访问原始传感器数据。来自the documentation

代码语言:javascript
复制
    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方法。

票数 1
EN

Stack Overflow用户

发布于 2019-05-10 19:08:41

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

  1. 你可以收听Sensor.TYPE_STEP_COUNTER。然后,你收到的第一个传感器事件的步数值就是你的“偏差”,所以要检测用户自应用启动以来的步数,你需要从最新的传感器值中减去“偏差”。
  2. 另一方面,还有另一个传感器: Sensor.TYPE_STEP_COUNTER,它在每一步都会触发。您可能还想使用这个。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55404394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档