使用加速度计的Android移动方向不工作 [英] Direction of movement using an accelerometer android not working
问题描述
我开发一个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
这篇关于使用加速度计的Android移动方向不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!