在Android手机上使用重力感应其实挺简单的,主要是解析一个数组即可,下面就来看看具体的代码吧。
public class SenseActivity extends Activity {
private SensorManager mSensorManager;
private TextView textview;/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
textview = (TextView) this.findViewById(R.id.sense);
Sensor sensor = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION)
.get(0);
Log.i("info", "size"
+ mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION).size());
mSensorManager.registerListener(mSensorListener, sensor,
SensorManager.SENSOR_DELAY_NORMAL);
}@Override
protected void onDestroy() {
super.onDestroy();
mSensorManager.unregisterListener(mSensorListener);
}private final SensorEventListener mSensorListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}@Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
// 判断手机翻面的标准是y的绝对值大于120度
textview.setText("DATA_X:\t" + values[SensorManager.DATA_X]
+ "\nDATA_Y:\t" + values[SensorManager.DATA_Y]
+ "\nDATA_Z:\t" + values[SensorManager.DATA_Z]);
}
};
}
通过DATA_X,DATA_Y,DATA_Z来感知手机的位置变化。那么他们分别代表什么意思呢?
1.DATA_X:指示南北方向,当手机指向北方时,其值为0。放水平顺时针方向旋转,其值依次增加,一周后其值又变回0。范围为0~360。
2.DATA_Y:指示手机屏幕方向,当手机正面朝上时,其值为0。当手机头部向下转动时,其值增加,当手机尾部向下时,其值减少。范围为-180~180。
3.DATA_Z:指示手机自身旋转,当手机正面朝上和背面朝上时,其值为0。当手机头尾方向不变,自身向右旋转时从正面朝上到背面朝上的过程中,其值先减少后增加,当手机正面朝右方时其值为-90。变化范围为0~-90~0;当手机头尾方向不变,自身向左旋转时从正面朝上到背面朝上的过程中,其值先增加后减少,当手机正面朝左方时其值为90。变化范围为0~90~0。
出自:http://www.zmkm.info/archives/51