项目中的使用经验:
Sensor重力感应器的灵敏度调整主要是跟下面两个东西有关
(1)float[] values = SensorEvent.values的三个值的检测,SensorEvent.values 值的单位是:米/秒^2(加速度)
(2)Sensor的registerListener()中的SensorManager.SENSOR_DELAY_FASTEST参数的设置
直接上代码了(这是项目中的感应器类的代码):代码中有参数设置的说明,
import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; public class HpSensor { private IShake mIShake; private Sensor mSensor; private SensorManager mSensorManage; private SensorEventListener mSensorEventListener; private boolean SensorRegistOK; public HpSensor(Context aContext, IShake aIShake){ mIShake = aIShake; mSensorManage = (android.hardware.SensorManager)aContext.getSystemService("sensor"); mSensor = mSensorManage.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); mSensorEventListener = new android.hardware.SensorEventListener(){ @Override public void onSensorChanged(SensorEvent event) { int sensorType = event.sensor.getType(); float[] values = event.values; if(SensorRegistOK && (sensorType == Sensor.TYPE_ACCELEROMET ER) && (values.length >= 3)){ //values[0]表示三维中的x轴,values[1]表示y轴,values[2]表示z轴,下面被注释掉的代码灵敏度在某些设备中不高,这里将校验值变小,15改为12(也可以更小),并去掉z轴的校验,即z轴方向的移动不做逻辑处理,只响应水平的移动 // if((Math.abs(values[0])>15||Math.abs(values[1])>15| |Math.abs(values[2])>15)){ if((Math.abs(values[0])>12||Math.abs(values[1])>12)){ mIShake.doSomething(); } } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; } public void register(){ //这里可以直接设置第三个参数的值,设置的越大,则感应的频率越高,灵敏度也越高,实际测试中频率太高会导致系统版本较低的设备感应器不能正常使用,如2.2的设备不能大于3,否则失效,版本2.3及已上能适应更大的频率 // SensorRegistOK = mSensorManage.registerListener(mSensorEventListener, mSensor, 3); SensorRegistOK = mSensorManage.registerListener(mSensorEventListener, mSensor,SensorManager.SENSOR_DELAY_UI); } public void unregister(){ mSensorManage.unregisterListener(mSensorEventListener, mSensor); } }