检测android中的加速度计运动

时间:2011-08-04 09:00:10

标签: android

我正在研究一个需要检测加速度计运动的应用程序,例如摇动或将手机向右,向左,向上和向下倾斜,根据这些动作我将一些按键发送到我的UPnP设备。

例如,如果检测到右运动,则增加媒体服务器的音量,反之亦然。

请帮我解决这个问题。

我试过一些例子。它适用于左派和右派。但我需要一个更好的上下解决方案。

这里我添加了代码。

        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL);
    lastUpdate = System.currentTimeMillis();


    @Override
public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

        float[] values = event.values;

        // Movement
        float x = values[0];
        float y = values[1];
        float z = values[2];

        /*float accelationSquareRoot = (x * x + y * y + z * z)
                / (SensorManager.AXIS_X * SensorManager.AXIS_X);*/

        Log.d("Shakes","X: "+x+"  Y: "+y+"  Z: "+z);

        long actualTime = System.currentTimeMillis();
        if ((actualTime - lastUpdate) > 100) 
        {
            long diffTime = (actualTime - lastUpdate);
            lastUpdate = actualTime;


        if(Round(x,4)>8.0000){
            Log.d("sensor", "=====LEFT====");


        }
        else if(Round(x,4)<-8.0000){
            Log.d("sensor", "=====RIGHT====");

        }
        else if(Round(z,4) < -0.0){
           Log.d("sensor", "=====UP====");


        }

        else if(Round(y,4) < 1.0){
            Log.d("sensor", "=====DOWN====");

        }

        float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;

        if (speed > SHAKE_THRESHOLD) {
            //Log.d("sensor", "shake detected w/ speed: " + speed);
            //Toast.makeText(this, "shake detected w/ speed: " + speed, Toast.LENGTH_SHORT).show();
        }
        last_x = x;
        last_y = y;
        last_z = z;
        }
    }

}

2 个答案:

答案 0 :(得分:2)

X轴是水平的并且指向右侧,Y轴是垂直的并且指向上方,Z轴指向屏幕前面的外侧。在该系统中,屏幕后面的坐标具有负Z值。

All Motion

了解更多详情Android Developer

在你的情况下试试这个。

        if(Round(x,4)>8.0000){
            Log.d("sensor", "=====LEFT====");


        }
        else if(Round(x,4)<-8.0000){
            Log.d("sensor", "=====RIGHT====");

        }
        else if(Round(y,4) < 8.0){
           Log.d("sensor", "=====UP====");


        }

        else if(Round(y,4) < -8.0){
            Log.d("sensor", "=====DOWN====");

        }

答案 1 :(得分:1)

if(Round(x,4)>8.0000){
            Log.d("sensor", "=====LEFT====");


        }
        else if(Round(x,4)<-8.0000){
            Log.d("sensor", "=====RIGHT====");

        }
        else if (z >9 && z < 10)
            Log.d("sensor", "=====DOWN====");

        else if (z > -10 && z < -9)
             Log.d("sensor", "=====UP====");