Android提供了对设备传感器的支持,只要Android设备的硬件提供了这些传感器,Android应用可以通过传感器 来获取设备的外界条件,包括手机的运行状态、当前摆放的方向等。Android系统还提供了驱动程序去管理这些传感器硬件,可以通过监听器的方式监听传感 器硬件感知到的外部环境的变化。本篇博客主要讲解如何简单的使用Android下的传感器,最后将以一个简单的Demo演示。

开发传感器应用步骤

   开发一个对于传感器支持的应用十分简单,开发人员只要在传感器管理器SensorManager中为所要监听的传感器指定一个监听器即可,当外部环境发 生变化的时候,Android系统会通过传感器获取外部环境的数据,然后将数据传递给监听器的监听回调方法。具体步骤如下:

  1. 获取传感器服务。
  2. 从传感器服务中获取到指定类型的传感器。
  3. 使用传感器服务添加传感器的监听器。
  4. 在使用完之后,注销传感器的监听器。

获取传感器服务

   Android中内置了很多系统级的服务,用于给开发人员使用,而传感器也是通过传感器服务,SensorManager来管理的。而在Android 组件中获取系统服务,使用方法Context.getSystemService(String)即可,它的参数均以static final的方式定义在Context中,而获取SensorManager需要传入Context.SENSOR_SERVICE。

manager=(SensorManager) getSystemService(SENSOR_SERVICE);

从传感器服务中获取到指定类型的传感器

  传感器服务管理设备上所有的传感器,所以需要指定待监听的传感器。获取待监听的传感器,需要使用SensorManager.getDefaultSensor()方法,它的完整签名如下:

    Sensor getDefaultSensor(int type)

   Android中的传感器需要Sensor支持,getDefaultSensor()方法通过指定的type参数获取到相对应的传感器。type参数 被以static final的方式定义在Sensor内部,方便开发人员可以直接使用。下面介绍几个常用传感器的type:

  • Sensor.TYPE_ORIENTATION:方向传感器。
  • Sensor.TYPE_ACCELEROMETER:重力传感器。
  • Sensor.TYPE_LIGHT:光线传感器。
  • Sensor.TYPE_MAGNETIC_FIELD:磁场传感器。

使用传感器服务添加传感器的监听器

   获得SensorManager和Sensor对象之后,就可以为其Sensor注册监听器了。为传感器注册监听器,使用 SensorManager.registerListener()方法即可,它存在多个重载方法,但是有些方法已经过时了,下面提供一个常用的方法的签 名:

    boolean registerListener(SensorEventListener listener,Sensor sensor,int rateUs)

  上面方法参数的意义:listener:传感器的监听器、sensor:待监听的传感器、rateUs:传感器的采样率。

  从registerListener()方法可以看出,它需要传递一个SensorEventListener对象,它就是传感器的监听器,其中包含两个方法,需要开发人员去实现它:

  • void onAccuracyChanged(Sensor sensor,int accuracy):当传感器精度发生变化时回调。
  • void onSensorChanged(SensorEvent event):当传感器感应的值发生变化时回调。

  对于上面两个方法,传感器的精度一般是不会发生改变的,所以我们一般主要的代码量在onSensorChanged()中。

  registerListener()方法还有一个rateUs的参数,它表示监听传感器改变的采样率,就是从传感器获取值的频率。它被定义以static final的形式定义在SensorManager中,方便我们直接使用,它定义了如下几个选项:

  • SensorManager.SENSOR_DELAY_FASTEST:最快,延迟最小。
  • SensorManager.SENSOR_DELAY_GAME:适合游戏的频率。
  • SensorManager.SENSOR_DELAY_NORMAL:正常频率。
  • SensorManager.SENSOR_DELAY_UI:适合普通用户界面UI变化的频率。

   Android为我们提供了这几个采样率的参数,方便我们使用。但对于选择那种采样率而言,并不是越快越好,要参照实际开发的应用的情况来说,采样率越 大,将越耗费资源,包括电量、CPU等,所以要根据实际情况选择,毕竟再强大的应用,如果造成设备续航能力的降低,也是会被用户所不喜的。

在使用完之后,注销传感器的监听器

   当使用完传感器之后,需要为其注销监听器,因为传感器的监听器并不会因为应用的结束而自行释放资源,需要开发人员在适当的时候主动注销。注销传感器监听 器使用SensorManager.unregisterListener()方法即可,和监听器的注册方法一样,它也具有多个重载的方法,但是有一些已 经被弃用了,下面介绍一个常用的完整签名:

    void unregisterListener(SensorEventListener listener)

[Android Pro] Android--Sensor传感器的更多相关文章

  1. [Android Pro] Android开发实践:自定义ViewGroup的onLayout()分析

    reference to : http://www.linuxidc.com/Linux/2014-12/110165.htm 前一篇文章主要讲了自定义View为什么要重载onMeasure()方法( ...

  2. [Android Pro] Android开发实践:为什么要继承onMeasure()

    reference to : http://www.linuxidc.com/Linux/2014-12/110164.htm Android开 发中偶尔会用到自定义View,一般情况下,自定义Vie ...

  3. [Android Pro] android 4.4 Android原生权限管理:AppOps

    reference : http://m.blog.csdn.net/blog/langzxz/45308199 reference : http://blog.csdn.net/hyhyl1990/ ...

  4. [Android Pro] Android 4.1 使用 Accessibility实现免Root自动批量安装功能

    reference to  :  http://www.infoq.com/cn/articles/android-accessibility-installing?utm_campaign=info ...

  5. [Android Pro] Android 4.3 NotificationListenerService使用详解

    reference to : http://blog.csdn.net/yihongyuelan/article/details/40977323 概况 Android在4.3的版本中(即API 18 ...

  6. [Android Pro] Android签名与认证详细分析之二(CERT.RSA剖析)

    转载自: http://www.thinksaas.cn/group/topic/335449/ http://blog.csdn.net/u010571535/article/details/899 ...

  7. [Android Pro] android 杀死进程的方法

    1: 杀死自己进程的方法 android.os.Process.killProcess(Process.myPid()); 2:杀死别人进程的方法(不能杀死自己) -------a: activity ...

  8. [Android Pro] Android权限设置android.permission完整列表

    android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问"properties”表在checkin数据库中,改值可以修改上传( Allows re ...

  9. [Android Pro] Android的Animation之LayoutAnimation使用方法

    用于为一个里面的控件,或者是一个里面的控件设置动画效果,可以在文件中设置,亦可以在代码中设置. 一种直接在XML文件中设置 1.  在res/anim文件夹下新建一个XML文件,名为list_anim ...

  10. [Android Pro] android中permission_group与permisson区别、作用

    转载:http://blog.csdn.net/feng88724/article/details/6409313 其实Android在定义 permission 时, 为每个Permission都进 ...

随机推荐

  1. js对小数的操作

    1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math.round(7/2) 4, ...

  2. cordova 使用WKWebView 适配iphoneX及解决不能拨打电话问题

    先安装插件 cordova-plugin-wkwebview-engine 然后修改插件中CDVWKWebViewEngine.m文件,下面是全部代码,修改部分已经进行注释     /* Licens ...

  3. 洛谷P1726 上白泽慧音 [Tarjan]

    题目传送门 上白泽慧音 题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村 ...

  4. GETATTR,DELATTR,SETATTR与GETITEM,SETITEM,DELITEM区别

    通过对象.属性的方式触发的是__getattr__,__delattr__,__setattr__ 通过对象['属性']触发__getitem__,__setitem__,__delitem__ cl ...

  5. python升级带来的yum异常:File "/usr/bin/yum", line 30

    问题: $ yum File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxError: invalid ...

  6. AFF镜像工具集afflib-tools

    AFF镜像工具集afflib-tools   Advanced Forensic Format(AFF)是一种开源免费的磁盘镜像格式.作为磁盘数字取证的三大格式之一,AFF提供数字取证的各项功能,如签 ...

  7. PlayMaker GUI的Normalized

    PlayMaker GUI的Normalized   在PlayMaker的GUI设置中,开发者可以通过Left.Top设置控件元素的起始点位置,通过Width.Height设置控件的大小.考虑到用户 ...

  8. python 三级菜单 的另1种实现方法

    menu = { "华南":{ "广东":["广州市","佛山市","深圳市","东莞市& ...

  9. 高并发编程之ReentrantLock

    上文学习jvm提供的同步方法synchronized的用法,一些常见的业务类型以及一道以前阿里的面试题,从中学习到了一些并发编程的一些规则以及建议,本文主要学习jdk提供的同步方法reentrantL ...

  10. SPOJDRUIDEOI - Fata7y Ya Warda!【单调栈】

    题目链接[http://www.spoj.com/problems/DRUIDEOI/en/] 题意:给出n个数,从1到n围城一个环(1和n相连),求每个数左边第一个比他大的第一个下标,右边第一个比他 ...