Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OnSensorChanged停止随机收集数据_Java_Android_Wear Os_Android Wear 2.0 - Fatal编程技术网

Java OnSensorChanged停止随机收集数据

Java OnSensorChanged停止随机收集数据,java,android,wear-os,android-wear-2.0,Java,Android,Wear Os,Android Wear 2.0,我有一个wearOS应用程序,用于收集加速度计、陀螺仪、心率和步长数据。应用程序应该每250毫秒收集一次数据。它做得很好,但会随机暂停并停止收集数据,然后继续。我确信在测试时会将手表四处移动。 我不确定这是什么原因造成的。下面是我的代码 @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate"); t1 = new Timer(); t2 = ne

我有一个wearOS应用程序,用于收集加速度计、陀螺仪、心率和步长数据。应用程序应该每250毫秒收集一次数据。它做得很好,但会随机暂停并停止收集数据,然后继续。我确信在测试时会将手表四处移动。

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

@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]);


        }
    }
}

您必须按如下方式注册和取消注册侦听器

   @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
    }

您必须按如下方式注册和取消注册侦听器

   @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
    }