Android中支持很多種傳感器:
比如加速度,重力的,光感,磁感等等。
在運用該API常用到的兩個類和一個接口
SensorManager:傳感器管理類;
Sensor:一個描述傳感器的類;
SensorEventListener:傳感器事件監聽類(SensorListener類已過期);
一般運用步驟:
1.通過上下文獲取SensorManager的對象。
[java]
- Context.getSystemService(Context.Sensor_service);
2.實例化一個你需要使用的sensor對象。
[java]
- Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
也可以通過getSensorList()來獲取所有的傳感器對象,返回一個list;
3.實現傳感器監聽接口
4.注冊傳感器
5.反注冊傳感器
代碼例子都很簡單簡短。
以下附上我以前用到的一個關於加速度的傳感器,我用來做搖晃事件監聽;
[java]
- /**
- * 搖動檢測器
- * @author Nono
- *
- */
- public class ShakeDetector implements SensorEventListener{
- private static final String TAG = ShakeDetector.class.getSimpleName();
-
- private static final double SHAKE_SHRESHOLD = 7000d;
- private Context mContext;
- private long lastTime ;
- private float last_x;
- private float last_y;
- private float last_z;
-
- private SensorManager sensorManager;
- private onShakeListener shakeListener;
- /**
- * 構造
- * @param context
- */
- public ShakeDetector(Context context){
- mContext = context;
- sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
- }
-
- /**
- * 注冊傳感器
- */
- public boolean registerListener() {
-
- if (sensorManager != null) {
- Sensor sensor = sensorManager
- .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
- if (sensor != null) {
- this.sensorManager.registerListener(this, sensor,
- SensorManager.SENSOR_DELAY_GAME);
- LogUtil.log(TAG, "registerListener: succeed!!");
- return true;
- }
- }
- return false;
- }
-
- /**
- * 反注冊傳感器
- */
- public void unRegisterListener() {
- if (sensorManager != null)
- sensorManager.unregisterListener(this);
- }
-
- public void setOnShakeListener(onShakeListener listener){
- shakeListener = listener;
- }
-
- public void onSensorChanged(SensorEvent event) {
- //if (event.sensor.getType() == SensorManager.SENSOR_ACCELEROMETER) {
- long curTime = java.lang.System.currentTimeMillis();
- if ((curTime - lastTime) > 10) {
- long diffTime = (curTime - lastTime);
- lastTime = curTime;
- float x = event.values[0];
- float y = event.values[1];
- float z = event.values[2];
- float speed = Math.abs(x + y + z - last_x - last_y - last_z)
- / diffTime * 10000;
- if (speed > SHAKE_SHRESHOLD) {
- // 檢測到搖晃後執行的代碼
- shakeListener.onShake();
- }
- last_x = x;
- last_y = y;
- last_z = z;
- }
- //}
- }
-
- public void onAccuracyChanged(Sensor sensor, int accuracy) {
- // TODO Auto-generated method stub
-
- }
-
- /**
- *
- * @author Nono
- *
- */
- public interface onShakeListener{
- public void onShake();
- }
-
- }
上面是自己實現的一個關於加速度的傳感器類
在Activity中實例化該類,並實現onShakeListener接口
[java]
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
- super.onCreate(savedInstanceState);
- mContext = this;
- mShakeDetector = new ShakeDetector(mContext);
- mShakeDetector.setOnShakeListener(this);
然後你可以在Activity的幾個生命周期中實現它的注冊和反注冊。
在onshakeListener中onShake方法中做傳感器檢測到變動的事件處理。