【问题标题】:OnSensorChanged stops collecting data randomlyOnSensorChanged 停止随机收集数据
【发布时间】:2021-06-14 11:19:10
【问题描述】:

我有一个 wearOS 应用程序,它正在收集加速度计、陀螺仪、心率和步数数据。该应用程序应该每 250 毫秒收集一次数据。它做得很好,但它会随机暂停并停止收集数据然后恢复。我一定会在测试时移动手表。 In this image you can see it stopped collecting data for about 7 seconds. Look at the time stamp on the right

我不确定是什么原因造成的。下面是我的代码

@Override
public void onCreate() {
    super.onCreate();
    Log.d(TAG, "onCreate");


    t1 = new Timer();
    t2 = new Timer();
    t3 = new Timer();
    t4 = new Timer();
    Log.d(TAG, "onCreate: Creating thread");
    HandlerThread thread = new HandlerThread("SensorServiceThread", Process.THREAD_PRIORITY_BACKGROUND);
    thread.start();
    Log.d(TAG, "onCreate: Finished creating thread");

    mServiceLooper = thread.getLooper();
    mServiceHandler = new ServiceHandler(mServiceLooper);

    Util.initTimeStamps(this);
}

private void initSensor(){
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

    registerListeners();
}


private void registerListeners(){

    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            (int)Const.SENSOR_DATA_MIN_INTERVAL*1000, SENSOR_QUEUE_LATENCY);

    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE),
            (int)Const.SENSOR_DATA_MIN_INTERVAL*1000, SENSOR_QUEUE_LATENCY);


    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE),
            (int)Const.SENSOR_DATA_MIN_INTERVAL*1000, SENSOR_QUEUE_LATENCY);

    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER),
            (int)Const.SENSOR_DATA_MIN_INTERVAL*1000, SENSOR_QUEUE_LATENCY);
}


@Override
public void onSensorChanged(SensorEvent event) {

    if(flag){
        flag = false;

        switch(event.sensor.getType()){
            case Sensor.TYPE_ACCELEROMETER:
            processAccelerometerData(event);
            //Log.d("acc","Acc Works");

            break;

            case Sensor.TYPE_GYROSCOPE:
            processGyroData(event);

            //Log.d("gyro","Gyro Works");
            break;

            case Sensor.TYPE_STEP_COUNTER:


            float[] values = event.values;

            float x = values[0];
            Log.e("step", String.valueOf(x));
            steppre = (int) x;

            processStepData(event);
            Log.d("step","steps work 2");

            break;

            case Sensor.TYPE_HEART_RATE:
            //check if sensor is not in touch with user or sensor status itself is unreliable, then ignore!
            if(event.accuracy == SensorManager.SENSOR_STATUS_NO_CONTACT || event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
                return;

            processHeartRateData(event);


            break;


            default:
            Log.d(TAG, "onSensorChanged:: "+event.values[0]);


        }
    }
}

【问题讨论】:

    标签: java android wear-os android-wear-2.0


    【解决方案1】:

    您必须按如下方式注册和注销监听器。

       @Override
        public void onResume() {
            super.onResume();
            sensorManager.registerListener(this,
                    sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                    (int)Const.SENSOR_DATA_MIN_INTERVAL*1000, SENSOR_QUEUE_LATENCY);
    
            sensorManager.registerListener(this,
                    sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE),
                    (int)Const.SENSOR_DATA_MIN_INTERVAL*1000, SENSOR_QUEUE_LATENCY);
    
    
            sensorManager.registerListener(this,
                    sensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE),
                    (int)Const.SENSOR_DATA_MIN_INTERVAL*1000, SENSOR_QUEUE_LATENCY);
    
            sensorManager.registerListener(this,
                    sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER),
                    (int)Const.SENSOR_DATA_MIN_INTERVAL*1000, SENSOR_QUEUE_LATENCY);
    
        }
    
        @Override
        public void onPause() {
            super.onPause();
            //and unregister the listeners here
        }
    

    【讨论】:

      猜你喜欢
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 2019-12-12
      • 1970-01-01
      相关资源
      最近更新 更多