Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android检测手机提升动作_Android_Accelerometer - Fatal编程技术网

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();
    }
}