Android 传感器初识

Gyroscope

引言:传感器的出现将人类感官进行了无限的延长。

时间:2018年03月30日

作者:JustDo23

官方:https://developer.android.com/guide/topics/sensors/index.html

01. 简介

传感器 Sensor 是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。

02. 类型

Android 提供了丰富的传感器。简单罗列如下:

字段 类型
TYPE_ACCELEROMETER 加速度传感器
TYPE_MAGNETIC_FIELD 磁场传感器
TYPE_ORIENTATION 方向传感器
TYPE_GYROSCOPE 陀螺仪传感器
TYPE_LIGHT 传感器
TYPE_PRESSURE 压力传感器
TYPE_TEMPERATURE 温度传感器
TYPE_PROXIMITY 接近传感器
TYPE_GRAVITY 重力传感器
TYPE_LINEAR_ACCELERATION 线性加速度传感器
TYPE_ROTATION_VECTOR 旋转矢量传感器

03. 调用

通过代码直观展现在 Android 开发中调用传感器功能。

public class SensorActivity extends AppCompatActivity implements SensorEventListener {

  private SensorManager sensorManager;// 传感器管理服务
  private Sensor sensor;// 传感器对象

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sensor);
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);// 系统传感器管理服务
    sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);// 获取指定类型的传感器对象
  }

  @Override
  protected void onResume() {
    super.onResume();
    sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);// 注册传感器监听回调[同时需要指定刷新频率]
  }

  @Override
  protected void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);// 解除传感器事件监听回调
  }

  /**
   * 传感器精度发生变化[比如突然不能检测了]
   *
   * @param sensor   传感器对象
   * @param accuracy 精度值
   */
  @Override
  public void onAccuracyChanged(Sensor sensor, int accuracy) {

  }

  /**
   * 传感器检测后值回调
   *
   * @param event 检测事件
   */
  @Override
  public void onSensorChanged(SensorEvent event) {
    if (event.sensor == null) {
      return;
    }
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
      int x = (int) event.values[0];
      int y = (int) event.values[1];
      int z = (int) event.values[2];
      LogUtils.e("x = " + x + "\ny = " + y + "\nz = " + z);
    }
  }

}

04. 注意

  1. SensorManager

    SensorManager lets you access the device's sensors.

    Always make sure to disable sensors you don't need, especially when your activity is paused. Failing to do so can drain the battery in just a few hours. Note that the system will not disable sensors automatically when the screen turns off.

    不需要是使用传感器的情形中要及时的进行解除监听。因为调用传感器检测非常消耗手机电量。同时,系统不会自动关闭传感器,而需要调用者主动去关闭

  2. registerListener

    在注册监听的同时需要合理指定采样频率以达到降低功耗的目的。This is only a hint to the system.

    参数 时间
    SENSOR_DELAY_FASTEST 0ms
    SENSOR_DELAY_GAME 20ms
    SENSOR_DELAY_NORMAL 60ms
    SENSOR_DELAY_UI 200ms

05. 小结

  1. 在 Android 调用传感器其实很简单。
  2. 对各类型传感器的回调数据处理才是难点。
  3. 遇到什么情形选择哪些传感器这就是经验。
  4. 针对具体传感器的具体使用进行深入研究。
  5. 需要考虑传感器调用时长对手机电量的影响。

你可能感兴趣的:(Android 传感器初识)