对Android传感器系统全解析
Android是一个灵活、有吸引力的平台,Google的Android 领域发展迅速,并且越来越发展的强大,下面的文章进行全面的介绍Android传感器和报告系统有关的应用程序架构。
应用程序(活动)暂停后,需要注销侦听器,这样以后就不会再收到传感器更新。这通过 SensorManager 的 unregisterListener 方法实现。惟一的参数是 SensorListener 的实例。在 registerListener 和 unregisterListener 方法调用中,应用程序使用关键字 this。注意类定义中的 implements 关键字。
其中声明了该类实现 SensorListener 接口。这就是要将它传递到 registerListener 和 unregisterListener 的原因。SensorListener 必须实现两个方法 onSensorChange 和onAccuracyChanged。示例应用程序不关心传感器的准确度。
但关注传感器当前的 X、Y 和 Z 值。onAccuracyChanged 方法实质上不执行任何操作;它只在每次调用时添加一个日志项。似乎经常需要调用 onSensorChanged 方法,因为加速表和方向传感器正在快速发送数据。查看第一个参数确定哪个传感器在发送数据。
确认了发送数据的传感器之后,将使用方法第二个参数传递的浮点值数组中所包含的数据更新相应的 UI 元素。该示例只是显示这些值,但在更加高级的应用程序中,还可以分析这些值,比较原来的值,或者设置某种模式识别算法来确定用户(或外部环境)的行为。
现在您已经了解了传感器子系统,接下来的部分将回顾一个在Android传感器上录制音频的代码样例。该样例运行在 DEV1 开发设备上。android.media 包包含与媒体子系统交互的类。使用 android.media.MediaRecorder 类进行媒体采样,包括音频和视频。MediaRecorder 作为状态机运行。
您需要设置不同的参数,比如源设备和格式。设置后,可执行任何时间长度的录制,直到用户停止。清单 2 包含的代码在 Android 设备上录制音频。显示的代码不包括应用程序的 UI 元素(完整源代码见 下载)。在 startRecording 方法中,实例化并初始化 MediaRecorder 的实例:
输入源被设置为麦克风(MIC)。输出格式被设置为 3GPP(*.3gp 文件),这是移动设备专用的媒体格式。编码器被设置为 AMR_NB,这是音频格式,采样率为 8 KHz。NB 表示窄频。SDK 文档 解释了不同的数据格式和可用的编码器。
音频文件存储在存储卡而不是内存中。External.getExternalStorageDirectory() 返回存储卡位置的名称,在该目录中将创建一个临时文件名。然后,通过调用 setOutputFile 方法将文件关联到 MediaRecorder 实例。音频数据将存储到该文件中。调用 prepare 方法完成 MediaRecorder 的初始化。
准备开始录制流程时,将调用 start 方法。在调用 stop 方法之前,将对存储卡上的文件进行录制。release 方法将释放分配给 MediaRecorder 实例的资源。在该代码样例中,processaudiofile 方法将音频添加到媒体库。使用 Intent 通知设备上的媒体应用程序有新内容可用。
关于该代码片段最后要注意的是:如果您试用,它一开始不会录制音频。您将看到创建的文件,但是没有任何音频。您需要向 AndroidManifest.xml 文件添加权限。现在,您已经学了一点关于与 Android 传感器和录制音频相关的内容。下一节将更全面的介绍与数据采集和报告系统有关的应用程序架构。