我希望在用户将手机从平面上拿起时执行某些活动。目前我使用检测手机加速度计的摇晃动作的方法,使用以下代码:
sensorMan = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerometer = sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorMan.registerListener(this, accelerometer, SensorManager.SENSOR_STATUS_ACCURACY_HIGH);
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
mGravity = event.values.clone();
// Shake detection
float x = mGravity[0];
float y = mGravity[1];
float z = mGravity[2];
mAccelLast = mAccelCurrent;
mAccelCurrent = FloatMath.sqrt(x * x + y * y + z * z);
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta;
if (mAccel > 0.9) {
//Perform certain tasks.
}
}
我遇到的问题是,即使手机还放在平面上,有时候也会达到0.9f的阈值。我尝试记录mAccel的值,并发现即使没有接触手机,它的值也会从9.0到0.4波动。是否有可靠的方法来检测手机的举起动作?