引言:传感器的出现将人类感官进行了无限的延长。
时间: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. 注意
-
SensorManager
SensorManager
lets you access the device'ssensors
.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.
在
不需要
是使用传感器的情形中要及时
的进行解除监听
。因为调用传感器检测非常消耗手机电量
。同时,系统不会自动关闭传感器,而需要调用者主动去关闭
。 -
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. 小结
- 在 Android 调用传感器其实很简单。
- 对各类型传感器的回调数据处理才是难点。
- 遇到什么情形选择哪些传感器这就是经验。
- 针对具体传感器的具体使用进行深入研究。
- 需要考虑传感器调用时长对手机电量的影响。