[Android Pro] Android--Sensor传感器
Android提供了对设备传感器的支持,只要Android设备的硬件提供了这些传感器,Android应用可以通过传感器 来获取设备的外界条件,包括手机的运行状态、当前摆放的方向等。Android系统还提供了驱动程序去管理这些传感器硬件,可以通过监听器的方式监听传感 器硬件感知到的外部环境的变化。本篇博客主要讲解如何简单的使用Android下的传感器,最后将以一个简单的Demo演示。
开发传感器应用步骤
开发一个对于传感器支持的应用十分简单,开发人员只要在传感器管理器SensorManager中为所要监听的传感器指定一个监听器即可,当外部环境发 生变化的时候,Android系统会通过传感器获取外部环境的数据,然后将数据传递给监听器的监听回调方法。具体步骤如下:
- 获取传感器服务。
- 从传感器服务中获取到指定类型的传感器。
- 使用传感器服务添加传感器的监听器。
- 在使用完之后,注销传感器的监听器。
获取传感器服务
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系统开机画面_Android开机画面
- Android native层实现MediaCodec编码H264/HEVC
- android 混淆规则作用,Android代码混淆详解
- strictmode android,(十三)Android 性能优化 StrictMode
- android studio 导出的jar中没有主清单属性「建议收藏」
- app自动化测试(Android)--App 控件定位
- 【Android应用开发】Android Studio 错误集锦 -- 将所有的 AS 错误集合到本文
- 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )
- 【错误记录】Android Studio 编译报错 ( Error:Connection timed out: connect | 更新配置依赖仓库方式 )
- 【Android Gradle 插件】build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ③ ( 执行 compile-ffmpeg.sh clean 命令 | 下载并配置 android-ndk-r10e )
- 【Android Gradle 插件】DexOptions 配置 ⑤ ( additionalParameters 属性配置 | --minimal-main-dex 参数最小化主 dex 字节码 )
- 【Android Gradle 插件】Gradle 基础配置 ⑤ ( gradle-wrapper.properties 配置分析 | GRADLE_USER_HOME 目录 )
- 安装包立减1M--微信Android资源混淆打包工具
- 谈谈 23 种设计模式在 Android 项目中的应用详解手机开发
- Android开发学习总结——Android开发的一些相关概念详解手机开发
- Android studio开发常用快捷键详解手机开发
- Android Studio 导入项目 出现安装Error:Cause: failed to find target with hash string ‘android-23’ 等错误详解手机开发
- Android中的ProgressBar的android:indeterminate详解手机开发
- android开发,http工具类详解编程语言
- android安装应用程序工具类详解编程语言
- 使用 GSConnect 将 Android 手机连接到 Fedora 系统
- Chromebook 也许很快就能运行所有的 Android 应用
- 基于Android设计模式之--SDK源码之策略模式的详解
- android照相功能的简单实例
- 如何在android中使用html作布局文件