私のアプリでは、AccelerationSensor.accelerationchanged(xAccel, yAccel, zAccel) API を使用しています。問題は、任意の軸で o.oooo1 変更するたびにメソッドが呼び出されるため、アプリが非常に遅くなり、場合によっては「応答しなくなる」ことさえあります。
整数部分が変更されたかどうかを確認し、小数の変更を許可する方法はありますか?
私のアプリでは、AccelerationSensor.accelerationchanged(xAccel, yAccel, zAccel) API を使用しています。問題は、任意の軸で o.oooo1 変更するたびにメソッドが呼び出されるため、アプリが非常に遅くなり、場合によっては「応答しなくなる」ことさえあります。
整数部分が変更されたかどうかを確認し、小数の変更を許可する方法はありますか?
これがonStartCommand()
私のサービスの中で私がしていることです
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
これは私が自分のデータを処理している関数です。かなり軽量ですが、しきい値を使用してアイデアを得る必要があります。私の場合、デバイスを少し知る必要があるだけです。私の場合、differenceValue は約 1.75G である必要があることがわかりましたが、それはあなたにとっては異なるかもしれません。
@Override
public void onSensorChanged(SensorEvent event) {
if(last[0] == 0.0f &&
last[1] == 0.0f &&
last[2] == 0.0f){
last[0] = event.values[0];
last[1] = event.values[1];
last[2] = event.values[2];
return;
}
float diff = 0f;
if(Math.abs(last[0] - event.values[0]) > differenceValue ||
Math.abs(last[1] - event.values[1]) > differenceValue ||
Math.abs(last[2] - event.values[2]) > differenceValue){
Log.d(TAG,"G values are "+event.values[0]+" "+event.values[1]+" "+event.values[2]);
Log.d(TAG,"Last G values are "+last[0]+" "+last[1]+" "+last[2]);
diff = Math.abs(last[0] - event.values[0]);
if(diff < Math.abs(last[1] - event.values[1])){
diff = Math.abs(last[1] - event.values[1]);
}
if(diff < Math.abs(last[2] - event.values[2])){
diff = Math.abs(last[2] - event.values[2]);
}
Log.d(TAG,"Sensor difference: "+diff);
//Do what ever processing you need here
}
last[0] = event.values[0];
last[1] = event.values[1];
last[2] = event.values[2];
}
センサーのリスナーを登録すると、周波数を設定できます。より遅い周波数を使用してください。