Android传感器---Position Sensor

合集下载

Android传感器HAL头文件sensors.h详细注释

Android传感器HAL头文件sensors.h详细注释

Android传感器HAL头文件sensors.h详细注释/* Android Sensor HAL头文件分析笔记 */#ifndef ANDROID_SENSORS_INTERFACE_H /* 此宏的作用就是避免重复包含此头文件 */#define ANDROID_SENSORS_INTERFACE_H#include <stdint.h>#include <sys/cdefs.h>#include <sys/types.h>#include <hardware/hardware.h>#include <cutils/native_handle.h>/* 定义传感器头文件的版本 */#define SENSORS_HEADER_VERSION 1/* 下面这几个宏定义了传感器API的版本 */#defineSENSORS_MODULE_API_VERSION_0_1 HARDWARE_MODULE_A PI_VERSION(0, 1)#defineSENSORS_DEVICE_API_VERSION_0_1 HARDWARE_DEVICE_API_ VERSION_2(0, 1, SENSORS_HEADER_VERSION)#defineSENSORS_DEVICE_API_VERSION_1_0 HARDWARE_DEVICE_API_ VERSION_2(1, 0, SENSORS_HEADER_VERSION)#defineSENSORS_DEVICE_API_VERSION_1_1 HARDWARE_DEVICE_API_ VERSION_2(1, 1, SENSORS_HEADER_VERSION)#defineSENSORS_DEVICE_API_VERSION_1_2 HARDWARE_DEVICE_API_ VERSION_2(1, 2, SENSORS_HEADER_VERSION)#defineSENSORS_DEVICE_API_VERSION_1_3 HARDWARE_DEVICE_API_ VERSION_2(1, 3, SENSORS_HEADER_VERSION)/*** 有关Android传感器类型的介绍和详细描述,请参考下面的网址,里面有详细的说明.* /devices/sensors/index.html*//* 传感器模块的ID,在写HAL模块时使用 */#define SENSORS_HARDWARE_MODULE_ID "sensors"/* 要打开的传感器设备的名称 */#define SENSORS_HARDWARE_POLL "poll"/*** Handles必须高于SENSORS_HANDLE_BASE,必须是唯一的;* 一个Handle标识给定的传感器. Handle用于启动和/或停用传感器* 在这个版本的API中,只能有256个Handle*/#define SENSORS_HANDLE_BASE 0#define SENSORS_HANDLE_BITS 8#defineSENSORS_HANDLE_COUNT (1<<SENSORS_HANDLE_BITS) /** **** 过时的东东 ****** flags for (*batch)()* Availability: SENSORS_DEVICE_API_VERSION_1_0* see (*batch)() documentation for details.* Deprecated as of SENSORS_DEVICE_API_VERSION_1_3.* WAKE_UP_* sensors replace WAKE_UPON_FIFO_FULL concept.*/enum {SENSORS_BATCH_DRY_RUN = 0x00000001,SENSORS_BATCH_WAKE_UPON_FIFO_FULL = 0x00000002 };/** meta_data_event_t的what字段使用的值*/enum {/* 上一次刷新操作已完成 */META_DATA_FLUSH_COMPLETE = 1,META_DATA_VERSION /* 总是最后一个,保留自动分配 */};/** 关于身体传感器使用的权限(比如,心率监测器).* 有关哪些传感器需要使用此权限,请参阅传感器类型获得更详细信息.*/#define SENSOR_PERMISSION_BODY_SENSORS "android.permission.BODY_SENSORS"/* 下面的枚举值只对"SENSORS_DEVICE_API_VERSION_1_3"版本有效;传感器标志,用于设置sensor_t结构体的flags成员,表示传感器的报告模式 */enum {/** 当数据可用时,传感器是否唤醒处于挂起模式的系统.每当从唤醒传感器传送传感器事件时,* 驱动程序需要持有唤醒锁,直到传感器服务读取事件,即直到下次调用sensors_poll_device_t.poll()函数;* 一旦poll函数再次被调用,这意味着传感器服务已经读取了事件,驱动程序可以安全地释放唤醒锁.* 传感器服务将继续持有唤醒锁,直到应用程序实际读取事件。

Android之Sensor 简介

Android之Sensor 简介
Android 之 Sensor 简介
1.Sensor Type 重力感应/加速度传感器 (G-Sensor) 光感应 (Light-Sensor) 温度感应 方向感应 磁场、 临近性
2.如何实现 Sensor 编程 a.获取系统服务(SENSOR_SERVICE)返回一个 SensorManager 对象 sensormanager = (SensorManager)getSystemSeriver(SENSOR_SERVICE); b.通过 SensorManager 对象获取相应的 Sensor 类型的对象 sensorObject = sensormanager.getDefaultSensor(sensor Type); c.声明一个 SensorEventListener 对象用于侦听 Sensor 事件,并重载
3.关于 G-Sensor Android 加速度传感器的类型是 Sensor.TYPE_ACCELEROMETER 通过 android.hardware.SensorEvent 返回加速度传感器值。 加速度传感器返回值的单位是加速度的单位 m/s^2(米每二次方秒),有三个方向的值分别
是 values[0]: x-axis 方向加速度 values[1]: y-axis 方向加速度 values[2]: z-axis 方向加速度
3.Window7 与 win xp 不同
Window7 下安装 SensorSimulator 的过程同上,但有点不同的地方时 adb 命令 不知道是 Android sdk 路径的问题还是其他的原因,在 Windows 7 下 CMD 命令下 无法执行 adb 命令, 需要找到 adb.exe 的文件路径下执行才可以.
该方法只对受此应用程序监视的传感器调用(更多内容见下文)。该方法的参数包 括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。有些传感器只 提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。

传感器分类及20种常见传感器

传感器分类及20种常见传感器

传感器分类及20种常见传感器目录1.常用传感器的分类 (1)1.1.按被测物理量分类 (1)1.2.按工作的物理基础分类 (2)2. 20种常见的传感器 (2)2. 1. 温度传感器(TemPeratUreSenSor): (2)2. 2. 湿度传感器(HUmidity Sensor) : (2)2. 3. 光敏传感器(Light Sensor): (2)2. 4. 声音传感器(SoUnd Sensor) : (3)2. 5. 压力传感器(PreSSUre Sensor): (3)2. 6. 位移传感器(PoSition Sensor): (3)2. 7.加速度传感器(ACCelerometer): (3)2. 8. 磁感应传感器(MagnetiC Sensor) : (4)2. 9. 接近传感器(ProXirnity Sensor) : (4)2. 10. 电容传感器(CaPaCitiVe Sensor): (4)2. 11. 气体传感器(GaSSenSor): (5)2. 12. 颜色传感器(ColOrSenSor): (6)2. 13. 生物传感器(BiOIogiCaISenSor): (7)2. 14. 速度传感器(SPeedSenSor): (8)2. 15. 重量传感器(WeightSenSor): (9)2. 16. 红外传感器(InfraredSenSor): (9)2. 17. 压敏传感器(PreSSUre-SenSitiVeSenSOr): (10)2. 18.射频识别传感器(RFlD): (11)2. 19. 光电传感器(PhotOdeteCtOr): (13)2. 20.位角传感器(AngUIar Position Sensor): (14)1.常用传感器的分类Ll.按被测物理量分类机械量:长度、厚度、位移、速度、加速度、转数、质量,重量、力、压力、力矩;声:声压、噪声;温度:温度、热量、比热;磁:磁通、磁场;光:亮度、色彩。

Android中传感器Sensor的使用-电脑资料

Android中传感器Sensor的使用-电脑资料

Android中传感器Sensor的使用-电脑资料1.Sensor类型Android中有多种传感器,目前Android SDK支持的传感器有:光线传感器,旋转向量传感器,压力传感器,陀螺仪传感器,加速度传感器,重力传感器,方向传感器,磁场传感器,近程传感器等,。

但并不是所有手机都具有全部传感器,一般高端手机具有大多数传感器,毕竟传感器都需要money的,价格自然不菲。

2.Sensor实际应用那么在Android开发中,如何使用传感器,将传感器功能添加到Android应用中呢,例如微信的摇一摇,通过加速传感器,触发寻找附近的人;例如每次接听电话时,当手机靠近耳朵时,手机会黑屏,这就是光线传感器起作用。

3.Sensor使用步骤获取传感器管理对象SensorManager创建传感器事件接听器的类,该类必须实现android.hardware.SensorEventListner接口使用SensorManager.registerListener方法注册指定的传感器4.传感器事件接口SensorEventListner接口,该接口的onSensorChanged()和onAccuracyChanged()方法用于处理相应的传感器事件1 public interface SensorEventListener {23 //传感数据变化调用4 public void onSensorChanged(SensorEvent event);5 //传感器精准度变化时调用6 public void onAccuracyChanged(Sensor sensor, int accuracy);7 }5.简单代码实现定义SensorManager1 SensorManager sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);定义一个匿名内部类或者定义一个类实现SensorEventListner接口1 private SensorEventListener sensorEventListener=new SensorEventListener() {23 @Override4 public void onSensorChanged(SensorEvent event) {56 float[] values=event.values;7 float x = values[0];8 float y = values[1];9 float z = values[2];10 }11 @Override12 public void onAccuracyChanged(Sensor sensor, int accuracy) {1314 }15 };注册和关闭传感器监听事件@Overrideprotected void onResume() {super.onResume();if(sensorManager!=null){sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);}}@Overrideprotected void onPause() {super.onPause();if(sensorManager!=null){sensorManager.unregisterListener(sensorEventListener);}}。

Android操作系统11种传感器介绍

Android操作系统11种传感器介绍

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

#define SENSOR_TYPE_ACCELEROMETER 1 //加速度#define SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力#define SENSOR_TYPE_ORIENTATION 3 //方向#define SENSOR_TYPE_GYROSCOPE 4 //陀螺仪#define SENSOR_TYPE_LIGHT 5 //光线感应#define SENSOR_TYPE_PRESSURE 6 //压力#define SENSOR_TYPE_TEMPERATURE 7 //温度#define SENSOR_TYPE_PROXIMITY 8 //接近#define SENSOR_TYPE_GRAVITY 9 //重力#define SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度#define SENSOR_TYPE_ROTATION_VECTOR 11//旋转矢量我们依次看看这十一种传感器1 加速度传感器加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。

该数值包含地心引力的影响,单位是m/s^2。

将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81。

将手机朝下放在桌面上,z轴为-9.81。

将手机向左倾斜,x轴为正值。

将手机向右倾斜,x轴为负值。

将手机向上倾斜,y轴为负值。

将手机向下倾斜,y轴为正值。

加速度传感器可能是最为成熟的一种mems产品,市场上的加速度传感器种类很多。

手机中常用的加速度传感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST 的LIS3X系列等。

这些传感器一般提供±2G至±16G的加速度测量范围,采用I2C或SPI接口和MCU相连,数据精度小于16bit。

智能手机上的常用传感器

智能手机上的常用传感器

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

#define SENSOR_TYPE_ACCELEROMETER 1 //加速度#define SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力#define SENSOR_TYPE_ORIENTATION 3 //方向#define SENSOR_TYPE_GYROSCOPE 4 //陀螺仪#define SENSOR_TYPE_LIGHT 5 //光线感应#define SENSOR_TYPE_PRESSURE 6 //压力#define SENSOR_TYPE_TEMPERATURE 7 //温度#define SENSOR_TYPE_PROXIMITY 8 //接近#define SENSOR_TYPE_GRAVITY 9 //重力#define SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度#define SENSOR_TYPE_ROTATION_VECTOR 11//旋转矢量我们依次看看这十一种传感器1 加速度传感器加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。

该数值包含地心引力的影响,单位是m/s^2。

将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81。

将手机朝下放在桌面上,z轴为-9.81。

将手机向左倾斜,x轴为正值。

将手机向右倾斜,x轴为负值。

将手机向上倾斜,y轴为负值。

将手机向下倾斜,y轴为正值。

加速度传感器可能是最为成熟的一种mems产品,市场上的加速度传感器种类很多。

手机中常用的加速度传感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。

这些传感器一般提供±2G至±16G的加速度测量范围,采用I2C或SPI接口和MCU 相连,数据精度小于16bit。

Android传感器---Motion Sensor

Android传感器---Motion Sensor

本文译自:/guide/topics/sensors/sensors_motion.htmlAndroid平台提供了几个能够监视设备移动的传感器。

其中的两个是基于硬件的(加速度传感器和陀螺仪),有三个传感器既可以是基于硬件的,也可以是基于软件的(重力传感器、线性加速度传感器和旋转矢量传感器)。

例如,在某些基于软件传感器的设备上会从加速度传感器和磁力仪中提取它们的数据,但是在其他的设备上,它们也可以使用陀螺仪来提取数据。

大多数Android设备都有加速度传感器和陀螺仪。

基于软件的传感器的有效性是可变的,因为它们要依赖一个或多个硬件传感器来提取对应的数据。

运动传感器用于监视设备的移动,如:倾斜、振动、旋转或摆动。

移动通常是直接的用户输入的反映(如,用户在游戏中操作汽车或控制一个球),但也能够是设备所处的物理环境的反映(如,驾驶汽车时的位置移动)。

在第一种场景中,你要相对于设备的参照系或应用程序的参照系来监视设备的移动,在第二种场景中,你要相对于全球参照系来监视设备的移动。

通常,移动传感器本身并不用于监视设备的位置,但它们能够跟其他传感器一起来使用,例如跟地磁传感器一起来判断设备相对于全球参照系统的的位置(更多信息,请看位置传感器)。

所有的移动传感器的每个SensorEvent都会返回传感器值的多维数组。

例如,一个加速度传感器的传感器事件会返回三个坐标轴方向的加速度力,陀螺仪会返回三个坐标轴方向旋转速率。

这些数据是以float数组的形式跟SensorEvent参数一起被返回的。

表1概要介绍了Android平台上可用的移动传感器。

1标量部分是一个可选值。

对于移动检测和监视,旋转矢量传感器和重力传感器是使用频率最高的传感器。

旋转矢量传感器尤其灵活,可广泛的应用于移动相关的任务,如,检测手势、监视角度变化、监视相对的方向变化等。

例如:如果你正在开发一款使用2维或3维罗盘来增强现实感游戏,或增强相机的稳定性的应用程序,那么旋转矢量传感器是非常理想的选择。

Android采集传感器数据并显示的方法

Android采集传感器数据并显示的方法

Android采集传感器数据并显⽰的⽅法本⽂实例为⼤家分享了Android采集传感器数据并显⽰的具体代码,供⼤家参考,具体内容如下需要的知识Android 项⽬主配置⽂件 AndroidManifest.xmlAndroid Activity 概念Android Sensor 接⼝Android UI 布局管理器、⽂本框组件、编辑框组件代码及解释1.布局⽂件,⽤于控制UI界⾯显⽰,这⾥使⽤了表格布局管理器和四个⾏,每⼀⾏之中有四列,其中外⾯的两列是为了让中间两列居中,⽽中间两列分别是⼀个显⽰数据来源的TextView⽂本框组件和⼀个显⽰数据值的编辑框组件。

<!-- activity_main.xml --><?xml version="1.0" encoding="utf-8"?><!-- 表格布局管理器TableLayout --><TableLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="16dp"android:paddingLeft="16dp"android:paddingRight="16dp"android:paddingTop="16dp"android:stretchColumns="0,3"tools:context=".MainActivity" ><!--三⾏,传感器数据显⽰--><TableRow android:paddingTop="10dp"><!--⽂本框组件--><TextView /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="x轴加速度:"android:textSize="18sp"android:gravity="center_horizontal"/><!--编辑框组件--><EditTextandroid:id="@+id/et1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="000"/><TextView /></TableRow><TableRow ><TextView /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="y轴加速度:"android:textSize="18sp"android:gravity="center_horizontal"/><EditTextandroid:id="@+id/et2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="000"/><TextView /></TableRow><TableRow ><TextView /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="z轴加速度:"android:textSize="18sp"android:gravity="center_horizontal"/><EditTextandroid:id="@+id/et3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:hint="000"/><TextView /></TableRow></TableLayout>2.程序⽂件,⽤于采集传感器数据并控制其显⽰关于 Android Activity 有很多资料,这⾥就说其是⼀个 Android 程序的⼀个页⾯及其对应的执⾏内容;Activity 的⽣命流程,onCreate( ),onStart( ),onResume( )…采集传感器数据有三步,⾸先获取⼀个传感器管理器对象,然后注册监听器,最后判断传感器值改变时是否需要的传感器类型,然后做出刷新或其它反应;// MainActivity.javapackage com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.widget.EditText;public class MainActivity extends AppCompatActivity implements SensorEventListener { // 实现Sensor Event Listener接⼝private EditText textAcceX,textAcceY,textAcceZ; //编辑框组件private SensorManager sensorManager; //传感器管理器组件@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);textAcceX = findViewById(R.id.et1);textAcceY = findViewById(R.id.et2);textAcceZ = findViewById(R.id.et3);sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // 获取传感器管理器}@Overrideprotected void onResume() {super.onResume();//设置传感器类型及采样率sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_UI);}@Overrideprotected void onPause() {super.onPause();sensorManager.unregisterListener(this); // 暂停采集}@Overridepublic void onSensorChanged(SensorEvent event) { // 重写SensorEventListener接⼝的⽅法float [] values = event.values;int sensorType = event.sensor.getType();StringBuilder stringBuilderX = null,stringBuilderY = null,stringBuilderZ = null;if(sensorType == Sensor.TYPE_ACCELEROMETER ){ // 判断是否所需传感器stringBuilderX = new StringBuilder();stringBuilderY = new StringBuilder();stringBuilderZ = new StringBuilder();stringBuilderX.append(values[0]);stringBuilderY.append(values[1]);stringBuilderZ.append(values[2]);textAcceX.setText(stringBuilderX.toString()); // 编辑框内显⽰textAcceY.setText(stringBuilderY.toString());textAcceZ.setText(stringBuilderZ.toString());}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) { // 重写SensorEventListener接⼝的⽅法 }}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

手机游戏开发中Android传感器的应用研究

手机游戏开发中Android传感器的应用研究

手机游戏开发中Android传感器的应用研究作者:田志贡阮国庆石峰来源:《无线互联科技》2015年第07期摘要:文章主要分析了Android手机常用的传感器在手机游戏开发中的应用,分析了利用姿态传感器实现游戏开发过程中核心模块代码的相关知识,并对所带来的优越体验加以介绍。

关键词:Android;姿态传感器:手机游戏近年来,随着Android系统手机的广泛应用,其应用在游戏开发中的范围也越来越广。

使用Android系统的手机有一个最大的优势,就是可以利用这项设备访问系统内的一些有用的工具,这些工具可以给Android系统带来更大的便利。

因为手机以前的访问设备在底层硬件方面的能力比较差,在操作上存在着很大的困难,移动开发的人员在这方面遇到了很多的难题。

1手机传感器的基本知识虚拟传感器是一种在一个或者多个硬件的基础上获取数据的传感器。

因为这种传感器在软件的基础上建立的,并非物理设备而是模仿基于硬件的传感器。

在软件传感器上建立的有线性加速度传感器,重力传感器。

这些传感器应用在手机中,可以大大提升手机的功能。

因为这些Android手机中都自带传感器,利用这个传感器可以测量物体的运动、方向和运行的环境条件。

这些传感器的主要功能是提供精确的数据,这些数据都是最原始的数据。

利用监控三维设备,可以促使传感器监控周围的运行环境。

当前,手机中应用的传感器也成为了备受关注的新技术,例如在“星空迷途”这一经典手机游戏中,通过合理运用传感器,能够帮助用户很好地实现对游戏界面的自动化控制。

1.1多种多样的手机传感器目前较为常用的Android手机传感器为:主要用途在于位移变动的传感器、有助于定位的传感器、感知环境的传感器。

其中,用来帮助位移的传感器主要测量三个轴线的加速度和旋转角度。

在测量的过程中,使用了加速度传感器、重力传感器和矢量传感器、环境传感器。

其中,也采用了光线传感器、温度传感器。

位置传感器的主要作用是测量设备的物理位置,也联合采用了方向传感器和磁力传感器。

基于Android的体感传感器应用

基于Android的体感传感器应用

6基于Android 的体感传感器应用曾辉,邓谦,王智超(武昌理工学院 信息工程学院,武汉 430223)摘 要:本文基于Android 系统介绍了的体感传感器的应用。

利用中间件技术实现了Android 设备与业务服务器的通信;通过传感器获取原始数据并转换为相应的程序命令。

该应用系统具有时效性高、能耗低的特点,能应用于不同工程领域。

关键词:Andorid;传感器中图分类号:TN929.53 文献标识码:A 文章编号:1674-7712 (2014) 24-0006-01本文设计了一种基于Android 移动设备传感器的体感应用系统。

体感的基本概念在于人们可以很直接地使用肢体动作与周边的装置或环境互动,而无需使用任何复杂的控制设备便可以让人们身临其境地与内容互动。

Android 移动体感的功能不仅仅局限于游戏,在结合情境感知的基础上,可以将移动设备的体感方便地应用到大部分的应用程序中,如控制个人计算机(PC)上的演讲稿翻页、音乐切换等功能。

一、安卓系统结构安卓系统以Linux 系统为核心,使用Java 作为主要编程语言,在NDK 的支持下也可使用C/C++进行编程。

从系统结构的角度看,安卓系统可分为4个层次:(1)内核:内核为上层提供安全、内存管理、进程管理等服务,同时也作为硬件层和系统上层软件之间的一个抽象层、桥梁通道;(2)函数库和运行环境:函数库提供了JAVA 语言的部分功能。

在库中提供的API 能被安卓系统中的组件调用,通过应用程序框架为开发者进行支持;(3)应用程序框架:专门为应用程序的开发而设计的系统结构,安卓程序员通过框架得以直接访问核心应用程序,以及系统API;(4)应用程序集合:安卓系统自带的一系列核心应用程序集合,可提供综合数字服务的相关功能。

二、系统设计本系统采用C/S 架构,将PC 或运行能力较强的计算设备作为服务器,负责与Android 手机进行通信和发出指令操作。

Android 手机作为客户端,引导用户选择相应的传感器种类。

如何理解Sensor架构_华清远见

如何理解Sensor架构_华清远见

如何理解Sensor架构?本篇文章来自华清远见嵌入式学院讲师:倪键树。

主要给大家讲解如何理解如何理解Sensor架构,希望看完后对新手有一定的帮助。

1、Android sensor架构Android4.0系统内置对传感器的支持达13种,它们分别是:加速度传感器 (accelerometer)、磁力传感器(magnetic field)、方向传感器(orientation)、陀螺仪(gyroscope)、环境光照传感器(light)、压力传感器(pressure)、温度传感器(temperature)和距离传感器(proximity)等。

Android实现传感器系统包括以下几个部分:各部分之间架构图如下:2、Sensor HAL层接口Google为Sensor提供了统一的HAL接口,不同的硬件厂商需要根据该接口来实现并完成具体的硬件抽象层,Android中Sensor的HAL接口定义在:hardware/libhardware/include/hardware/sensors.h对传感器类型的定义:传感器模块的定义结构体如下:该接口的定义实际上是对标准的硬件模块hw_module_t的一个扩展,增加了一个get_sensors_list函数,用于获取传感器的列表。

对任意一个sensor设备都会有一个sensor_t结构体,其定义如下:每个传感器的数据由sensors_event_t结构体表示,定义如下:其中,sensor为传感器的标志符,而不同的传感器则采用union方式来表示,sensors_vec_t结构体用来表示不同传感器的数据,sensors_vec_t定义如下:Sensor设备结构体sensors_poll_device_t,对标准硬件设备 hw_device_t结构体的扩展,主要完成读取底层数据,并将数据存储在struct sensors_poll_device_t结构体中,poll函数用来获取底层数据,调用时将被阻塞定义如下:控制设备打开/关闭结构体定义如下:3、Sensor HAL实现(以LM75温度传感器为例子) (1)打开设备流程图(2)实现代码分析在代码中含有两个传感器ADC电位器和LM75温度传感器,所以在sensor.c中,首先需要定义传感器数组device_sensor_list[],其实就是初始化struct sensor_t结构体,初始化如下:定义open_sensors函数,来打开Sensor模块,代码如下:在这个方法中,首先需要为hw_device_t分配内存空间,并对其初始化,设置重要方法的实现。

senser(传感器)

senser(传感器)

Sensor Components▪ AccelerometerSensor ▪ LocationSensor ▪ OrientationSensor AccelerometerSensor This component senses the Android device's accelerometer, which detects shaking and measures acceleration in three dimensions. Acceleration is measured in SI units (m/s 2). If the device is a rest lying flat on its back, the Z acceleration will be about 9.8. The component produces three values. ▪ XAccel : Positive when the device is tilted to the right (that is, its left side is raised), and negative when the device is tilted to the left (its right size is raised). ▪ YAccel : Positive when its bottom is raised, and negative when its top is raised. ▪ ZAccel : Positive when the display is facing up, and negative when the display is facing down. Properties Available Indicates whether the accelerometer is present on the Android device. Enabled If set, accelerometer is enabled. XAccel Acceleration in the X-dimension. YAccel Acceleration in the Y-dimension. ZAccel Acceleration in the Z-dimension. Events AccelerationChanged(number xAccel, number yAccel, number zAccel) Called when the acceleration has changed. 传感器组件AccelerometerSensorLocationSensorOrientationSensor AccelerometerSensor此组件的感官,它可以检测震动和措施三个方面的加速Android 设备的加速度。

android传感器(OnSensorChanged)使用介绍

android传感器(OnSensorChanged)使用介绍

android传感器(OnSensorChanged)使⽤介绍下⾯是API中定义的⼏个代表sensor的常量。

Int TYPE_ACCELEROMETER A constant describing an accelerometer sensor type. 加速度传感器int TYPE_ALL A constant describing all sensor types. 所有类型 A constant describing all sensor types.int TYPE_GRAVITY A constant describing a gravity sensor type.int TYPE_GYROSCOPE A constant describing a gyroscope sensor type 回转仪传感器int TYPE_LIGHT A constant describing an light sensor type.光线传感器int TYPE_LINEAR_ACCELERATION A constant describing a linear acceleration sensor type.int TYPE_MAGNETIC_FIELD A constant describing a magnetic field sensor type.磁场传感器int TYPE_ORIENTATION This constant is deprecated. use SensorManager.getOrientation()instead. 磁场传感器int TYPE_PRESSURE A constant describing a pressure sensor type 压⼒计传感器int TYPE_PROXIMITY A constant describing an proximity sensor type.距离传感器int TYPE_ROTATION_VECTOR A constant describing a rotation vector sensor type.int TYPE_TEMPERATURE A constant describing a temperature sensor type 温度传感器我们在编写传感器相关的代码时可以按照以下步骤:第⼀步:获得传感器管理器SensorManger sm = (SensorManager).getSystemService(SENSOR_SERVICE);第⼆步:为具体的传感器注册监听器 ,这⾥我们使⽤磁阻传感器Sensor.TYPE_ORIENTATION.sm,registerListener (this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_FASTEST);这⾥如果想注册其他的传感器,可以改变第⼀个参数值的传感器类型属性。

ANDROID传感器开发

ANDROID传感器开发

Android特色开发Android 是一个面向应用程序开发的丰富平台,它拥有许多具有吸引力的用户界面元素、数据管理和网络应用等优秀的功能。

Android 还提供了很多颇具特色的接口。

本文我们将分别介绍这些吸引开发者眼球的特色开发,主要包括:传感器系统(Sensor)、语音识别技术(RecognizerIntent)、Google Map和用来开发桌面的插件(Widget)。

通过本文的学习,读者将对Android有一个更深入的了解,可以开发出一些有特色、有创意的应用程序。

一传感器据调查,2008年全球传感器销售额为506亿美元,预计到2010年全球传感器销售额可达600亿美元以上。

调查显示,东欧、亚太区和加拿大成为传感器市场增长最快的地区,而美国、德国、日本依旧是传感器市场分布最大的地区。

就世界范围而言,传感器市场增长最快的领域依旧是汽车,占第二位的是过程控制,当然现在也被广泛应用于通信。

那么,传感器的定义是什么呢?有哪些种类的传感器呢?Android中提供了哪些传感器呢?1.传感器的定义传感器是一种物理装置或生物器官,能够探测、感受外界的信号、物理条件(如光、热、湿度)或化学组成(如烟雾),并将探知的信息传递给其他装置或器官。

国家标准GB7665—87对传感器的定义是:“能感受规定的被测量并按照一定的规律转换成可用信号的器件或装置,通常由敏感元件和转换元件组成”。

传感器是一种检测装置,能感受被测量的信息,并能将检测的感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。

它是实现自动检测和自动控制的首要环节。

2.传感器的种类可以从不同的角度对传感器进行分类:转换原理(传感器工作的基本物理或化学效应);用途;输出信号类型以及制作材料和工艺等。

根据工作原理,传感器可分为物理传感器和化学传感器两大类。

物理传感器应用的是物理效应,诸如压电效应,磁致伸缩现象,离化、极化、热电、光电、磁电等效应。

Android 传感器模拟器Sensor Simulator详细安装步骤

Android 传感器模拟器Sensor Simulator详细安装步骤
Android 传感器模拟器 Sensor Simulator 详细安装步骤
1.下载 sensorsimulator-2.0-rc1(可不断下载更新的最新版本) 文件包含内容如下图所示
Bin 文件中内容如下图所示
2.sensorsimulator-2.0-rc1.jar 用于安装 PC 上的界面,双击即可
3.SensorRecordFromDevice-2.0-rc1.apk 和 SensorSimulatorSetting-2.0-rc1.apk 用于安装手机上 的模拟器
4.安装步骤如下pk 和 SensorSimulatorSetting-2.0-rc1.apk 复 制 到 adb.exe 所在的目录(我的安装目录是 Android-->adt-bundle-windows-x86_64-20140321 -->adt-bundle-windows-x86_64-20140321-->sdk-->platform-tools)
4.2 打开 cmd 进入到此目录下使用 adb install 进行安装,模拟器中会显示安装好的图标
4.3 点击图标进入如下界面,可进行验证
安装时,大家可根据自己的目录做出相应改动!

android姿态传感器在手机游戏开发中的应用

android姿态传感器在手机游戏开发中的应用

Android姿态传感器在手机游戏开发中的应用吴丽(无锡科技职业学院,江苏,无锡,214028)摘要:本文阐述了如何采用Android姿态传感器技术对传统的小球闯关游戏进行二次开发,二次开发后的游戏的玩法从原来的手机按键或者触摸操作方式改为更加自由的甩、摇、转等空间操作方式,这种创新的游戏操作方式可以给游戏玩家带来更好的体验。

关键字:Android、姿态传感器、手机游戏1 引言过去,尽管Android SDK开发环境能在移动开发人员和手机设备之间建立沟通桥梁,但是要访问手机底层硬件还是让移动开发人员感到非常棘手。

随着Android开发团队对Android SDK的不断升级更新,手机设备的许多硬件功能不断浮出水面,开发人员越来越欣喜的发现可以在手机设备内部访问一些“好工具”,比如:手机中的“传感器”。

Android 平台下的传感器包括加速度传感器(Accelerometer)、姿态传感器(Orientation)、磁场传感器(Magnetic、Field)和光传感器(Light)等[2],利用传感器可以开发出很多新奇有趣的小游戏。

随着手机游戏玩家对于手机游戏的创新体验有越来越高的要求,传统的游戏操作方式已经很难吸引玩家。

因此可以利用Android平台下的各种传感器来创新开发一些新颖有趣的游戏,其中姿态传感器在开发手机游戏中是应用最为广泛的一种。

2 Android姿态传感器原理简介Android姿态传感器主要感应手机方位的变化,捕获的是三个方位的参数,分别代表手机沿Yaw轴、Pitch轴和Roll轴转过的角度,如图1所示。

Yaw轴、Pitch轴和Roll轴与平时理解的标准空间坐标系是有所区别的。

图1 Android姿态传感器原理Yaw轴是三个轴中最简单的一个,其表示的方向是不变的,其方向一直是与重力加速度g的方向相反,即一直是竖直向上的,与手机的姿态无关。

Pitch轴的方向永远与Yaw轴成90度角,因此其方向会随着手机沿Yaw轴旋转而改变,图1 表示了该轴的方向。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文译自:/guide/topics/sensors/sensors_position.htmlAndroid平台提供了两种用于判断设备位置的传感器:地磁场传感器和方向传感器。

Android 平台还提供一种判断设备的面板是否接近一个对象的传感器(即距离传感器)。

地磁场传感器和距离传感器是基于硬件的。

大多数手持设备和平板电脑制造商都在其设备中包含了一个地磁场传感器。

同样手持设备制造商也他们的设备中包含一个距离传感器,用于判断手持设备是否靠近人脸(如,在电话呼叫期间)。

方向传感器是基于软件的,并且要从加速度传感器和地磁场传感器来获取数据。

注意:方向传感器在Android2.2(API Level 8)中被废弃。

对于判断设备在全球参照系中的物理位置,位置传感器是有益的。

例如,使用地磁场传感器跟加速度传感器的组合来判断设备相对于磁场北极的位置。

也能够使用方向传感器(或类似于基于传感器的方位方法)来判断设备在你的应用程序的参照系统中的位置。

通常,位置传感器不用于监视设备的移动或手势,如振动、倾斜或推动(更多的信息,请看Motion Sensors)。

地磁场传感器和方向传感器用SensorEvent来返回传感器值的多维数组。

例如,在一个单独的传感器事件期间,方向传感器的三个坐标中每一个都提供了地磁场的强度值。

同样,方向传感器在一个传感器事件期间提供了方位角(旋角)、倾斜度和晃动值。

关于传感器所使用的坐标系统的更多信息,请看“传感器器坐标系统”。

距离传感器在每个传感器事件中提供一个单值。

表1概要的介绍了Android平台所支持的位置传感器。

表1.Android平台所支持的位置传感器1这种传感器在Android2.2(API Level 8)中被废弃。

传感器框架提供获取设备方向的替代方法,在使用方向传感器一节会讨论替代的方法。

2某些距离传感器只提供接近和远离的二进制数据。

使用方向传感器方向传感器会相对与地球参照系来监视设备的位置(特别是北极)。

以下代码显示了如何获取默认的方向传感器的实例:private SensorManager mSensorManager;private Sensor mSensor;...mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);通过使用设备的地磁场传感器跟加速度传感器的组合来获取方向传感器的数据。

使用这两个硬件传感器,方向传感器能够提供以下三个维度的数据:1.方位角(围绕Z轴的旋转角度)。

这是被和设备Y轴之间的角度。

例如,如果设备的Y轴方向与北极一致,这该值是0,如果设备的Y轴指向南方,则该值是180。

同样,当Y轴指向东方时,该值是90;指向西方时,该值是270。

2.倾斜角(围绕X轴的旋转角度)。

当正方向的Z轴向着正向的Y轴旋转时,该值是正值,当正方向的Z轴向着负方向的Y轴旋转时,该值是负值。

它的取值范围是180度到-180度之间。

3.转角(围绕Y轴旋转的角度)。

当正方向的Z轴向着正向的X轴旋转时,该值是正值,当正方向的Z轴向着负方向的X轴旋转时,该值是负值。

它的取值范围是90度到-90度之间。

这种定义有别与航空领域的偏航、倾斜和滚动,飞行器的X轴是飞机的长边(从尾部到头部)。

另外,由于历史原因,顺时针方向的转角是正值(从数学的角度,逆时针方向应该是正值)。

方向传感器通过处理来自加速度传感器和地磁场传感器的原始数据来获取它的数据。

因为要涉及到重力处理,所以方向传感器的精度和准确度会受到影响(特别是,这种传感器只在转角部分是0的时候才是可信赖的)。

因为这种原因,在Android2.2(API Level 8)中弃用了这种传感器。

使用来自方向传感器的原始数据来替代,我们推荐使用getRotationMatrix()方法跟getOrientation()方法相结合来计算方向值。

你还能够使用remapCoordinateSystem()方法把方向值转换成你的应用程序的参照坐标系。

以下代码示例演示了如何从方向传感器中直接获取数据。

我们只在忽略设备转角的前提下,才推荐使用这种方法:public class SensorActivity extends Activity implements SensorEventListener {private SensorManager mSensorManager;private Sensor mOrientation;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);mOrientation =mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// Do something here if sensor accuracy changes.// You must implement this callback in your code.}@Overrideprotected void onResume() {super.onResume();mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_NORMAL);}@Overrideprotected void onPause() {super.onPause();mSensorManager.unregisterListener(this);}@Overridepublic void onSensorChanged(SensorEvent event) {float azimuth_angle = event.values[0];float pitch_angle = event.values[1];float roll_angle = event.values[2];// Do something with these orientation angles.}}通常,除了把该传感器的坐标系统转换成你应用程序的坐标系统之外,你不需要对来自方向传感器的原始数据进行任何的处理或过滤。

Accelerometer Play示例程序演示如何把加速度传感器的数据转换到另外的一个坐标系统中。

这与方向传感器所使用的技术是类似的,你可以参照这个示例程序。

使用地磁场传感器地磁场传感器让你能够监视地球磁场的变化。

下列代码显示了如何获取默认地磁场传感器实例:private SensorManager mSensorManager;private Sensor mSensor;...mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);传感器分别提供三个坐标轴方向的原始磁场强度数据(以μT为单位)。

通常,你不需要直接使用这种传感器。

相反,你能够使用旋转矢量传感器来判断原始的旋转运动,或者使用加速度传感器和地磁场传感器跟getRotationMatrix()方法的组合来获取旋转矩阵和倾斜矩阵。

然后使用这些矩阵和getOrientation()和getInclination()方法来获取方位角和磁场倾角数据。

使用距离传感器距离传感器会让你判断一个对象距离设备有多远。

下列代码显示了如何获取默认的距离传感器的实例:private SensorManager mSensorManager;private Sensor mSensor;...mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);通常,距离传感器用于判断人的头部距离手持设备面板有多远(例如,用户拨打或接听电话时)。

大多数距离传感器会返回一个绝对距离(以厘米cm为单位),但是某些只返回接近和远离的值。

下列代码显示了如何使用距离传感器:public class SensorActivity extends Activity implements SensorEventListener {private SensorManager mSensorManager;private Sensor mProximity;@Overridepublic final void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);// Get an instance of the sensor service, and use that to get an instance of// a particular sensor.mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);mProximity =mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);}@Overridepublic final void onAccuracyChanged(Sensor sensor, int accuracy) { // Do something here if sensor accuracy changes.}@Overridepublic final void onSensorChanged(SensorEvent event) {float distance = event.values[0];// Do something with this sensor data.}@Overrideprotected void onResume() {// Register a listener for the sensor.super.onResume();mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL);}@Overrideprotected void onPause() {// Be sure to unregister the sensor when the activity pauses.super.onPause();mSensorManager.unregisterListener(this);}}注意:某些距离传感器返回代表“接近”或“远离”的二进制值。

相关文档
最新文档