作者:杜伟 (Intel)
下载文章
在搭载英特尔® 凌动™ 处理器的 Android* 手机和平板电脑上开发传感器应用 [PDF 607KB]
在搭载英特尔® 凌动™ 处理器的 Android* 手机和平板电脑上开发传感器应用
本指南将为应用开发人员介绍 Android 传感器框架和讨论如何使用一些通常在搭载英特尔® 凌动™ 处理器的手机和平板电脑上提供的传感器。 包含在本讨论之列的有运动、位置和环境传感器。 按照 Android 框架的规定, GPS 未被严格视为一种传感器,尽管如此,本指南也会讨论基于 GPS 的位置服务。 本指南中的讨论以 Android 4.2 — Jelly Bean 为基础。
搭载英特尔® 凌动™ 处理器的 Android* 手机和平板电脑上的传感器
搭载英特尔凌动处理器的 Android 手机和平板电脑可以支持各种不同的硬件传感器。 这些传感器被用于检测运动和位置改变,以及报告周围环境参数。 图 1 中的方块图显示了在一个搭载英特尔凌动处理器的标准 Android 设备上可能会用到的传感器配置。

图 1. 搭载英特尔® 凌动™ 处理器的 Android 系统上的传感器
根据它们报告的数据,我们可以将 Android 传感器分成表 1 中所示的类和类型。
| 运动传感器 | 加速计 (TYPE_ACCELEROMETER) | 测量一台设备的加速度,按 m/s2 | 运动检测 |
陀螺仪 (TYPE_GYROSCOPE) | 测量一台设备的旋转速度 | 旋转检测 |
| 位置传感器 | 磁力计 (TYPE_MAGNETIC_FIELD) | 测量地球的地磁场强度,按 µT | 罗盘 |
距离 (TYPE_PROXIMITY) | 测量一个物体的距离,按 cm | 附近物体检测 |
GPS (不属于 android.hardware.Sensor 的类型) | 获得设备准确的地理位置 | 准确的地理位置检测 |
| 环境传感器 | ALS (TYPE_LIGHT) | 测量环境光线等级,按 lx | 自动屏幕亮度控制 |
| 气压计 | 测量周围空气压力,按 mbar | 高度检测 |
表 1. Android 平台支持的传感器类型
Android 传感器框架
Android 传感器框架提供了可以访问传感器和传感器数据的机制,而作为例外的 GPS 则可以通过 Android 位置服务进行访问。 我们稍后将在本文中讨论该问题。 本传感器框架是 android 硬件包的一部分。 表 2 列出了传感器框架的主类和接口。
| 姓名 | 类型 | 描述 |
|---|
| SensorManager | 类 | 用于创建一个传感器服务的实例。 提供各种方法访问传感器、注册和注销传感器事件侦听器等等。 |
| 传感器 | 类 | 用于创建一个特定传感器的实例。 |
| SensorEvent | 类 | 系统在公布传感器数据时会用到该类。 包含原始传感器数据值、传感器类型、数据精度和一个时间戳。 |
| SensorEventListener | 接口 | 提供回调方法,在传感器数据或传感器精度改变的情况下从 SensorManager 接收通知。 |
表 2. Android 平台传感器框架
获取传感器配置
设备制造商决定设备上提供什么传感器。 您必须使用一个参数“Sensor.TYPE_ALL”调用传感器框架的 SensorManager getSensorList() 方法查看有哪些传感器在运行时可用。 代码示例 1 显示了一列可用的传感器,以及每个传感器的厂商、功耗和精度信息。
001 | package com.intel.deviceinfo; |
003 | import java.util.ArrayList; |
004 | import java.util.HashMap; |
005 | import java.util.List; |
008 | import android.app.Fragment; |
009 | import android.content.Context; |
010 | import android.hardware.Sensor; |
011 | import android.hardware.SensorManager; |
012 | import android.os.Bundle; |
013 | import android.view.LayoutInflater; |
014 | import android.view.View; |
015 | import android.view.ViewGroup; |
016 | import android.widget.AdapterView; |
017 | import android.widget.AdapterView.OnItemClickListener; |
018 | import android.widget.ListView; |
019 | import android.widget.SimpleAdapter; |
021 | public class SensorInfoFragment extends Fragment { |
023 | private View mContentView; |
025 | private ListView mSensorInfoList; |
026 | SimpleAdapter mSensorInfoListAdapter; |
028 | private List mSensorList; |
030 | private SensorManager mSensorManager; |
033 | public void onActivityCreated(Bundle savedInstanceState) { |
034 | super.onActivityCreated(savedInstanceState); |
038 | public void onPause() |
044 | public void onResume() |
050 | public View onCreateView(LayoutInflater inflater, ViewGroup container, |
051 | Bundle savedInstanceState) { |
052 | mContentView = inflater.inflate(R.layout.content_sensorinfo_main, null); |
053 | mContentView.setDrawingCacheEnabled(false); |
055 | mSensorManager = (SensorManager)getActivity().getSystemService(Context.SENSOR_SERVICE); |
057 | mSensorInfoList = (ListView)mContentView.findViewById(R.id.listSensorInfo); |
059 | mSensorInfoList.setOnItemClickListener( new OnItemClickListener() { |
062 | public void onItemClick(AdapterView> arg0, View view, int index, long arg3) { |
065 | Sensor sensor = mSensorList.get(index); |
068 | SensorDialog dialog = new SensorDialog(getActivity(), sensor); |
070 | dialog.setContentView(R.layout.sensor_display); |
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!