
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. 注意
-
SensorManager
SensorManagerlets 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 调用传感器其实很简单。
- 对各类型传感器的回调数据处理才是难点。
- 遇到什么情形选择哪些传感器这就是经验。
- 针对具体传感器的具体使用进行深入研究。
- 需要考虑传感器调用时长对手机电量的影响。