Android特色开发之传感器分析

发布时间:2011-02-28 阅读量:1520 来源: 发布人:

中心议题:
    * 传感器的定义
    * 传感器的种类
    * Android中传感器的种类
    * Android 中传感器的功能

Android  是一个面向应用程序开发的丰富平台,它拥有许多具有吸引力的用户界面元素、数据管理和网络应用等优秀的功能。Android 还提供了很多颇具特色的接口。本文我们将分别介绍这些吸引开发者眼球的特色开发,主要包括:传感器系统(Sensor)、语音识别技术 (RecognizerIntent)、Google Map和用来开发桌面的插件(Widget)。通过本文的学习,读者将对Android有一个更深入的了解,可以开发出一些有特色、有创意的应用程序。

据调查,2008年全球传感器销售额为506亿美元,预计到2010年全球传感器销售额可达600亿美元以上。调查显示,东欧、亚太区和加拿大成为传感器市场增长最快的地区,而美国、德国、日本依旧是传感器市场分布最大的地区。就世界范围而言,传感器市场增长最快的领域依旧是汽车,占第二位的是过程控制,当然现在也被广泛应用于通信。那么,传感器的定义是什么呢?有哪些种类的传感器呢?Android中提供了哪些传感器呢?

1.传感器的定义

传感器是一种物理装置或生物器官,能够探测、感受外界的信号、物理条件(如光、热、湿度)或化学组成(如烟雾),并将探知的信息传递给其他装置或器官。国家标准GB7665—87对传感器的定义是:“能感受规定的被测量并按照一定的规律转换成可用信号的器件或装置,通常由敏感元件和转换元件组成”。传感器是一种检测装置,能感受被测量的信息,并能将检测的感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。它是实现自动检测和自动控制的首要环节。

2.传感器的种类

可以从不同的角度对传感器进行分类:转换原理(传感器工作的基本物理或化学效应);用途;输出信号类型以及制作材料和工艺等。

根据工作原理,传感器可分为物理传感器和化学传感器两大类。

物理传感器应用的是物理效应,诸如压电效应,磁致伸缩现象,离化、极化、热电、光电、磁电等效应。被测信号量的微小变化都将转换成电信号。

化学传感器包括那些以化学吸附、电化学反应等现象为因果关系的传感器,被测信号量的微小变化也将转换成电信号。

大多数传感器是以物理原理为基础运作的。化学传感器的技术问题较多,例如可靠性问题、规模生产的可能性、价格问题等,解决了这些问题,化学传感器的应用将会有巨大增长。而有些传感器既不能划分为物理类,也不能划分为化学类。

3.Android中传感器的种类

Google Android操作系统中内置了很多传感器,比如G1自带了一个非常实用的加速感应器(微型陀螺仪),有了它,G1手机就支持重力感应、方向判断等功能,在部分游戏或软件中可以自动识别屏幕的横屏、竖屏方向来改变屏幕显示布局。下面是Android中支持的几种传感器:

Sensor.TYPE_ACCELEROMETER:加速度传感器。

Sensor.TYPE_GYROSCOPE:陀螺仪传感器。

Sensor.TYPE_LIGHT:亮度传感器。

Sensor.TYPE_MAGNETIC_FIELD:地磁传感器。

Sensor.TYPE_ORIENTATION:方向传感器。

Sensor.TYPE_PRESSURE:压力传感器。

Sensor.TYPE_PROXIMITY:近程传感器。

Sensor.TYPE_TEMPERATURE:温度传感器。

 

 



4.Android 中传感器的功能

要在Android中使用传感器,首先需要了解SensorManager和SensorEventListener。顾名思义,SensorManager就是所有传感器的一个综合管理类,包括了传感器的种类、采样率、精准度等。我们可以通过getSystemService 方法来取得一个SensorManager对象。代码如下:

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

取得SensorManager对象之后,可以通过getSensorList方法来获得我们需要的传感器类型,保存到一个传感器列表中。通过如下代码可以得到一个方向传感器:

List sensors = mSensorManager.getSensorList(Sensor.TYPE_ORIENTATION);

要与 传感器 交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。 Android 中提供了registerListener来注册一个传感器,并提供了unregisterListener来卸载一个传感器。registerListener方法包括3个参数:第1个参数,接收信号的 Listener实例;第2个参数,想接收的传感器类型的列表(即上一步创建的List对象);第3个参数,接收频度。调用之后返回一个布尔值,true表示成功,false表示失败。当然,之后不再使用时,我们还需要卸载。代码如下:

  //注册传感器
  Boolean mRegisteredSensor = mSensorManager.registerListener(this, sensor,
  SensorManager.SENSOR_DELAY_FASTEST);
  //卸载传感器
  mSensorManager.unregisterListener(this);
其中,SensorEventListener是使用传感器的核心部分,包括以下两个方法必须实现:
onSensorChanged (SensorEvent event) 方法在传感器值更改时调用。该方法只由受此应用程序监视的传感器调用。该方法的参数包括一个SensorEvent对象,该对象主要包括一组浮点数,表示传感器获得的方向、加速度等信息。例如,以下代码可以取得其值:

  float x = event.values[SensorManager.DATA_X];
  float y = event.values[SensorManager.DATA_Y];
  float z = event.values[SensorManager.DATA_Z];
onACCuracyChanged (Sensor sensor,int accuracy) 方法在传感器的精准度发生改变时调用。其参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。

具体实现如代码清单1所示。

代码清单1 Examples_09_01SRCcomyarinandroidExamples_09_01Activity01.java

  publIC class Activity01 extends Activity implements SensorEventListener
  {
  private boolean mRegisteredSensor;
  //定义SensorManager
  private SensorManager mSensorManager;
  public void onCreate(Bundle savedInstanceState)
  {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  mRegisteredSensor = false;
  //取得SensorManager实例
  mSensorManager = (SensorManager) getSystEMService(SENSOR_SERVICE);
  }
  protected void onResume()
  {
  super.onResume();
  //接收SensorManager的一个列表(Listener)
  //这里我们指定类型为TYPE_ORIENTATION(方向传感器)
  List sensors = mSensorManager.getSensorList
  (Sensor.TYPE_ORIENTATION);
  if (sensors.size() > 0)
  {
  Sensor sensor = sensors.get(0);
  //注册SensorManager
  //this->接收sensor的实例
  //接收传感器类型的列表
  //接收的频率
  mRegisteredSensor = mSensorManager.registerListener(this,
  sensor, SensorManager.SENSOR_DELAY_FASTEST);
  }
  }
  protected void onPause()
  {
  if (mRegisteredSensor)
  {
  //如果调用了registerListener
  //这里我们需要unregisterListener来卸载/取消注册
    mSensorManager.unregisterListener(this);
  mRegisteredSensor = false;
  }
  super.onPause();
  }
  //当精准度发生改变时
  //sensor-> 传感器
  //aCCuracy->精准度
  publIC void onAccuracyChanged(Sensor sensor, int accuracy)
  {

 

 



  //处理精准度改变
  }
  // 当传感器在被改变时触发
  public void onSensorChanged(SensorEvent event)
  {
  // 接收方向传感器的类型
  if (event.sensor.getType() == Sensor.TYPE_ORIENTATION)
  {
  //这里我们可以得到数据,然后根据需要来处理
  //由于模拟器上面无法测试效果,因此我们暂时不处理数据
  float x = event.values[SensorManager.DATA_X];
  float y = event.values[SensorManager.DATA_Y];
  float z = event.values[SensorManager.DATA_Z];
  }
  }
  }
上面的例子中演示了如何获得方向传感器的方向、加速度等信息,我们可以根据得到的数值与上一次得到的数值之间的关系来进行需要的操作。SensorManager中还有很多常量和一些常用的方法,如下:

  getDefaultSensor:得到默认的传感器对象。
  getInclination:得到地磁传感器倾斜角的弧度值。
  getOrientation:得到设备旋转的方向。
    getSensorList:得到指定传感器的列表。
 

相关资讯
CIS芯片龙头年报解读:格科微高像素战略如何实现287%净利增长

格科微电子(688728.SH)2024年度财务报告显示,公司年度营收突破63.83亿元人民币,实现35.9%的同比增幅,归母净利润呈几何级增长达1.87亿元,EBITDA指标跃升107.13%至14.15亿元。这种爆发式增长源自其在CMOS图像传感器(CIS)领域实施的"技术锚定+场景穿透"双轮驱动战略,特别是在高像素产品矩阵构建和新兴应用市场开拓方面取得突破性进展。

RS2604 vs 传统保险丝:技术迭代下的安全与效率革命

RS2604作为一款高集成度、可配置OVP(过压保护)和OCP(过流保护)的eFuse开关,专为12V24V母线电压接口设计,兼顾热插拔保护与动态负载管理。其输入电压覆盖4.5V40V,极限耐压高达45V,适用于工业设备、汽车电子及消费电子领域。通过外部电阻灵活设置350mA至2.5A的限流值,结合±7%高精度电流检测,RS2604在安全性与能效间实现平衡,成为复杂电源系统的核心保护方案。

全球汽车芯片市场遇冷,恩智浦如何守住56%毛利率防线?

荷兰半导体巨头恩智浦于2025年4月28日披露的财报显示,公司第一季度营收28.35亿美元,同比、环比均下滑9%,但略超市场预期。在汽车、工业与物联网等核心业务需求疲软的背景下,Non-GAAP毛利率同比下降2.1个百分点至56.1%,自由现金流则维持在4.27亿美元,突显其成本控制能力。值得关注的是,管理层对第二季度营收指引中值(29亿美元)释放出环比复苏信号,但关税政策的不确定性仍为业绩蒙上阴影。

全闪存与软件定义双轮驱动——中国存储产业年度趋势报告

根据IDC最新发布的企业级存储市场追踪数据,2024年中国存储产业迎来结构性增长拐点。全年市场规模达69.2亿美元,在全球市场占比提升至22%,展现出强劲复苏态势。以浪潮信息为代表的国内厂商持续突破,在销售额(10.9%)和出货量(11.2%)两大核心指标上均跻身市场前两强,标志着本土存储生态的成熟度显著提升。

索尼启动半导体业务战略重组 图像传感器龙头或迎资本化新篇章

全球消费电子巨头索尼集团近期被曝正酝酿重大战略调整。据彭博社援引多位知情人士透露,该集团拟对旗下核心半导体资产——索尼半导体解决方案公司(SSS)实施部分分拆,计划于2023年内推动该子公司在东京证券交易所独立IPO。该决策标志着索尼在半导体产业布局进入新阶段,同时也预示着全球图像传感器市场格局或将发生重要变化。