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; } } }; | |