关闭

Android传感器概述(六)

188人阅读 评论(0) 收藏 举报
分类:

原地址:http://www.2cto.com/kf/201210/161192.html

监视传感器事件

要监视原始的传感器数据,你需要实现两个通过SensorEventListener接口暴露的回调方法:onAccuracyChanged()和onSensorChanged()。Android系统在任何发生下列事情的时候都会调用这两个方法:

1. 传感器精度的改变:

这种情况中,系统会调用onAccuracyChanged()方法,它提供了你要引用的发生精度变化的Sensor对象。精度使用以下四个状态常量之一来代表的:

SENSOR_STATUS_ACCURACY_LOW

SENSOR_STATUS_ACCURACY_MEDIUM

SENSOR_STATUS_ACCURACY_HIGH

SENSOR_STATUS_UNRELIABLE

2. 传感器报告新的值:

这种情况中,系统会调用onSensorChanged()方法,它提供了一个SensorEvent对象。SensorEvent对象包含了有关新的传感器数据的信息,包括:数据的精度、产生数据的传感器、产生数据时的时间戳、以及传感器记录的新的数据。

下列代码显示了如何使用onSensorChanged()方法来监视来自亮度传感器的数据。这个例子在一个TextView中显示原始的传感器数据:

publicclassSensorActivityextendsActivityimplementsSensorEventListener{  privateSensorManager mSensorManager;  privateSensor mLight;   @Override  publicfinalvoid onCreate(Bundle savedInstanceState){    super.onCreate(savedInstanceState);    setContentView(R.layout.main);     mSensorManager =(SensorManager) getSystemService(Context.SENSOR_SERVICE);    mLight = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);  }   @Override  publicfinalvoid onAccuracyChanged(Sensor sensor,int accuracy){    // Do something here if sensor accuracy changes.  }   @Override  publicfinalvoid onSensorChanged(SensorEventevent){    // 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);

  }

}

在这个例子中,在调用registerListener()方法时,指定了默认的数据延迟(SENSOR_DELAY_NORMAL)。数据延迟(或采样率)控制着传感器事件通过onSensorChanged()回调方法发送给你的应用程序的时间间隔。默认的数据延迟适用于监视典型的屏幕方向的变化,它所使用的时间延迟是200,000毫秒。你能够指定其他的数据延迟类型,如SENSOR_DELAY_GAME(20,000毫秒延迟)、SENSOR_DELAY_UI(60,000毫秒延迟)、或者是SENSOR_DELAY_FASTEST(0毫秒延迟)。Android3.0(API Level 11)以后,你也能够使用一个绝对值(以毫秒的形式)来指定延迟。

你所指定的延迟只是建议性的延迟。Android系统和其他应用程序都能够修改这个延迟。作为最好的实践,你应该指定你所需要的最大延迟,因为系统通常会使用比你指定的要小的延迟(也就是说,你应该选择你的应用所需要的最低的采样率)。使用较大的延迟会降低处理器的负载,同时也因此降低了电量的损耗。

有没有公开的方法用于判断传感器框架把传感器事件发送给你的应用程序的频率;但是,你能够使用前后两个传感器事件的时间戳来计算采样率。一旦你设置了采样率(延迟)就不要改变。如果因为某些原因需要改变,那么就必须先注销然后在重新注册传感器监听器。

在这个例子中还要重点关注的是:使用onResume()和onPause()回调方法来注册和注销传感器监听事件。作为最好的实践,你始终应该在不需要的时候禁用传感器,尤其是在Activity被挂起的时候。如果不这样做,因为有些传感器有很大的电量需求,因此会很快的消耗掉电池电量。在屏幕关闭的时候,系统不会自动的禁用传感器。

0
0
查看评论

Android传感器概述(六)

监视传感器事件 要监视原始的传感器数据,你需要实现两个通过SensorEventListener接口暴露的回调方法:onAccuracyChanged()和onSensorChanged()。Android系统在任何发生下列事情的时候都会调用这两个方法: 1. 传感器精度的改变: 这...
  • ggGavin
  • ggGavin
  • 2013-11-07 22:22
  • 852

Android传感器概述(八)

传感器的坐标系统 通常情况,传感器框架使用标准的3轴坐标系统来表达数据值。对于大多数传感器,坐标系统是相对与设备被保持在默认方向时的设备的屏幕来定义的(如图1)。当设备被保持在默认方向时,X轴是水平向右、Y轴是垂直向上、Z轴是指向屏幕面板的外部。在这个系统中,背对着屏幕的Z轴坐标是负值。该坐标系统...
  • ggGavin
  • ggGavin
  • 2013-11-07 22:23
  • 960

Android传感器概述(七)

处理不同的传感器器配置 Android不给设备指定标准的传感器配置,这就意味着制造商能够把任何他们想要的传感器配置包含到他们的Android设备中。因此,设备能够包含配置广泛的各种传感器。例如,摩托罗拉的Xoom有一个压力传感器,但是三星的Nexus S却没有。同样Xoom和Nexus S都有陀螺...
  • ggGavin
  • ggGavin
  • 2013-11-07 22:22
  • 934

Android传感器概述(一)

本文译自:http://developer.android.com/guide/topics/sensors/sensors_overview.html 大多数的Android设备都有内置的测量运动、方向、和各种环境条件的传感器。这些传感器具有提供高精度和准确度的原始数据的能力,可用于监视设备在三...
  • ggGavin
  • ggGavin
  • 2013-11-07 22:13
  • 873

Android传感器概述(四)

传感器的可用性 传感器的可用性不但在不同硬件之间有变化,而且不同的Android版本之间也可能有变化。这是因为Android传感器的引入需要有几个平台Release的过程。例如,某些传感器在Android1.5(API Level 3)中被引入,但有些并没有被实现,直到Android2.3(API...
  • ggGavin
  • ggGavin
  • 2013-11-07 22:21
  • 910

Android传感器概述(三)

传感器框架 通过使用Android框架,你能够访问这些传感器,并获取原始的传感器数据。传感器框架是android.hardware包的一部分,并且包括以下类和接口: 1.  SensorManager 使用这个类来创建一个传感器服务的实例。这个类提供了各种用于访问和监听传感...
  • ggGavin
  • ggGavin
  • 2013-11-07 22:19
  • 886

Android传感器(六):光传感器

采用之前建好的BaseActivity 初始化传感器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC...
  • d276031034
  • d276031034
  • 2016-06-17 14:36
  • 369

Android传感器概述(五)

识别传感器和传感器能力 Android传感器框架提供了几个方法,这些方法让你在运行时能够容易判断设备上的传感器。API还提供了几个让你判断每个传感器能力的方法,如最大范围、识别率、功率需求等。 要识别设备上的传感器,首先需要获得一个引用传感器服务。通过调用getSystemService()方法...
  • ggGavin
  • ggGavin
  • 2013-11-07 22:21
  • 991

Android传感器概述(二)

传感器介绍 Android传感器框架能够让你访问多种类型的传感器。其中某些传感器是基于硬件的,有些传感器是基于软件的。基于硬件的传感器是内置与手持或平板设备中的物理组件。它们通过直接测量特定的环境属性来获取数据,如加速度、磁场强或角度的变化等。基于软件的传感器不是物理设备,尽管它们模拟基于硬件的传...
  • ggGavin
  • ggGavin
  • 2013-11-07 22:14
  • 1031

Android的传感器应用

在Android中开发传感器十分简单,只需下面三步: 1、调用Context的getSystemService(Context.SENSOR_SERVICE)方法获得传感器管理服务(SensorManager)。 2、调用SensorManager的getDefaultSensor(int ty...
  • u010142437
  • u010142437
  • 2013-07-19 00:42
  • 3484
    个人资料
    • 访问:6119次
    • 积分:85
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:9篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档