android gsensor 坐标,获取Android设备的方向,Sensor和SensorManager实现手机旋转角度

本文介绍了如何使用Android的Sensor和SensorManager API获取设备加速度,通过加速度计算设备相对于地面的方向。详细解析了设备坐标系,以及如何在x-y平面上简化计算,确定设备屏幕朝向。并提供了一个‘不倒翁’Demo,展示了实时调整UI旋转角度的实现方法。
摘要由CSDN通过智能技术生成

带有g-sensor的Android设备上可通过API获取到设备的运动加速度,应用程序通过一些假设和运算,可以从加速度计算出设备的方向

获取设备运动加速度的基本代码是:SensorManager sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);

sm.registerListener(new SensorEventListener() {

public void onSensorChanged(SensorEvent event) {

if (Sensor.TYPE_ACCELEROMETER != event.sensor.getType()) {

return;

}

float[] values = event.values;

float ax = values[0];

float ay = values[1];

float az = values[2];

// TODO Have fun with the acceleration components...

}

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

}, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);

SendorEventListener 通过 SendorEvent 回调参数获得当前设备在坐标系x、y、z轴上的加速度分量。SensorEvent 的 api doc 中定义了这里使用的坐标系为:

10ef9cf0a18196e6cfe3479b7a6aca1c.png

我暂且称之为“设备坐标系”吧,设备坐标系是固定于设备的,与设备的方向(在世界坐标系中的朝向)无关

精确地说,Sensor Event 所提供的加速度数值,是设备以地球为参照物的加速度减去重力加速度的叠加后的值。我是这样理解的:当以重力加速度g向地面作自由落体运动时,手机处于失重状态,g-sensor以这种状态作为加速度的0;而当手机处于静止状态(相对于地面)时,为了抵御自由落体运动的趋势,它有一个反向(向上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值