http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1009/425.html
带有g-sensor的Android设备上可通过API获取到设备的运动加速度,应用程序通过一些假设和运算,可以从加速度计算出设备的方向
获取设备运动加速度的基本代码是:
SensorManagersm =(SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
sm.registerListener(newSensorEventListener(){
publicvoidonSensorChanged(SensorEventevent){
if(Sensor.TYPE_ACCELEROMETER !=event.sensor.getType()){
return;
}
float[]values =event.values;
floatax =values[0];
floatay =values[1];
floataz =values[2];
// TODO Have fun with the acceleration components...
}
publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){
}
},sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
SendorEventListener 通过 SendorEvent 回调参数获得当前设备在坐标系x、y、z轴上的加速度分量。SensorEvent 的 api doc 中定义了这里使用的坐标系为:
我暂且称之为“设备坐标系”吧,设备坐标系是固定于设备的,与设备的方向(在世界坐标系中的朝向)无关
精确地说,Sensor Event 所提供的加速度数值,是设备以地球为参照物的加速度减去重力加速度的叠加后的值。我是这样理解的:当以重力加速度g向地面作自由落体运动时,手机处于失重状态,g-sensor以这种状态作为加速度的0ÿ