Android开发传感器概述

传感器概述

快速浏览

  • 了解了Android支持传感器和Android的传感器框架。
  • 了解如何列出传感器,确定传感器功能和监控传感器数据。
  • 学习访问和使用传感器的最佳做法。

在该文献

  1. 简介传感器
  2. 识别传感器和传感器功能
  3. 监测传感器活动
  4. 处理不同的传感器配置
  5. 传感器坐标系
  6. 最佳实践访问和使用传感器

重点类和接口

  1. Sensor
  2. SensorEvent
  3. SensorManager
  4. SensorEventListener

相关样本

  1. 加速度计播放
  2. API演示(OS - RotationVectorDemo)
  3. API演示(OS - 传感器)

也可以看看

  1. 传感器
  2. 运动传感器
  3. 位置传感器
  4. 环境传感器

大多数Android手机都内置了用于测量运动,方向和各种环境条件的传感器。这些传感器能够提供原始数据具有较高的精度和准确度的,如果你想监控三维设备移动或定位是有用的,或者你想要监控的设备附近周围环境的变化。例如,一个游戏可以跟踪从设备的重力传感器读数来推测复杂的用户手势和动作,比如倾斜,摇动,旋转或摇摆。同样,天气应用程序可以使用设备的温度传感器和湿度传感器计算和报告露点或旅游应用程序可能使用的地磁传感器和加速度计报告罗盘方位。

Android平台支持的传感器三大类:

  • 运动传感器

    这些传感器测量加速力,并沿三个轴的旋转力。此类别包括加速度计,重力感应器,陀螺仪和旋转矢量传感器。

  • 环境传感器

    这些传感器测量各种环境参数,例如环境空气温度和压力,照明和湿度。此类别包括气压计,光度计,和温度计。

  • 位置传感器

    这些传感器测量设备的物理位置。这个类别包括方向传感器和磁力计。

您可以访问设备上可用的传感器,并采用了Android传感器框架获取原始传感器数据。该传感器框架提供了几个类和服务,帮助您执行各种各样的传感器相关的任务的接口。例如,你可以用传感器框架来做到以下几点:

  • 确定哪些传感器可在设备上。
  • 确定个体传感器的功能,例如其最大范围,生产商,功率要求,和分辨率。
  • 获取原始传感器数据和定义在此你获得传感器数据的最低费率。
  • 注册和注销传感器事件侦听器监视传感器的变化。

本主题提供了可用的Android平台上的传感器的概述。它还提供了一个介绍了传感器框架。

简介传感器


Android的传感器框架,您可以访问多种类型的传感器。一些这些传感器是基于硬件的,有些是基于软件的。基于硬件的传感器是内置到手机或平板电脑设备的物理部件。它们通过直接测量特定的环境属性,例如加速度,磁场强度或角度变化导出其数据。基于软件的传感器是不物理设备,虽然它们模仿基于硬件的传感器。基于软件的传感器从一个或多个基于硬件的传感器获得它们的数据,有时也称为虚拟传感器的或合成的传感器。线性加速度传感器和重力传感器是基于软件的传感器的例子。表1总结了由Android平台所支持的传感器。

很少有Android系统的设备有每一种类型的传感器。例如,大多数手持设备和片剂具有加速计和磁力计,但更少的设备有气压计或温度计。此外,设备可以具有一个给定类型的多个传感器。例如,设备可以具有两个重力传感器,每一个具有不同的范围。

表1.通过Android平台支持的传感器类型。

传感器 类型 描述 常见的用途
TYPE_ACCELEROMETER 硬件 测量在加速力米/秒2被施加到一设备上的所有三个物理轴(x,y和z),其中包括在重力的作用。 运动检测(晃动,倾斜等)。
TYPE_AMBIENT_TEMPERATURE 硬件 措施的环境室温为摄氏度(℃)。请参见下面的注意。 监测空气温度。
TYPE_GRAVITY 软件或硬件 措施以m / s地心引力2被施加到一设备上的所有三个物理轴(x,Y,Z)。 运动检测(晃动,倾斜等)。
TYPE_GYROSCOPE 硬件 措施弧度/秒左右各三个物理轴(x,y和z)的旋转设备的速率。 旋转检测(旋转,转等)。
TYPE_LIGHT 硬件 措施在光照度环境光水平(照度)。 控制屏幕亮度。
TYPE_LINEAR_ACCELERATION 软件或硬件 测量在加速力米/秒2被施加到一设备上的所有三个物理轴(x,y和z),不包括在重力的作用。 沿一个轴监测加速度。
TYPE_MAGNETIC_FIELD 硬件 措施在μT所有三个物理轴(x,Y,Z)周围的地磁场。 创建一个指南针。
TYPE_ORIENTATION 软件 措施度,一个装置使周围的所有三个物理轴(x,Y,Z)的旋转。如API级别3的可以使用的重力传感器,并与结合的地磁传感器获得用于一个设备的倾斜矩阵和旋转矩阵getRotationMatrix() 的方法。 确定设备位置。
TYPE_PRESSURE 硬件 措施百帕或毫巴环境空气压力。 监测空气压力的变化。
TYPE_PROXIMITY 硬件 测量物体在相对于装置的视图屏幕厘米的接近。这种传感器通常用于确定手机是否被举起到一个人的耳朵。 在通话过程中手机的位置。
TYPE_RELATIVE_HUMIDITY 硬件 测量以百分比(%)的相对环境湿度。 监视露点,绝对和相对湿度。
TYPE_ROTATION_VECTOR 软件或硬件 通过提供该装置的旋转矢量的三个元素测量设备的取向。 运动检测和旋转检测。
TYPE_TEMPERATURE 硬件 措施的装置的摄氏度(℃)度的温度。该传感器实现跨设备而异,此传感器与被替换TYPE_AMBIENT_TEMPERATURE的API等级14传感器 监测温度。

传感器框架

您可以访问这些传感器,并采用了Android传感器框架获取原始传感器数据。传感器框架是部分android.hardware包,并包括以下的类和接口:

SensorManager
你可以使用这个类来创建传感器服务的实例。这个类提供了访问和上市传感器,注册和注销传感器事件侦听器,并获取方位信息的各种方法。此类还提供了用于报告传感器精度,集数据采集速率,和校准传感器,传感器的几个常数。
Sensor
你可以使用这个类来创建特定的传感器的一个实例。这个类提供了让你确定传感器的功能的各种方法。
SensorEvent
该系统使用这个类来创建一个传感器事件对象,它提供了关于传感器事件的信息。传感器事件对象包括以下信息:所述原始传感器数据,传感器生成事件时,数据的准确性,并且该事件的时间标记的类型。
SensorEventListener
您可以使用此接口来创建接收通知(传感器事件)两个回调方法时,传感器值的变化,或者当传感器精度变化。

在典型的应用中使用这些传感器相关的API执行两个基本任务:

  • 识别传感器和传感器功能

    如果你的应用程序依赖于特定的传感器类型或功能的功能在运行时识别传感器和传感器功能是非常有用的。例如,您可能需要确定所有存在设备上的传感器和禁用依赖于中不存在任何的传感器应用程序功能。同样的,你可能要识别所有给定类型的传感器,所以你可以选择有适合您应用的最佳性能,传感器的实现。

  • 监控传感器事件

    监测传感器的事件是你如何获取原始传感器数据。传感器每次事件发生的传感器检测到它是测量的参数发生变化时。传感器事件提供了四个部分信息:触发事件,时间戳的事件,事件的准确度,并且触发事件的原始传感器数据的传感器的名称。

传感器可用性

而传感器的可用性从设备而异的装置,它也可以的Android版本之间变化。这是因为,在Android传感器已经引入在几个平台释放过程。例如,许多传感器的Android 1.5(API等级3)进行了介绍,但有些人不执行,是不能使用,直到的Android 2.3(API等级9)。同样,几个传感器的Android 2.3(API等级9)和Android 4.0(API等级14)进行了介绍。两个传感器已过时和更新,更好的传感器所取代。

表2总结在一个平台上逐平台基础每个传感器的可用性。只有四个平台上市,因为这些是涉及到传感器的变化的平台。被列为不推荐使用的传感器仍然可以在随后的平台(提供的传感器存在的设备上),这与Android的向前兼容性政策。

表2.传感器可用性因平台。

传感器 Android 4.0 
(API等级14)
Android 2.3 
(API等级9)
Android 2.2 
(API等级8)
Android 1.5
(API等级3)
TYPE_ACCELEROMETER
TYPE_AMBIENT_TEMPERATURE N / A N / A N / A
TYPE_GRAVITY N / A N / A
TYPE_GYROSCOPE N / A 1 N / A 1
TYPE_LIGHT
TYPE_LINEAR_ACCELERATION N / A N / A
TYPE_MAGNETIC_FIELD
TYPE_ORIENTATION 2 2 2
TYPE_PRESSURE N / A 1 N / A 1
TYPE_PROXIMITY
TYPE_RELATIVE_HUMIDITY N / A N / A N / A
TYPE_ROTATION_VECTOR N / A N / A
TYPE_TEMPERATURE 2

1此传感器类型是Android 1.5的(API等级3)补充,但它不能使用,直到的Android 2.3(API等级9)。

2该传感器可用,但它已被弃用。

识别传感器和传感器功能


Android的传感器框架提供了几种方法,可以很容易让你在运行时确定哪些传感器的设备上。API还提供了让你确定每个传感器的功能,如它的最大范围内,它的分辨率,它的功率要求的方法。

要确定你首先需要获取到传感器服务的引用一个设备上的传感器。要做到这一点,你创建的实例SensorManager调用类的getSystemService()方法,并传入SENSOR_SERVICE参数。例如:

private SensorManager mSensorManager;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

接下来,您可以通过调用得到一个设备上的每个传感器的上市 getSensorList()方法,并使用TYPE_ALL常数。例如:

List<Sensor> deviceSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);

如果要列出所有给定类型的传感器,可以使用另一种恒定的,而不是 TYPE_ALLTYPE_GYROSCOPE, TYPE_LINEAR_ACCELERATION或 TYPE_GRAVITY

还可以决定是否通过使用一设备上存在的传感器的一个特定类型的getDefaultSensor()方法和传递的类型恒定为一个特定的传感器。如果设备具有给定类型的多个传感器,所述传感器中的一个必须被指定为缺省传感器。如果默认传感器不为给定类型的传感器存在,该方法调用返回null,这意味着该装置不具有该类型的传感器。例如,下面的代码检查是否有一个装置上的磁力计:

private SensorManager mSensorManager;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
if (mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) != null){
  // Success! There's a magnetometer.
  }
else {
  // Failure! No magnetometer.
  }

注意: Android不要求设备制造商建立任何特定类型的传感器到他们的Android设备,因此设备可以有多种传感器的配置。

除了列出那些设备上的传感器,可以使用的公共方法 Sensor类确定能力和各个传感器的属性。如果你希望你的应用程序,以在此基础上的传感器或传感器功能不同的行为都可以在设备上,这非常有用。例如,您可以使用getResolution()getMaximumRange() 方法来获取传感器的分辨率和测量的最大范围。还可以使用的 getPower()方法,以获得一个传感器的电源要求。

如果你想优化您的不同制造商的传感器或不同版本的传感器的应用程序的公共方法有两个是特别有用。例如,如果你的应用需要监控用户的手势,如倾斜和震动,你可以创建数据过滤规则一组和具有特定供应商的重力感应器更新的设备优化和另一套数据过滤规则和优化的设备不具有重力传感器和只有一个加速度计。下面的代码示例向您介绍如何使用getVendor()getVersion()方法来做到这一点。在此示例中,我们正在寻找,列出谷歌公司作为供应商,并具有3版本号重力感应如果特定的传感器不存在设备上,我们尝试使用加速度计。

private SensorManager mSensorManager;
private Sensor mSensor;

...

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = null;

if (mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY) != null){
  List<Sensor> gravSensors = mSensorManager.getSensorList(Sensor.TYPE_GRAVITY);
  for(int i=0; i<gravSensors.size(); i++) {
    if ((gravSensors.get(i).getVendor().contains("Google Inc.")) &&
       (gravSensors.get(i).getVersion() == 3)){
      // Use the version 3 gravity sensor.
      mSensor = gravSensors.get(i);
    }
  }
}
if (mSensor == null){
  // Use the accelerometer.
  if (mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null){
    mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
  }
  else{
    // Sorry, there are no accelerometers on your device.
    // You can't play this game.
  }
}

另一种有用的方法是getMinDelay()方法,它返回的最小时间间隔(以微秒为单位)的传感器可以用来感测数据。对于该返回一个非零值的任何传感器getMinDelay() 方法是流传感器。流传感器感知定期数据,并在Android 2.3的(API等级9)进行了介绍。如果当你调用一个传感器返回零getMinDelay()的方法,这意味着传感器不是流传感器,因为它报告的数据只有当它被感测参数的变化。

getMinDelay(),因为它可以让你确定在哪个传感器可采集数据的最大速率的方法是有用的。如果您的应用程序的某些功能要求高数据采集速率或流传感器,就可以用这个方法来确定传感器是否符合这些要求,然后相应地启用或禁用应用程序中的相关功能。

注意:传感器的最大数据采集速率不一定在该传感器框架传感器数据传送到你的应用程序的速度。传感器框架报告中的数据通过传感器事件,和几个因素在影响您的应用程序接收到传感器事件的速率。欲了解更多信息,请参阅监控传感器活动。

监测传感器活动


要监视原始传感器数据,你需要实现通过暴露两个回调方法SensorEventListener的接口:onAccuracyChanged()onSensorChanged()。每当发生以下情况的Android系统调用这些方法:

  • 传感器的精度变化。

    在这种情况下,系统将调用onAccuracyChanged()方法,为您提供的一个参考Sensor,改变物体与传感器的新的精确度。:精度由四个状态常量之一表示 SENSOR_STATUS_ACCURACY_LOW, SENSOR_STATUS_ACCURACY_MEDIUM, SENSOR_STATUS_ACCURACY_HIGH,或SENSOR_STATUS_UNRELIABLE

  • 传感器报告一个新值。

    在这种情况下,系统将调用onSensorChanged()方法,为您提供一个SensorEvent对象。一个SensorEvent对象包含关于新的传感器数据的信息,包括:所述数据的准确度,即所产生的数据,在该生成的数据的时间戳,以及新的数据记录在传感器的传感器。

下面的代码演示了如何使用onSensorChanged()方法来监测来自光传感器的数据。本示例显示了原始传感器数据TextView 是在main.xml中文件的定义sensor_data

public class SensorActivity extends Activity implements SensorEventListener {
  private SensorManager mSensorManager;
  private Sensor mLight;

  @Override
  public final void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
  }

  @Override
  public final void onAccuracyChanged(Sensor sensor, int accuracy) {
    // Do something here if sensor accuracy changes.
  }

  @Override
  public final void onSensorChanged(SensorEvent event) {
    // The light sensor returns a single value.
    // Many sensors return 3 values, one for each axis.
    float lux = event.values[0];
    // Do something with this sensor value.
  }

  @Override
  protected void onResume() {
    super.onResume();
    mSensorManager.registerListener(this, mLight, SensorManager.SENSOR_DELAY_NORMAL);
  }

  @Override
  protected void onPause() {
    super.onPause();
    mSensorManager.unregisterListener(this);
  }
}

在本实施例中,默认数据延迟(SENSOR_DELAY_NORMAL该时指定)registerListener()方法被调用。数据延迟(或采样率)控制着传感器事件通过发送到应用程序的时间间隔onSensorChanged()回调方法。缺省数据延迟是适用于监测典型的屏幕取向的改变,并且使用20微秒的延迟。可以指定其它数据的延迟,如SENSOR_DELAY_GAME(20,000微秒延迟),SENSOR_DELAY_UI(60,000微秒延迟),或SENSOR_DELAY_FASTEST(0微秒延迟)。由于Android 3.0(API等级11),你还可以指定延迟的绝对值(微秒)。

您指定的延迟仅仅是一个建议的延迟。Android系统和其他应用程序可以改变这种延迟。作为最佳实践,您应该指定你能因为系统通常使用超过您指定的一个较小的延迟(也就是说,你应该选择仍然满足您的应用需求最慢的采样率)最大延时。使用较大的延迟征收的处理器的负载较低,因此更省电。

目前,用于确定传感器框架发送传感器事件到应用程序的速度没有公开的方法; 但是,您可以使用与每个传感器事件来计算几个事件的采样率相关联的时间戳。你不应该改变采样率(延时),一旦你设置它。如果由于某种原因你需要更改延迟,你将不得不注销并重新注册传感器侦听器。

同样重要的是要注意,此示例使用onResume(),并 onPause()回调方法来注册和注销传感器事件侦听器。作为最佳实践,你应该始终禁用不需要的传感器,尤其是当你的活动已暂停。因为一些传感器具有实质性的功率要求,并会很快用完电池电量如果不这样做能排在短短几个小时的电池。屏幕关闭时,系统不会自动禁用传感器。

处理不同的传感器配置


Android不指定设备的标准传感器配置,这意味着设备制造商可以将任何传感器配置,他们希望到他们的Android设备。其结果是,装置可包括在宽范围的配置的各种传感器。例如,摩托罗拉的Xoom具有压力传感器,但三星Nexus S没有。同样,Xoom的和歌Nexus S有陀螺仪,但是HTC的Nexus One没有。如果你的应用程序依赖于特定类型的传感器,你必须确保传感器存在的设备上,以便您的应用程序可以成功运行。你必须确保给定的传感器存在一个设备上的两个选项:

  • 在运行时检测传感器,并启用或禁用应用程序功能为宜。
  • 使用谷歌播放器瞄准特定的传感器配置设备。

每个选项在下面的章节中讨论。

在运行时检测传感器

如果应用程序使用特定类型的传感器,但不依赖于它,你可以使用传感器框架来检测传感器在运行时,然后禁用或启用应用程序功能为宜。例如,导航应用程序可能使用的温度传感器,压力传感器,GPS传感器,和地磁传感器,显示温度,气压,位置和方位。如果设备没有一个压力传感器,可以用传感器框架来检测没有在运行时的压力传感器,然后禁用显示压力应用程序的UI部分。例如,下面的代码检查是否有一个设备上的压力传感器:

  private SensorManager mSensorManager;
  ...
  mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
  if (mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) != null){
  // Success! There's a pressure sensor.
  }
  else {
  // Failure! No pressure sensor.
  }

使用谷歌播放器,以针对特定的传感器配置

如果要发布的谷歌上播放的应用程序可以使用  的元素在你的manifest文件从没有为您的应用选择合适的传感器配置设备过滤应用程序。该 元素包括一些硬件描述符,让你基于特定传感器的存在滤波器应用。你可以列出的传感器包括:加速计,气压计,指南针(地磁),陀螺仪,光线和距离。下面是一个例子清单项用于筛选不具有加速度计的应用程序:        

 android:name="android.hardware.sensor.accelerometer"
              android:required="true" />

如果添加这个元素和描述符到应用程序的清单,用户将看到您的谷歌应用程序只玩,如果他们的设备有一个加速度计。

你应该描述符设置为android:required="true"只有当你的应用程序完全依赖于一个特定的传感器。如果应用程序使用了一些功能的传感器,但仍然没有传感器运行时,您应该列出了传感器的 元素,但设置描述符android:required="false"。这有助于确保设备可以安装你的应用程序,即使他们没有特定的传感器。这也可以帮助你跟踪你的应用程序使用功能的项目管理的最佳实践。请记住,如果你的应用程序使用一个特定的传感器,但仍然没有传感器运行,那么你应该能够检测到传感器在运行时禁用或启用应用程序功能为宜。

传感器坐标系


在一般情况下,在传感器框架使用一个标准的3轴的坐标系来表示的数据值。对于大多数传感器,当装置在其默认方位保持的坐标系统被定义相对于该设备的屏幕(参见图1)。当设备在其默认方向被保持,X轴是水平的,并指向右侧,Y轴是垂直的,并指出了,并朝向屏幕面的外侧的Z轴分。在这个系统中,在屏幕后面坐标具有负Z值。这个坐标系统被用于通过以下传感器:

Android开发传感器概述_第1张图片

图1坐标系统(相对于设备)的使用的传感器API。

  • 加速度传感器
  • 重力感应器
  • 陀螺仪
  • 线性加速度传感器
  • 地磁传感器

最重要的一点,了解有关该坐标系是,当设备的屏幕方向改变,也就是说,在传感器的坐标系永不改变的设备移动轴没有交换。此行为是相同的了OpenGL坐标系统的行为。

了解另一点是,您的应用程序不应该假设设备的自然(默认)方向为纵向。对于许多平板设备的自然方向为横向。和传感器坐标系统总是基于一个装置的自然取向。

最后,如果你的应用传感器数据匹配屏幕上显示,您需要使用 getRotation()方法来确定屏幕旋转,然后使用 remapCoordinateSystem()方法来映射传感器坐标到屏幕坐标。你需要这样做,即使你的清单指定唯一的画像显示。

有关传感器的详细信息坐标系,包括如何处理屏幕旋转,看到信息一屏有好报。

注意:一些传感器和方法使用的坐标系统,该系统是相对于参考世界帧(相对于参考设备的帧)。这些传感器和方法返回代表相对于地球设备运动或设备位置数据。欲了解更多信息,请参阅getOrientation()法,getRotationMatrix()方法,方向传感器和旋转矢量传感器。

最佳实践访问和使用传感器


当你设计你的传感器的实施,一定要遵循在本节讨论的指导方针。这些指南推荐用于谁在使用传感器框架来访问传感器并获取传感数据的人的最佳做法。

注销传感器监听器

一定要注销传感器监听器,当你正在使用的传感器或当传感器活动暂停进行。如果传感器侦听器已注册和活动被暂停,传感器将继续采集数据,除非您注销传感器使用电池资源。下面的代码演示了如何使用onPause()方法来注销监视器:

private SensorManager mSensorManager;
  ...
@Override
protected void onPause() {
  super.onPause();
  mSensorManager.unregisterListener(this);
}

欲了解更多信息,请参阅unregisterListener(SensorEventListener)

测试与Android模拟器

Android模拟器包括一组虚拟传感器控制,使您可以测试传感器,如加速度计,环境温度,磁强计,接近,光,等等。

Android开发传感器概述_第2张图片

仿真器使用与运行Android设备的连接 SdkControllerSensor 应用程序。请注意,这个应用程序仅适用于运行Android 4.0(API级别14)或更高版本的设备。(如果设备运行Android 4.0,它必须有修订2安装。)的SdkControllerSensor应用监视设备上的传感器的变化,并将它们发送到仿真器。然后,仿真器是基于它从设备上的传感器接收新的值转化。

您可以查看源代码SdkControllerSensor在以下位置的应用程序:

$ your-android-sdk-directory/tools/apps/SdkController

为了您的设备和仿真器之间传输数据,请按照下列步骤操作:

  1. 检查USB调试启用您的设备上。
  2. 使用USB电缆将设备连接到您的开发机器。
  3. 启动SdkControllerSensor您的设备上的应用程序。
  4. 在应用中,选择您想要模仿的传感器。
  5. 运行以下adb命令:

  6. $ adb forward tcp:1968 tcp:1968

  7. 启动模拟器。您现在应该能够通过移动设备转换应用到仿真器。

注意:如果你对物理设备的动作都不会改变模拟器,尝试运行 adb再次从第5步命令。

欲了解更多信息,请参阅Android模拟器指南。

不要挡住onSensorChanged()方法

传感器数据可以以高速率,这意味着该系统可以调用改变onSensorChanged(SensorEvent)经常方法。作为最佳实践,你应该做的尽可能少的范围内onSensorChanged(SensorEvent)的方法,这样你就不会阻止它。如果应用程序需要你做的任何数据过滤或减少传感器的数据,你应该在外面执行工作onSensorChanged(SensorEvent)方法。

避免使用过时的方法或传感器类型

有几个方法和常量已经过时。尤其是,TYPE_ORIENTATION 传感器类型已经过时。为了获得方位数据,你应该使用的getOrientation()方法来代替。同样, TYPE_TEMPERATURE传感器类型已经过时。您应该使用的TYPE_AMBIENT_TEMPERATURE传感器类型,而不是在运行Android 4.0的设备。

验证传感器在使用之前

始终验证设备上存在一个传感器尝试从中获取数据之前。不要以为因为它是一个频繁使用的传感器的传感器简单地存在。设备制造商不要求在他们的设备提供的任何特定的传感器。

请谨慎选择传感器延时

当您注册与传感器registerListener()的方法,一定要选择分娩率,是适合您的应用程序或用例。传感器可以以非常高的速率提供数据。使系统发送你不需要浪费系统资源和消耗电池电量的额外数据。


你可能感兴趣的:(android,android开发,android平台)