1) SensorManager类
这是一个管理传感器的类;
Context.getSystemService(SENSOR_SERVICE)得到SensorManager ,有了它你就可以管理传感器了;
2) Sensor编程的一般步骤:
1.取得SensorManager
sensorManager
= (SensorManager) getBaseActivity().getSystemService(Service.SENSOR_SERVICE);
|
2.实现接口SensorEventListener
private
SensorEventListener mSensorEventListener
= new SensorEventListener() {
@Override
public void
onSensorChanged(SensorEvent event) {
int sensorType = event.sensor.getType();
float[] values = event.values;
if (sensorType == Sensor.TYPE_ACCELEROMETER) {
if ((Math.abs(values[0]) >
17 || Math.abs(values[1]) >
17 || Math
.abs(values[2]) >
17)) {
currShakeCount++;
shakeTime =
$.util.dateNow().getTimeInMillis();
}
}
long curr =
$.util.dateNow().getTimeInMillis();
if (shakeTime
!= 0 && curr - shakeTime
>= SPEED_SHRESHOLD
&& currShakeCount
> MAX_SHAKE_COUNT) {
shakeTime =
0;
currShakeCount =
0;
handler.sendEmptyMessage(1);
}
}
@Override
public void
onAccuracyChanged(Sensor sensor, int
accuracy) {
}
};
|
3.注册SensorListener
sensorManager.registerListener(mSensorEventListener,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
sensorManager.SENSOR_DELAY_NORMAL);
|
其中第三个参数是延迟时间的精密度。
4.取消注册SensorManager
sensorManager.unregisterListener(mSensorEventListener);
|
5.实现摇一摇逻辑
private
Handler handler
= new Handler() {
@Override
public void
handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
setRlJimingVisible();
$.openLoading();
nameService.jiming(nameOptionManager.getNameOption(),
new ServiceResultListener() {
@Override
public void
onResult(ServiceResult result) {
$.closeLoading();
if (result.isSuccess()) {
final
ToolsJimingResult jimingResult = result.getResult(ToolsJimingResult.class);
setMusic();
$.util.threadDelayed(500,
new SNThreadDelayedListener() {
@Override
public void
onFinish() {
tvName.text(jimingResult.getName());
tvSpell.text(jimingResult.getPinYin());
}
});
} else {
setRlJimingGone();
getBaseActivity().toast(result.getMessage());
}
}
});
break;
}
}
};
|
|