android手机支持重力感应,针对Android的通过如下接口支持:
android.hardware.SensorEventListener
该接口有两个方法需要实现:
@Override
public void onSensorChanged(SensorEvent e) {
view.handleMoving(e.values[SensorManager.DATA_X]);
}
@Override
public void onAccuracyChanged(Sensor s, int accuracy) {
....
}
实现该接口比较容易,可以将对应的Activity实现该接口,在onSensorChanged方法中添加需要感应重力变化的处理代码即可。
还有一点,为了使重力感应生效需要增加如下处理逻辑
1:在Activity创建后,使重力感应生效
2:在Activity终止时,使重力感应失效
参考类似代码如下:
private SensorManager mSensorManager;
private Sensor mSensor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
enableSensor();
}
@Override
public void finish() {
// 注销重力感应监听
disableSensor();
super.finish();
}
private void enableSensor(){
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
// 注册重力感应监听
mSensorManager.registerListener(this, mSensor,
SensorManager.SENSOR_DELAY_GAME);
}
public void disableSensor(){
mSensorManager.unregisterListener(this, mSensor);
}
获取系统重力感应的方法:
public static void getSystemGravity(Context context) {try {int systemGravity = Settings.System.getInt(context.getContentResolver(),Settings.System.ACCELEROMETER_ROTATION);if (0 == systemGravity) {Constant.g_isGravity = false;} else {Constant.g_isGravity = true;}} catch (SettingNotFoundException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}
设置系统是否开启重力感应:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);