读书人

Android-Sensor重力感应器灵敏度有关问

发布时间: 2013-01-25 15:55:29 作者: rapoo

Android-Sensor重力感应器灵敏度问题
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(){@Overridepublic 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();}}}@Overridepublic 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);}}

?

?

?

读书人网 >Android

热点推荐