Да, я думаю, что ваша лучшая ставка, которая, как я понимаю, имеет свои недостатки, заключается в использовании акселерометров для определения направления движения земли.
Используйте что-то вроде этого ...
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
в вашем методе onCreate, затем поместите это
mSensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
в вашем onResume
и это для обработки обновлений
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
float xAcceleration = event.values[0];
float yAcceleration = event.values[1];
float zAcceleration = event.values[2];
Затем просто используйте эти значения ускорения, чтобы определить направление движения земли. :-)
Я считаю, что этот путь намного более плавный, надеюсь, это поможет. : -)
Для получения дополнительной информации, проверьте следующее для получения дополнительной информации:
http://developer.android.com/reference/android/hardware/SensorEvent.html#values