private static final String TAG = MainActivity.class.getSimpleName();
private SensorManager sensorManager;
private Sensor aSensor; //加速传感器
private Sensor mSensor; //磁力传感器
float[] accelerometerValues = new float[3];
float[] magneticFieldValues = new float[3];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
//获取传感器的管理类
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
aSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sensorManager.registerListener(myListener, aSensor, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(myListener, mSensor,SensorManager.SENSOR_DELAY_NORMAL);
//更新显示数据的方法
calculateOrientation();
}
SensorEventListener myListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
magneticFieldValues = event.values;
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
accelerometerValues = event.values;
calculateOrientation();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
private void calculateOrientation() {
float[] values = new float[3];
float[] R = new float[9];
SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticFieldValues);
SensorManager.getOrientation(R, values);
// 要经过一次数据格式的转换,转换为度
values[0] = (float) Math.toDegrees(values[0]);
Log.i(TAG, values[0]+"");
//values[1] = (float) Math.toDegrees(values[1]);
//values[2] = (float) Math.toDegrees(values[2]);
if(values[0] >= -5 && values[0] < 5){
Log.i(TAG, "正北");
}
else if(values[0] >= 5 && values[0] < 85){
Log.i(TAG, "东北");
}
else if(values[0] >= 85 && values[0] <=95){
Log.i(TAG, "正东");
}
else if(values[0] >= 95 && values[0] <175){
Log.i(TAG, "东南");
}
else if((values[0] >= 175 && values[0] <= 180) || (values[0]) >= -180 && values[0] < -175){
Log.i(TAG, "正南");
}
else if(values[0] >= -175 && values[0] <-95){
Log.i(TAG, "西南");
}
else if(values[0] >= -95 && values[0] < -85){
Log.i(TAG, "正西");
}
else if(values[0] >= -85 && values[0] <-5){
Log.i(TAG, "西北");
}
}
网友评论