安卓开发-传感器信息采集

表 1.. Android 平台支持的运动传感器。

参考API 文档:http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_GYROSCOPE

传感器 传感器事件数据 说明 测量单位
TYPE_ACCELEROMETER SensorEvent.values[0] 沿 x 轴的加速度(包括重力)。 m/s2
SensorEvent.values[1] 沿 y 轴的加速度(包括重力)。
SensorEvent.values[2] 沿 z 轴的加速度(包括重力)。
TYPE_GRAVITY SensorEvent.values[0] 沿 x 轴的重力加速度。 m/s2
SensorEvent.values[1] 沿 y 轴的重力加速度。
SensorEvent.values[2] 沿 z 轴的重力加速度。
TYPE_GYROSCOPE SensorEvent.values[0] 围绕 x 轴的旋转角速度。 rad/s
SensorEvent.values[1] 围绕 y 轴的旋转角速度。
SensorEvent.values[2] 围绕 z 轴的旋转角速度。
TYPE_LINEAR_ACCELERATION SensorEvent.values[0]] 沿 x 轴的加速度(不包括重力)。 m/s2
SensorEvent.values[1] 沿 y 轴的加速度(不包括重力)。
SensorEvent.values[2] 沿 z 轴的加速度(不包括重力)。
TYPE_ROTATION_VECTOR SensorEvent.values[0]] 旋转向量沿 x 轴的部分(x * sin(θ/2))。 无无
SensorEvent.values[1] 旋转向量沿 y 轴的部分(y * sin(θ/2))。
SensorEvent.values[2]] 旋转向量沿 z 轴的部分(z * sin(θ/2))。
SensorEvent.values[3]] 旋转向量的数值部分((cos(θ/2))1

1 数值部分是可选的。

在Android2.3 gingerbread系统中,google提供了11种传感器供应用层使用。

 1 #define SENSOR_TYPE_ACCELEROMETER       1 //加速度
 2 #define SENSOR_TYPE_MAGNETIC_FIELD      2 //磁力
 3 #define SENSOR_TYPE_ORIENTATION         3 //方向
 4 #define SENSOR_TYPE_GYROSCOPE           4 //陀螺仪
 5 #define SENSOR_TYPE_LIGHT               5 //光线感应
 6 #define SENSOR_TYPE_PRESSURE            6 //压力
 7 #define SENSOR_TYPE_TEMPERATURE         7 //温度
 8 #define SENSOR_TYPE_PROXIMITY           8 //接近
 9 #define SENSOR_TYPE_GRAVITY             9 //重力
10 #define SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度
11 #define SENSOR_TYPE_ROTATION_VECTOR     11//旋转矢量

图 1. 旋转向量传感器的坐标系。

关键类和接口

  1. Sensor
  2. SensorEvent
  3. SensorManager
  4. SensorEventListener

在Android中开发传感器十分简单,只需下面三步:

1、调用Context的getSystemService(Context.SENSOR_SERVICE)方法获得传感器管理服务(SensorManager)。

2、调用SensorManager的getDefaultSensor(int type)方法获取指定类型的传感器。

3、一般在onResume()方法中调用SensorManager的registerListener(SensorEventListener listener,Sensor sensor,int rate)注册监听器.该方法三个参数说明如下:

listener:监听传感器事件的监听器。该监听器需要实现SensorEventListener接口。

sensor:传感器对象。

rate:指定获取传感器数据的频率。支持以下几种频率值:

下面演示加速度传感器应用,分别以真机和模拟器两种方式测试,两种方式略有差别。

真机:

Activity:

[java] view plaincopy

  1.  1 package com.home;
     2
     3 import android.app.Activity;
     4 import android.content.Context;
     5 import android.hardware.Sensor;
     6 import android.hardware.SensorEvent;
     7 import android.hardware.SensorEventListener;
     8 import android.hardware.SensorManager;
     9 import android.os.Bundle;
    10 import android.widget.TextView;
    11
    12 public class AccelerometerActivity extends Activity implements
    13         SensorEventListener {
    14     // 定义系统的传感器管理服务
    15     private SensorManager sensorManager;
    16     private TextView showText;
    17
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         super.onCreate(savedInstanceState);
    21         setContentView(R.layout.main);
    22         showText = (TextView) findViewById(R.id.main_tv_show);
    23         // 获取系统的传感器管理服务
    24         sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    25     }
    26
    27     @Override
    28     protected void onResume() {
    29         super.onResume();
    30         // 为系统的加速度传感器注册监听器
    31         sensorManager.registerListener(this,
    32                 sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
    33                 SensorManager.SENSOR_DELAY_GAME);
    34     }
    35
    36     @Override
    37     protected void onStop() {
    38         // 取消注册
    39         sensorManager.unregisterListener(this);
    40         super.onStop();
    41     }
    42
    43     // 当传感器精度改变时回调该方法
    44     @Override
    45     public void onAccuracyChanged(Sensor sensor, int accuracy) {
    46     }
    47
    48     // 当传感器的值发生改变时回调该方法
    49     @Override
    50     public void onSensorChanged(SensorEvent event) {
    51         if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
    52             float[] values = event.values;
    53             StringBuffer sb = new StringBuffer();
    54             sb.append("X轴上的加速度:" + values[0] + "\n");
    55             sb.append("Y轴上的加速度:" + values[1] + "\n");
    56             sb.append("Z轴上的加速度:" + values[2] + "\n");
    57             showText.setText(sb.toString());
    58         }
    59     }
    60
    61 }  

布局文件只有一个TextView,在此省略。

时间: 2024-08-01 14:15:03

安卓开发-传感器信息采集的相关文章

安卓开发_慕课网_百度地图_实现方向传感器

学习内容来自“慕课网” 这里学习百度地图方向传感器功能 就是当转动手机的时候,地图上显示个人所在位置的图标的箭头变动 学习接自前两篇 安卓开发_慕课网_百度地图 安卓开发_慕课网_百度地图_实现定位 思路: 传感器随着定位的开始而开启,随着定位的结束而结束 传感器获得位置的移动而更新方向 代码在前两篇的基础上修改 一.讲原本坐标的图标改成箭头图标 二.引入方向传感器 首先增添MainActivity.java中的自定义图标和方向传感器代码 看红色字体的部分 1 package com.examp

安卓开发中的重力感应传感器

安卓开发中拥有多种传感器,google提供了11种传感器供应用层使用:加速度.磁力.方向.陀螺仪.光线.压力(返回当前压强).温度.接近(检测物体与手机的距离).重力.线性加速度和旋转矢量.     在使用传感器之前,需要将工程中的类接口到SensorEventListener,接口后会有两个重载方法来进行监听,并取得感应检测Sensor状态.其中onAccuracyChanged()方法在感应检测到Sensor的精密度有变化时被调用,onSensorChanged()方法是在感应检测到Sens

安卓开发_慕课网_百度地图_添加覆盖物

学习内容来自“慕课网” 本片学习内容接自前四篇基础 安卓开发_慕课网_百度地图 安卓开发_慕课网_百度地图_实现定位 安卓开发_慕课网_百度地图_实现方向传感器 安卓开发_慕课网_百度地图_实现模式转换 请先学习前4篇再学习本篇,因为本篇在前四篇的基础上进行代码的编写 一.新建一个类用来存放数据(距离,点赞数,介绍图等信息) 1 package com.example.map; 2 3 import java.io.Serializable; 4 import java.util.ArrayLi

安卓开发基础知识4(三星 、ARM 为大朋背书,详解VR一体机解决方案)

需求说明:安卓开发 内容       :第一部分  大朋VR一体机方案                   第二部分  三星VR一体机方案 来自       :时间的诗 原文:http://www.ithome.com/html/it/235838.htm 第一部分 大朋VR一体机 大朋VR作为国内领先的虚拟现实企业,今年又率先推出全球首款可量产的VR一体机,短短两年,业界声望.市场地位持续飙升.除却战略和团队的因素之外,背后理所当然存在不少为其"撑腰"的大咖,其中包括为大朋VR一体机

安卓开发基础知识1(双摄像头安卓手机)

需求说明:安卓开发 内容       :双摄像头安卓手机调研 来自       :时间的诗 原文:http://mobile.163.com/16/0301/06/BH28BP9I001117A8_all.html# 有一句老话叫"人往高处走,水往低处流",世事万变,很多东西都在朝着更高一级的方向发展.手机行业也是如此,层出不穷的技术,让我们的智能机机身更薄.性能更强.功能更丰富等等,而时下非常火热的手机拍照也是被广大厂商所重视,摄像头像素越来越高,光学防抖.相位对焦等技术相继应用其中

安卓开发_慕课网_百度地图_实现模式转换

学习内容来自“慕课网” 模式转换,即地图的普通模式,罗盘模式,跟随模式之间的转换 学习内容接自前三篇 安卓开发_慕课网_百度地图 安卓开发_慕课网_百度地图_实现定位 安卓开发_慕课网_百度地图_实现方向传感器 一.模式转换通过菜单按钮来控制 所以添加对应的菜单项(红色字体部分) 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" > 2 3 <item 4 android:id=&qu

安卓开发前的准备工作

安卓手机全球市场份额已经接近85%,成为了无处不在无所不能覆盖面最广的手机操作系统,所以我对安卓的学习也充满了信心,它终将成为自己的一技之长. 首先我们对Java和C++已经有了基础性的学习,具备了染指安卓开发的能力.在接触安卓前应该去复习更多的关于Java的知识.安卓的界面布局是跟网页设计差不多还有安卓开发环境的搭载,目前用的最多的是Eclipse,安装eclipse之前要安装一些java的平台 ,在开发的时候要多练习和多问,里面有很多要学的. 在开始前需要具备一些要素: 1.1.JDK安装

Eclipse+ADT+Android SDK 搭建安卓开发环境

要求 必备知识 windows 7 基本操作. 运行环境 windows 7 下载地址 环境下载 最近开接触Android(安卓)嵌入式开发,首要问题是搭建Andoid开发环境,由于本人用的是windows7的笔记本,也就只能到Windows中搭建Android 开发环境了! 就搭建环境都花了比较长的时间, 在各种版本之间折腾了比较久的时间, 装好后SDK包更新又是一个比较大的麻烦(天朝的网络大家懂的--).下面把我的安装过程和经验分享个大家!! 安装JDK 这里可以参考我之前写的一篇关于安装J

安卓开发-设置RadioButton的点击效果

在安卓开发中用到底部菜单栏 需要用到RadioButton这个组件 实际应用的过程中,需要对按钮进行点击,为了让用户知道是否点击可这个按钮,可以设置点击后 ,该按钮的颜色或者背景发生变化. layout中这部分的代码为: 1 <RadioButton 2 android:id="@+id/radio_button0" 3 android:layout_height="fill_parent" 4 android:layout_marginTop="2