下载文章
在搭载英特尔® 凌动™ 处理器的 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; |
006 |
import java.util.Map; |
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<Sensor> 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); |