android穿重复的sensorEventListener

时间:2015-11-05 07:56:55

标签: android wear-os android-sensors sensormanager

我正在开发一个Android Wear应用程序,它从开始到用户停止触摸按钮的那一刻注册心率,所以我不会在函数onStop或onDestroy上取消注册侦听器。

问题是当我返回Wear菜单并再次打开应用程序时。在那一刻,应用程序再次注册听众,并重复所有措施。我试图在函数onStart和onRestart上取消注册侦听器,但它没有用。

这是我的代码:

    ...

public class MainActivity extends Activity implements SensorEventListener {
    Sensor mHeartRateSensor;
    SensorManager mSensorManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Sensor and sensor manager
        mSensorManager = ((SensorManager)getSystemService(SENSOR_SERVICE));
        mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
    }

    @Override
    protected void onStart() {
        super.onStart();  
        mSensorManager.registerListener(this, mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        mSensorManager.registerListener(this, mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL);
    }
    /*
    I need the listeners are active, so i can't unregister it
    @Override
    protected void onDestroy() {
        this.mSensorManager.unregisterListeners(this);
        super.onDestroy();
    }*/

    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        //Get heart rate and accuracy
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {
        //
    }

    /*on click listeners*/
    ...
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

你可以添加一个名为mIsRegistered的布尔变量,将其默认值设置为false。当你想注册时,首先检查值,如果为false,则注册,如果为true,则不要注册试。