Android之sensor 传感器

传感器类型

方向、加速表、光线、磁场、临近性、温度等。

采样率

最快、游戏、普通、用户界面。当应用程序请求特定的采样率时,其实只是对传感器子系统的一个提示,或者一个建议。不保证特定的采样率可用。

准确性

高、低、中、不可靠。

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

}

 

26

 

27

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 温度感应器,可以获取手机的内部温度,不过和周边的有些差距,毕竟手机内部一般温度比较高。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值