Android检测手机提升动作
我想在用户将手机从平面上提起时执行一些活动。我现在使用的方法是使用手机的加速计检测震动运动,使用以下代码:Android检测手机提升动作,android,accelerometer,Android,Accelerometer,我想在用户将手机从平面上提起时执行一些活动。我现在使用的方法是使用手机的加速计检测震动运动,使用以下代码: sensorMan = (SensorManager) getSystemService(SENSOR_SERVICE); accelerometer = sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorMan.registerListener(this, accelerometer, Sensor
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之间,即使手机没有被触碰。有没有什么方法可以保证检测手机的升降运动?我也会将陀螺仪添加到检测程序中 手机会加速,从x=0 y=0 z=0上升到,比方说y=120,这就是触发器 看 有关如何使用它的信息
另一个用于提升检测的传感器是传感器,当手机平放在桌子上时,距离将为0,如果拾取该值,该值将快速升高解决了该问题。我只想检查问题中的“Y”值,并检查该值是否大于1.0 请注意,如果手机保持垂直位置,Y始终在9.8左右,但在这种情况下,您可以检查X。在我的例子中,用户必须提起手机,然后他会倾斜手机,所以我检查一下(y>=1.0&&y 2.0&&yAbs<4.0&&!isAlerted()&&!isCalactive()){ 警惕(); } } }捕获(例外e){ e、 printStackTrace(); } }
这对@Michele没有多大帮助,因为许多手机不支持陀螺仪。此外,接近传感器的距离为0,即使其上有一些活门盖。不过,谢谢。嗯,我们不鼓励这样做。你应该为此付出一些努力。无论如何,更新了。对于那些关注我答案的人,也请检查Micromax手机上的应用程序。我和他们有一些问题。Micromax传感器没有很好地校准。
@Override
public void onSensorChanged(SensorEvent event) {
try {
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];
float yAbs = Math.abs(mGravity[1]);
mAccelLast = mAccelCurrent;
mAccelCurrent = FloatMath.sqrt(x * x + y * y + z * z);
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta;
if (yAbs > 2.0 && yAbs < 4.0 && !isAlerted() && !isCallActive()) {
alert();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}