方向传感器简称为O-sensor,返回三轴的角度数据,方向数据的单位是角度。
为了得到精确的角度数据,E-compass需要获取G-sensor的数据,
经过计算生产O-sensor数据,否则只能获取水平方向的角度。
方向传感器提供三个数据,分别为azimuth、pitch和roll。
azimuth:方位,返回水平时磁北极和Y轴的夹角,范围为0°至360°。
0°=北,90°=东,180°=南,270°=西。
pitch:x轴和水平面的夹角,范围为-180°至180°。
当z轴向y轴转动时,角度为正值。
roll:y轴和水平面的夹角,由于历史原因,范围为-90°至90°。
当x轴向z轴移动时,角度为正值。
package com.example.andy_wangzhen.gravity_demo;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
/**
* Created by andy_wangzhen on 16/10/8.
*/
public class OrientationManager {
private Context mContext;
private SensorManager mSensorManager;
private Sensor mOrientation;
private Changed changeXYZ;
/**
初始化
*/
public OrientationManager(Context context){
init(context);
}
/**
init 方法
*/
private void init(Context context){
mContext = context;
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
mSensorManager.registerListener(new MySensorEventListener(),mOrientation,SensorManager.SENSOR_DELAY_NORMAL);
}
/**
代理监听方法
*/
public void setChangeXYZ(Changed listener) {
changeXYZ = listener;
}
public interface Changed {
public void onChanged(int z, int x, int y);
}
/**
* 监听类
*/
class MySensorEventListener implements SensorEventListener {
@Override
public void onSensorChanged(SensorEvent event) {
int a = (int) event.values[0];
int b = (int) event.values[1];
int c = (int) event.values[2];
changeXYZ.onChanged(a,b,c);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
}