Sensor API

Chinese, Simplified

1.      概述

Android Sensor Framework 提供了标准的class interface 来访问和控制各种sensor。目前android 默认支持的sensor种类如下:

    public static final int TYPE_ACCELEROMETER = 1;

    public static final int TYPE_MAGNETIC_FIELD = 2;

    public static final int TYPE_ORIENTATION = 3;

    public static final int TYPE_GYROSCOPE = 4;

    public static final int TYPE_LIGHT = 5;

    public static final int TYPE_PRESSURE = 6;

    public static final int TYPE_PROXIMITY = 8;

    public static final int TYPE_GRAVITY = 9;

    public static final int TYPE_LINEAR_ACCELERATION = 10;

    public static final int TYPE_ROTATION_VECTOR = 11;

    public static final int TYPE_RELATIVE_HUMIDITY = 12;

    public static final int TYPE_AMBIENT_TEMPERATURE = 13;

    public static final int TYPE_MAGNETIC_FIELD_UNCALIBRATED = 14;

    public static final int TYPE_GAME_ROTATION_VECTOR = 15;

    public static final int TYPE_GYROSCOPE_UNCALIBRATED = 16;

    public static final int TYPE_SIGNIFICANT_MOTION = 17;

    public static final int TYPE_STEP_DETECTOR = 18;

    public static final int TYPE_STEP_COUNTER = 19;

    public static final int TYPE_GEOMAGNETIC_ROTATION_VECTOR = 20;

    public static final int TYPE_HEART_RATE = 21;

    public static final int TYPE_TILT_DETECTOR = 22;

    public static final int TYPE_WAKE_GESTURE = 23;

    public static final int TYPE_GLANCE_GESTURE = 24;

    public static final int TYPE_PICK_UP_GESTURE = 25;

    public static final int TYPE_PEDOMETER  = 26;

    public static final int TYPE_IN_POCKET  = 27;

    public static final int TYPE_ACTIVITY   = 28;

    public static final int TYPE_FACE_DOWN  = 29;

    public static final int TYPE_SHAKE      = 30;

 

后续AmLink平台会在此基础上支持更多的sensor种类。

2.       Sensor Framework and API

public abstract class SensorManager

是个抽象类,提供各种方法来访问听sensor,通过调用getSystemService(SENSOR_SERVICE)可以该类的一个例。重要的方法api如下:

/*注册listener监听sensor事件,rate参数表示采样间隔*/

public boolean registerListener(SensorListener listener, int sensors, int rate)

/*获取指定类型的sensor*/

public Sensor getDefaultSensor(int type)

 

public final class Sensor

用于创建具体sensor的实例,它提供了各种方法api类获取设备sensor的详细信息。常用的如下:

/*获取sensor分辨率*/

float getResolution ()

/*获取sensor最大量程*/

float getMaximumRange ()

/*获取sensor vendor信息*/

String getVendor ()

/*获取sensor  工作时的功耗*/

float getPower ()

 

public class SensorEvent

该类定义了传感器事件类型,主要成员如下:

 

public final float[] values; /*传感器的值*/

public Sensor sensor; /* 产生本次事件的sensor */

public int accuracy;           /*精确度*/

public long timestamp;    /*时间戳*/

 

 

public interface SensorEventListener

是个interface, sensor数据更新时,用于接收来自SensorManager的通知,主要方法如下:    

 

/*sensor数据改变时该函数被回调,参数event保存了sensor 事件信息*/

public void onSensorChanged(SensorEvent event);

/*sensor 精确度改变时该函数被回调*/

public void onAccuracyChanged(Sensor sensor, int accuracy);

 

3.      参考代码

下面是获取光传感器的数据的参考代码:

public class SensorActivity extends Activity implements SensorEventListener {

  private SensorManager mSensorManager;

  private Sensor mLight;

 

  @Override

  public final void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

 

    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

    mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);

  }

 

  @Override

  public final void onAccuracyChanged(Sensor sensor, int accuracy) {

    // Do something here if sensor accuracy changes.

  }

 

  @Override

  public final void onSensorChanged(SensorEvent event) {

    // The light sensor returns a single value.

    // Many sensors return 3 values, one for each axis.

    float lux = event.values[0];

    // Do something with this sensor value.

  }

 

  @Override

  protected void onResume() {

    super.onResume();

    mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL);

  }

 

  @Override

  protected void onPause() {

    super.onPause();

    mSensorManager.unregisterListener(this);

  }

}

 

4.      参考

更多的资料请参考:

https://developer.android.com/reference/android/hardware/Sensor.html


文档中心

以上内容是否对您有帮助?