获取gravity和geomagnetic 获取重力和磁场感应的值
1、获取SensorManger,重力感应器和磁场感应器,并注册
sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE) ;
aSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
sensorManager.registerListener(mySensorEvent, aSensor, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(mySensorEvent, mSensor,SensorManager.SENSOR_DELAY_NORMAL); 2、实现监听//感应器的监听
SensorEventListener mySensorEvent = new SensorEventListener(){
float[] accelerometerValues = new float[3];
float[] magneticFieldValues = new float[3];
//方向反应的值
float[] values = new float[3];
//旋转矩阵填充数组
float[] R = new float[9];
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy){}
@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;
//通过重力感应得到的值和磁场感应器得到的值--》计算出旋转矩阵的值
SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticFieldValues);
//通过旋转矩阵计算出方向角度
SensorManager.getOrientation(R, values);
float degrees = (float) Math.toDegrees(values[0]);
if(degrees==0.0)return ;
degrees = degrees>=0?degrees:(degrees+360) ;
if(Math.abs(degrees-oldAngle)<1)return ;
Log.i("sysout","手机旋转角度(以北方0°开始,顺时针)"+degress);
}
}
本文介绍如何使用Android设备上的重力感应器和磁场感应器来计算设备的方向角。通过注册监听并利用SensorManager类的方法,可以获取到重力加速度和磁场强度的数据,进而计算出设备相对于北方的角度。
1万+

被折叠的 条评论
为什么被折叠?



