传感器类型
方向、加速表、光线、磁场、临近性、温度等。
采样率
最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个提示,或者一个建议。不保证特定的采样率可用。
准确性
高、低、中、不可靠。
SensorListener 接口是传感器应用程序的中心。它包括两个必需方法:
· onSensorChanged(intsensor,float values[]) 方法在传感器值更改时调用。该方法只对受此应用程序监视的传感器调用(更多内容见下文)。该方法的参数包括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。有些传感器只提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。
· 当传感器的准确性更改时,将调用 onAccuracyChanged(intsensor,int accuracy) 方法。参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。
要与传感器交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。注册使用 SensorManager 类的 registerListener 方法完成。本文中的 代码示例 演示了如何注册和注销 SensorListener。
记住,并非所有支持 Android 的设备都支持 SDK 中定义的所有传感器。如果某个传感器无法在特定的设备上使用,您的应用程序就会适当地降级。
· Android所有的传感器都归传感器管理器 SensorManager 管理,获取传感器管理器的方法很简单:
String service_name = Context.SENSOR_SERVICE;
SensorManager sensorManager =(SensorManager)getSystemService(service_name);
· 现阶段Android支持的传感器有8种,它们分别是:
传感器类型常量 | 内部整数值 | 中文名称 | |||||||||
Sensor.TYPE_ACCELEROMETER | 1、加速,描述加速度的 | 加速度传感器 | |||||||||
Sensor.TYPE_MAGNETIC_FIELD | 2、 磁极感应器 | 磁力传感器 | |||||||||
Sensor.TYPE_ORIENTATION | 3、 方向感应器 | 方向传感器 | |||||||||
Sensor.TYPE_GYROSCOPE | 4、 陀螺仪感应器 | 陀螺仪传感器 | |||||||||
Sensor.TYPE_LIGHT | 5、 光线感应器 | 环境光照传感器 | |||||||||
Sensor.TYPE_PRESSURE | 6、 压力感应器 | 压力传感器 | |||||||||
Sensor.TYPE_TEMPERATURE | 7、 温度感应器 | 温度传感器 | |||||||||
Sensor.TYPE_PROXIMITY | 8、 距离感应器 | 距离传感器 | |||||||||
· 从传感器管理器中获取其中某个或者某些传感器的方法有如下三种:
第一种:获取某种传感器的默认传感器
Sensor defaultGyroscope =sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
第二种:获取某种传感器的列表
List<Sensor> pressureSensors =sensorManager.getSensorList(Sensor.TYPE_PRESSURE);
第三种:获取所有传感器的列表,我们这个例子就用的第三种
List<Sensor> allSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
· 对于某一个传感器,它的一些具体信息的获取方法可以见下表:
方法 | 描述 |
getMaximumRange() | 最大取值范围 |
getName() | 设备名称 |
getPower() | 功率 |
getResolution() | 精度 |
getType() | 传感器类型 |
getVentor() | 设备供应商 |
getVersion() | 设备版本号 |
//1、取得重力感应器Sensor对象
02 | //在 Activity 中定义以下成员变量: |
03 | private SensorManager mManager = null; |
04 | private Sensor mSensor = null; |
05
06 | //以下代码加入到 onCreate() 方法中: |
07 | mManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); |
08
09 | mSensor = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); |
10
11 | //2、创建监听器 |
12 | //在 Activity 中定义以下成员变量: |
13 | private SensorEventListener mListener = null; |
14
15 | //以下代码加入到 onCreate() 方法中: |
16 | mListener = new SensorEventListener() { |
17 | public void onAccuracyChanged(Sensor sensor, int accuracy) { |
18 | } |
19
20 | public void onSensorChanged(SensorEvent event) { |
21 | float x = event.values[SensorManager.DATA_X]; |
22 | float y = event.values[SensorManager.DATA_Y]; |
23 | float z = event.values[SensorManager.DATA_Z]; |
24 | doSomething(x, y, z); |
25 | } |
|
28 | //3、注册监听器 |
29 | //以下代码加入到 onResume() 方法中: |
30 | mManager.registerListener(mListener, mSensor, SensorManager.SENSOR_DELAY_GAME); |
31
32 | //这里 SENSOR_DELAY_GAME 还可以是以下常量: |
33 | //SENSOR_DELAY_FASTEST |
34 | //SENSOR_DELAY_UI |
35 | //SENSOR_DELAY_NORMAL |
36
37 | //4、取消监听器 |
38 | //以下代码加入到 onPause() 方法中: |
39 | mManager.unregisterListener(mListener); |
在Android 2.3中新增了3个感应器,对于Android平台的开发我们通过感应器可以发挥想象设计出一些很实用的软件。下面就一起看下目前API11个感应器分别是什么吧。
1. ACCELEROMETER 加速,描述加速度的。
2.GRAVITY 重力,Android2.3新增的
3.GYROSCOPE 陀螺仪,对于物体跌落检测更强大些,开发游戏少了它会有点遗憾的,API Level 9新增的类型。
4. LIGHT 光线感应器,很多Android手机的屏幕亮度是根据这个感应器的数组自动调节的。
5. LINEAR_ACCELERATION 线性加速器,API Level 9新增的。
6. MAGNETIC_FIELD 磁极感应器。
7. ORIENTATION 方向感应器。
8. PRESSURE 压力感应器。
9. PROXIMITY 距离感应器,对于通话后关闭屏幕背光很有用。
10. ROTATION_VECTOR 旋转向量,Android 2.3新增的,如果我们过去处理图像会发现这个还是很有用的,不过这里还是对游戏开发起到辅助。
11. TEMPERATURE 温度感应器,可以获取手机的内部温度,不过和周边的有些差距,毕竟手机内部一般温度比较高。