4

SensorManager.unregisterListener に問題があります。それらはAndroidと似ています。しかし、私は私の答えを見つけることができませんでした!また、SensorManager のドキュメントの例http://developer.android.com/reference/android/hardware/SensorManager.html#SENSOR_DELAY_UIに従いました。

問題は、アクティビティが終了した後、リスナーの登録を解除しますが、アプリケーションが完全に破棄されるまでセンサーが値を送信し続けることです。

これは私のコードです:

私の SensorController は SensorEventListener を実装します

public class SensorController implements SensorEventListener{

コンストラクタ:

public SensorController(Context context){
    sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
}

アクティビティの onResume コールバックが呼び出されると、私の SensorController onResume メソッドが呼び出されます。

public void onResume(){
    mAccelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    boolean ret1 = sensorManager.registerListener(this, mAccelerometerSensor, SensorManager.SENSOR_DELAY_UI);
    mMagneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    boolean ret2 = sensorManager.registerListener(this, mMagneticSensor, SensorManager.SENSOR_DELAY_UI);

}

アクティビティの onPause コールバックが呼び出されると、私の SensorController onPause メソッドが呼び出されます。

public void onPause(){
    sensorManager.unregisterListener(this);
}

そして、SensorChanged に、センサー イベントを監視するためのログを置きます。

@Override
public void onSensorChanged(SensorEvent event) {
    this.computeRotationAngles(event);
    Log.i("SensorController", "onSensorChanged");
}

そのため... Activity onPause メソッドの後、 onSensorChanged(SensorEvent event) は引き続きセンサー イベントを取得します。どうして??SensorController.onPause() 関数で登録解除します。センサーは適切な値を取得しますが、送信を停止できません。私は何を間違っていますか?

事前にどうもありがとうございました!私はすべての小さなヒントに感謝します:)

4

2 に答える 2

1

アプリケーションをアンインストールして再インストールしてみてください。それは私のもので動作します。

于 2015-03-20T06:32:48.430 に答える