方向感应器的获取及使用

本文介绍如何使用Android设备上的重力感应器和磁场感应器来计算设备的方向角。通过注册监听并利用SensorManager类的方法,可以获取到重力加速度和磁场强度的数据,进而计算出设备相对于北方的角度。

获取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);
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值