在搭载英特尔® 凌动™ 处理器的 Android* 手机和平板电脑上开发传感器应用

作者:杜伟 (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 显示了一列可用的传感器,以及每个传感器的厂商、功耗和精度信息。

    
001package com.intel.deviceinfo;
002     
003import java.util.ArrayList;
004import java.util.HashMap;
005import java.util.List;
006import java.util.Map;
007 
008import android.app.Fragment;
009import android.content.Context;
010import android.hardware.Sensor;
011import android.hardware.SensorManager;
012import android.os.Bundle;
013import android.view.LayoutInflater;
014import android.view.View;
015import android.view.ViewGroup;
016import android.widget.AdapterView;
017import android.widget.AdapterView.OnItemClickListener;
018import android.widget.ListView;
019import android.widget.SimpleAdapter;
020     
021public class SensorInfoFragment extends Fragment {
022     
023    private View mContentView;
024     
025    private ListView mSensorInfoList;  
026    SimpleAdapter mSensorInfoListAdapter;
027     
028    private List mSensorList;
029 
030    private SensorManager mSensorManager;
031     
032    @Override
033    public void onActivityCreated(Bundle savedInstanceState) {
034        super.onActivityCreated(savedInstanceState);
035    }
036     
037    @Override
038    public void onPause()
039    {
040        super.onPause();
041    }
042     
043    @Override
044    public void onResume()
045    {
046        super.onResume();
047    }
048     
049    @Override
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);
054     
055        mSensorManager = (SensorManager)getActivity().getSystemService(Context.SENSOR_SERVICE);
056     
057        mSensorInfoList = (ListView)mContentView.findViewById(R.id.listSensorInfo);
058         
059        mSensorInfoList.setOnItemClickListener( new OnItemClickListener() {
060             
061            @Override
062            public void onItemClick(AdapterView arg0, View view, int index, long arg3) {
063                 
064                // with the index, figure out what sensor was pressed
065                Sensor sensor = mSensorList.get(index);
066                 
067                // pass the sensor to the dialog.
068                SensorDialog dialog = new SensorDialog(getActivity(), sensor);
069 
070                dialog.setContentView(R.layout.sensor_display);
071                


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部