项目使用经验:
(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);
}
}