手机中内置的传感器是一种微型的物理设备,它能够探探测、感受外界的信号,并按一定规律转换成数值信息。
常见的传感器如光照传感器、加速度传感器、地磁场传感器、压力传感器、温度传感器……
传感器调用
Android 中每个传感器用法类似,只要遵循下面的步骤。
第一步:获取 SensorManager 的实例
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
SensorManager 是系统所有传感器的管理器。
第二步:获取 Sensor 传感器类型
调用 SensorManager 实例的 getDefaultSensor( )方法得到任意传感器的类型。
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
Sensor参数下有多有多个常量,表示不同的传感器名称:
加速传感器(Sensor.TYPE_ACCELEROMETER)
磁场传感器(Sensor.TYPE_MAGNETIC_FLELD)
光线传感器 ( Sensor.TYPE_LIGHT )
第三步:对传感器信号进行监听
借助 SensorEventListener 对传感器输出的信号进行监听。
SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
//当传感器监测到的数值发生变化时就会调用 onSensorChanged 方法
//SensorEvent 参数中又包含了一个 values 数组
// 所有传感器输出的信息都存放在 values 数组中
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//传感器的精度发生变化时就会调用 onAccuracyChanged 方法 }
};
event.vaues 的长度为3,每个数组元素的含义不同。
Accelerometer(加速传感器)
values[0] : 沿x轴方向加速度
values[1] : 沿 y 轴方向的加速度
values[2] : 沿 z 轴方向的加速度,也就是重力加速度
+
Gyroscope( 陀螺传感器)
values:分别表示x,y,z轴的旋转的角速度
+
Light(光线传感器)
values数组只有第一个元素values[0]有意义,表示光线的强度,最大值是120000.0f.
第四步:注册 SensorEventListener
调用 SensorManager 的 registerListener( ) 方法来注册 SensorEventListener 使其生效。
sensorManager.registerListener(listener,sensor,sensorManager.SENSOR_DELAY_NORMAL);
SensorManager下有多个常量,表示传感器的更新速度。
SensorManager.SENSOR_DELAY_FASTEST: 以最快的速度获得传感器数据
SENSOR_DELAY_GAME: 适合与在游戏中获得传感器数据
SENSOR_DELAY_NORMAL: 以一般的速度获得传感器数据
SENSOR_DELAY_UI :适合于在ui空间中获得数据
这四种更新速率依次递减
另外始终要记得,当程序退出或传感器使用完毕时,一定要调用 unregisterListener( )方法将使用的资源释放掉: sensorManager.unregisterListener(listener);
传感器使用示例
public class TestActivity extends Activity {
private SensorManager sensorManager;
//第三步:对传感器信号进行监听
private SensorEventListener listener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
//提示当前光照强度
Toast.makeText(TestActivity.this,
"当前光照强度:" + event.values[0] + "勒克斯", Toast.LENGTH_SHORT).show();
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//第一步:获取 SensorManager 的实例
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
//第二步:获取 Sensor 传感器类型
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
//第四步:注册 SensorEventListener
sensorManager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onDestroy() {
super.onDestroy();
//传感器使用完毕,释放资源
if(sensorManager!=null){
sensorManager.unregisterListener(listener);
}
}
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章