开发者

Detect accelerometer motion in android

开发者 https://www.devze.com 2023-03-26 07:18 出处:网络
Im working on an application which needs to detect accelerometer motion like shake or tilt the phone to right, left, up and down, based on these motions i\'m sending some keys to my UPnP device.

Im working on an application which needs to detect accelerometer motion like shake or tilt the phone to right, left, up and down, based on these motions i'm sending some keys to my UPnP device.

for example if right motion is detected increase the volume of the media server and viceversa.

Please help me on this.

I have tried some example. it is working fine for Left and right. but i need a better solution for up and down.

here i add the code.

        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(Ro开发者_如何学Pythonund(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;
        }
    }

}


The X axis is horizontal and points to the right, the Y axis is vertical and points up and the Z axis points towards the outside of the front face of the screen. In this system, coordinates behind the screen have negative Z values.

Detect accelerometer motion in android

for more detail Android Developer

in your case try this.

        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====");

        }


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====");
0

精彩评论

暂无评论...
验证码 换一张
取 消