Android-устройство угол к вертикальной оси - PullRequest
1 голос
/ 31 августа 2011

Я разрабатываю приложение, в котором мне нужно было бы получить угол между устройством и вертикальной осью (ось, указывающая на центр Земли).

Пока что все документы и учебные пособия Iнайденные были не очень убедительными.

Не могли бы вы объяснить мне, как я могу это сделать, или дать мне ссылку на понятный учебник, чтобы помочь мне найти решение этой проблемы?

1 Ответ

1 голос
/ 04 сентября 2011

Сначала я создал реализацию SensorEventListener

private SensorEventListener sensorEventListener = 
    new SensorEventListener() {

    /** The side that is currently up */
    //private Side currentSide = null;
    //private Side oldSide = null;
    private float azimuth;
    private float pitch;
    private float roll;

    public void onAccuracyChanged(Sensor sensor, int accuracy) {}

    public void onSensorChanged(SensorEvent event) {            
        azimuth = event.values[0];     // azimuth
        pitch = event.values[1];     // pitch
        roll = event.values[2];        // roll
        //code to deal with orientation changes;
        //pitch is the angle between the vertical axis and the device's y axis (the one from the center of the device to its top)
    } 
};

Затем я регистрирую этого слушателя на датчик ориентации

SensorManager sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
Sensor sensor;
List<Sensor> sensors = sensorManager.getSensorList(
        Sensor.TYPE_ORIENTATION);
if (sensors.size() > 0) {
    sensor = sensors.get(0);
    sensorManager.registerListener(
            sensorEventListener, sensor, 
            SensorManager.SENSOR_DELAY_NORMAL);
} else {
    //notify the user that there's no orientation sensor
}
...