在我的应用程序中,我使用 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];
}