使用加速度计的Andr​​oid移动方向不工作 [英] Direction of movement using an accelerometer android not working

查看:120
本文介绍了使用加速度计的Andr​​oid移动方向不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发一个Android应用程序获得Android设备的方向。

I am developing an android application to get the direction of a android device.

我用下面的code:

 public class AccelerometerDirection  extends Activity implements SensorEventListener {
    TextView textView;
    StringBuilder builder = new StringBuilder();

    float [] history = new float[2];
    String [] direction = {"NONE","NONE"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        textView = new TextView(this);
        setContentView(textView);

        SensorManager manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        Sensor accelerometer = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
        manager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {

        float xChange = history[0] - event.values[0];
        float yChange = history[1] - event.values[1];

        history[0] = event.values[0];
        history[1] = event.values[1];

        if (xChange > 2){
          direction[0] = "LEFT";
        }
        else if (xChange < -2){
          direction[0] = "RIGHT";
        }

        if (yChange > 2){
          direction[1] = "DOWN";
        }
        else if (yChange < -2){
          direction[1] = "UP";
        }

        builder.setLength(0);
        builder.append("x: ");
        builder.append(direction[0]);
        builder.append(" y: ");
        builder.append(direction[1]);

        textView.setText(builder.toString());
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // nothing to do here
    }
}

,参照本<一href=\"http://stackoverflow.com/questions/10476625/how-can-i-get-the-direction-of-movement-using-an-accelerometer\">How使用加速度计,我可以得到运动的方向?。

但工作是可怕的,我没有得到准确的数值。我试着用不同的常数值,无use.any想法,请分享。

But working is horrible and i am not getting the accurate value. I tried with different constant values, No use.any idea please share.

推荐答案

这行可以得到价值在非常高的频率在50赫兹或100赫兹为不同的设备

This line give you values at very high frequency at 50 HZ or 100 Hz for different devices

manager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);

因此​​,对于当设备处于静止,因为读加速度计每读你的输出就会改变,甚至不是很准确。

So for every reading your output will change even when device is at rest because reading accelerometer not very accurate.

因此​​,无论滤波器低通滤波器或使用读你的读数更低频率(比如1赫兹)

So either filter your readings with low pass filter or use reading at less frequency (say 1 HZ )

manager.registerListener(this, accelerometer, 1000000);

但是低通滤波器是获得平稳的行为是最好的选择。

But lowpass filter is the best option to get smooth behaviour

这篇关于使用加速度计的Andr​​oid移动方向不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆