android传感器和位置服务课件_第1页
android传感器和位置服务课件_第2页
android传感器和位置服务课件_第3页
android传感器和位置服务课件_第4页
android传感器和位置服务课件_第5页
已阅读5页,还剩79页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android传感器和位置服务Android传感器和位置服务传感器的定义

传感器是一种物理装置或生物器官,能够探测、感受外界的信号、物理条件(如光、热、湿度)或化学组成(如烟雾),并将探知的信息传递给其他装置或器官。国家标准GB7665-87对传感器的定义是:"能感受规定的被测量并按照一定的规律转换成可用信号的器件或装置,通常由敏感元件和转换元件组成"。传感器是一种检测装置,能感受被测量的信息,并能将检测的感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。它是实现自动检测和自动控制的首要环节。传感器的定义 传感器是一种物理装置或生物器官,能够探测、感受传感器的种类

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

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

物理传感器应用的是物理效应,诸如压电效应,磁致伸缩现象,离化、极化、热电、光电、磁电等效应。被测信号量的微小变化都将转换成电信号。

化学传感器包括那些以化学吸附、电化学反应等现象为因果关系的传感器,被测信号量的微小变化也将转换成电信号。

大多数传感器是以物理原理为基础运作的。化学传感器的技术问题较多,例如可靠性问题、规模生产的可能性、价格问题等,解决了这些问题,化学传感器的应用将会有巨大增长。而有些传感器既不能划分为物理类,也不能划分为化学类。传感器的种类可以从不同的角度对传感器Android中传感器的种类GoogleAndroid操作系统中内置了很多传感器,在部分游戏或软件中可以自动识别屏幕的横屏、竖屏方向来改变屏幕显示布局。下面是Android中支持的几种传感器:

SenSor。TYPE_ACCELEROMETER:加速度传感器。

Sensor。TYPE_GYROSCOPE:陀螺仪传感器。

Sensor。TYPE_LIGHT:亮度传感器。

Sensor。TYPE_MAGNETIC_FIELD:地磁传感器。

Sensor。TYPE_ORIENTATION:方向传感器。

Sensor。TYPE_PRESSURE:压力传感器。

Sensor。TYPE_PROXIMITY:近程传感器。

Sensor。TYPE_TEMPERATURE:温度传感器。Android中传感器的种类GoogleAndroid操作Android中传感器的功能要在Android中使用传感器,首先需要了解SensorManager和SensorEventListener。顾名思义,SensorManager就是所有传感器的一个综合管理类,包括了传感器的种类、采样率、精准度等。我们可以通过getSystemService方法来取得一个SensorManager对象。代码如下:

SensorManagermSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);Android中传感器的功能要在Android中使用传感器取得SensorManager对象之后,可以通过getSensorList方法来获得我们需要的传感器类型,保存到一个传感器列表中。通过如下代码可以得到一个方向传感器:

Listsensors=mSensorManager。getSensorList(Sensor。TYPE_ORIENTATION);

要与传感器交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。Android中提供了registerListener来注册一个传感器,并提供了unregisterListener来卸载一个传感器。registerListener方法包括3个参数:第1个参数,接收信号的Listener实例;第2个参数,想接收的传感器类型的列表(即上一步创建的List对象);第3个参数,接收频度。调用之后返回一个布尔值,true表示成功,false表示失败。取得SensorManager对象之后,可以通过getSen//注册传感器BooleanmRegisteredSensor=mSensorManager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_FASTEST);//卸载传感器mSensorManager.unregisterListener(this);//注册传感器onSensorChanged(SensorEventevent)方法在传感器值更改时调用。该方法只由受此应用程序监视的传感器调用。该方法的参数包括一个SensorEvent对象,该对象主要包括一组浮点数,表示传感器获得的方向、加速度等信息。例如,以下代码可以取得其值:

floatx=event.values[SensorManager.DATA_X];

floaty=event.values[SensorManager.DATA_Y];

floatz=event.values[SensorManager.DATA_Z];

onAccuracyChanged(Sensorsensor,intaccuracy)方法在传感器的精准度发生改变时调用。其参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。onSensorChanged(SensorEventeAndroid加速度传感器加速度传感器是为了检测物体的加速度的传感器。物体运动加速度也跟着变化,如果能取到加速度,物体受到什么样的作用力或则物体进行什么样的运动,我们就可以知道。使用加速度,我们就能做模拟计步器、物体运动的应用程序。Android加速度传感器加速度传感器是Android加速度传感器的类型是

Sensor.TYPE_ACCELEROMETER通过android.hardware.SensorEvent返回加速度传感器值。

加速度传感器返回值的单位是加速度的单位m/s^2(米每二次方秒),有三个方向的值分别是values[0]:x-axis方向加速度

values[1]:y-axis方向加速度

values[2]:z-axis方向加速度

Android加速度传感器的类型是

Sensor.TYP其中x,y,z方向的定义是以水平放置在的手机的右下脚为参照系坐标原点(如下图)x方向就是手机的水平方向,右为正y方向就是手机的水平垂直方向,前为正y方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负

x<0

x>0

^

|

+-----------+-->

y>0

|

|

|

|

|

|

|

|

/z<0

|

|

/

|

|/

O-----------+/

|[]

[]

[]/

+----------/+

y<0

/

/

|/z>0(towardthesky)

O:Origin(x=0,y=0,z=0)其中x,y,z方向的定义是以水平放置在的手机的右下脚为参照系需要注意的是,由于地球固有的重力加速度g(值为9.8m/s^2),因此现实中实际加速度值应该是z方向返回值-9.8m/s^2.比如你以2m/s^2的加速度将手机抛起,这时z方向的返回值应该是11.8m/s^2.反之若以手机以2m/s^2的加速度坠落,则z方向的返回值应该是7.8m/s^2.需要注意的是,由于地球固有的重力加速度g(值为9.8m/常量名说明实际的值GRAVITY_DEATH_STAR_1

死亡星3.5303614E-7

GRAVITY_EARTH地球

9.80665

GRAVITY_JUPITER木星

23.12

GRAVITY_MARS火星

3.71

GRAVITY_MERCURY水星

3.7

GRAVITY_MOON月亮

1.6

GRAVITY_NEPTUNE海王星

11.0

GRAVITY_PLUTO冥王星

0.6

GRAVITY_SATURN土星

8.96

GRAVITY_SUN太阳

275.0

GRAVITY_THE_ISLAND岛屿星

4.815162

GRAVITY_URANUS天王星

8.69

GRAVITY_VENUS金星

8.87常量名说明实际的值GRAVITY_DEATH_STAR_1

Android姿态传感器姿态传感器是使用最多的传感器之一,该传感器主要感应手机方位的变化,捕获的同样是三个数,分别代表手机沿Yaw轴、Pitch轴和Roll轴转过的角度。

Yaw轴、Pitch轴和Roll轴与平时我们理解的空间坐标系有所不同,下面分别对这三个轴所表示的含义进行详细介绍。

Yaw轴,该轴是三个轴中最简单的一个,其表示的方向是不变的,一直是重力加速度g的反方向,即一直是竖直向上的,与手机的姿态无关。

Pitch轴,该轴的方向并不是固定不变的,而是会随着手机沿Yaw轴旋转而改变,唯一不变的关系是该轴永远与Yaw轴成90度角,图表示了该轴的方向。实际上Yaw轴与Pitch轴相当于焊到一起的一个90度支架,无论手机怎么旋转,其与Yaw轴的角度都为90度。

Roll轴,该轴是沿着手机屏幕向上的轴,在图14-10中可以看到,无论手机是何种姿态,Roll轴都是沿着手机的屏幕向上的,其方向是与手机绑定的。Android姿态传感器姿态传感器是使用最多的传感器之一,android传感器和位置服务课件android重力感应器整个重力感应坐标设定如下:以屏幕的左下方为原点(2d编程的时候,是以屏幕左上方为原点的,这个值得注意一下),箭头指向的方向为正。从-10到10,以浮点数为等级单位,想象一下以下情形:手机屏幕向上(z轴朝天)水平放置的时侯,(x,y,z)的值分别为(0,0,10);手机屏幕向下(z轴朝地)水平放置的时侯,(x,y,z)的值分别为(0,0,-10);手机屏幕向左侧放(x轴朝天)的时候,(x,y,z)的值分别为(10,0,0);手机竖直(y轴朝天)向上的时候,(x,y,z)的值分别为(0,10,0);其他的如此类推,规律就是:朝天的就是正数,朝地的就是负数。利用x,y,z三个值求三角函数,就可以精确检测手机的运动状态了。android重力感应器整个重力感应坐标设定如下:android传感器和位置服务课件光线传感器光线传感器的类型常量是Sensor.TYPE_LIGHT。values数组只有第一个元素(values[0])有意义。表示光线的强度。最大的值是120000.0f。AndroidSDK将光线强度分为不同的等级,每一个等级的最大值由一个常量表示,这些常量都定义在SensorManager类中,代码如下:

光线传感器光线传感器的类型常量是Sensor.TYPE_LIpublicstaticfinalfloatLIGHT_SUNLIGHT_MAX=120000.0f;

publicstaticfinalfloatLIGHT_SUNLIGHT=110000.0f;

publicstaticfinalfloatLIGHT_SHADE=20000.0f;

publicstaticfinalfloatLIGHT_OVERCAST=10000.0f;

publicstaticfinalfloatLIGHT_SUNRISE=400.0f;

publicstaticfinalfloatLIGHT_CLOUDY=100.0f;

publicstaticfinalfloatLIGHT_FULLMOON=0.25f;

publicstaticfinalfloatLIGHT_NO_MOON=0.001f;publicstaticfinalfloatLIGH其他传感器陀螺仪传感器

陀螺仪传感器的类型常量是Sensor.TYPE_GYROSCOPE。values数组的三个元素表示的含义如下:values[0]:延X轴旋转的角速度。

values[1]:延Y轴旋转的角速度。

values[2]:延Z轴旋转的角速度。

当手机逆时针旋转时,角速度为正值,顺时针旋转时,角速度为负值。陀螺仪传感器经常被用来计算手机已转动的角度其他传感器陀螺仪传感器

陀螺仪传感器的类型常量是SenAndroid感应模拟器下载地址/p/openintents/downloads/list?q=sensorsimulator运行SensorSimulator(bin/sensorsimulator-x.x.x.jar)程序

在Android模拟器上安装bin/SensorSimulatorSettings-x.x.x.apk(adbinstallapk_path)

运行SensorSimulatorSettings,输入IPAddress

和socketportnumber,Android感应模拟器下载地址使用传感器模拟器类库的步骤为:

a.在构建路径中加入lib/sensorsimulator-lib-x.x.x.jar

b.将sensor_manager_original

=(SensorManager)getSystemService(Context.SENSOR_SERVICE);用sensor_manager_present=SensorManagerSimulator.getSystemService(this,

SENSOR_SERVICE);sensor_manager_present.connectSimulator();代替

c.一般在onResume()方法中为传感器注册监听器,在onStop()方法中取消注册

d.实现SensorEventListener接口,重写onAccuracyChanged(Sensorsensor,inaccuracy)和onSensorChanged(SensorEventevent)方法即可

注意点:大家可能会担心,我如果为了测试在代码中使用OpenIntents组织的SensorSimulator项目,那么到发布的时候还要大量修改源代码,这一点在OpenIntents组织设计SensorSimulator项目的时候就已经想到了,如果你连接的设备并不是传感器模拟器,那么SensorManagerSimulator实际上是调用SensorManager完成获取传感器数据的功能,所以这个时候不需要修改代码,依然获取的是设备上传感器的数据。[5].

传感器的数据定义

有关传感器的数据定义,能够在GoogleDevleloper网站上关于

AndroidSensorEventreference的介绍中找到,在具体使用某一种传感器的时候,你可以参照这上面的资料了解某种传感器的数据是什么含义。使用传感器模拟器类库的步骤为:

a.在构建路径中加入lib/Google地图定位本节主要内容通过模拟器测试定位服务跟踪和查找设备创建趋近警告地址和经纬度之间的相互解码Google地图定位本节主要内容GoogleMap安装GoogleMapAPI

keytool-list-v-keystore

mystore.keystore获得GoogleMapAPIKey

(1)使用Google帐号登入APIsConsole(/apis/console),并将GoogleMapsAPIv2的选项打开。

(2)依据您的需求产生对应的GoogleMapsAPIKey,若您是要继续采用v2版本的方式使用GoogleMapsAPI,请选择「CreatenewBrowserKey」,之后将产生的Key依据过去的方式填入对应的位置即可。GoogleMap安装GoogleMapAPI配置文件中加入<meta-data

android:name="com.google.android.maps.v2.API_KEY"

android:value="your_api_key"/>和对应的许可<permissionandroid:name="com.example.mapdemo.permission.MAPS_RECEIVE"android:protectionLevel="signature"/><uses-permissionandroid:name="com.example.mapdemo.permission.MAPS_RECEIVE"/>配置文件中加入数字签名

在Android

系统中,所有安装

到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。一:同一个开发者的多个程序尽可能使用同一个数字证书

,这可以带来以下好处(1)有利于程序升级(2)有利于程序的模块化设计和开发(3)可以通过权限(permission)的方式在多个程序间共享数据和代码数字签名

在Android

系统中,所有安装

到系统的应用两种签名方式第一种签名方式,

使用Keytool和Jarsigner给程序签名(

用于1.5以下版本

)keytool-genkey-v-keystoreandroid.keystore-aliasandroid-keyalgRSA-validity20000

该命令中,-keystoreophone.keystore表示生成的证书,可以加上路径(默认在用户主目录下);-aliasophone表示证书的别名是ophone;-keyalgRSA表示采用的RSA算法;-validity20000表示证书的有效期是20000天。两种签名方式第一种签名方式,

使用Keytool和JarsiEclipse工具生成打开Eclipse->选择你要签名的项目->右击->androidtools->ExportsignedApplicationpackage...Eclipse工具生成GPS GPS(GlobalPositionSystem,全球定位系统)是20世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统。24颗GPS卫星在离地面2万2千功力的高空上,以12小时的周期环绕地球运行,使得在任意时刻,在地面的任意一点都可以同时观测到4颗以上的卫星。

由于卫星的位置精确,在GPS观测中,我们可以得到卫星到接收机的距离,利用三维坐标中的距离公式和3颗卫星,就可以组成3个方程式,解出观测点的位置(X、Y、Z)。考虑到卫星的时钟与接收机时钟之间的误差,实际上有4个未知数,X、Y、Z和钟差,因而需要引入第4颗卫星,形成4个方程式求解,从而得到观测点的经纬度和高程。GPS GPS(GlobalPositionSystemLocationManager和LocationProviderLocationManager位于android.location包中,该类提供了系统位置访问的方法。LocationProvider定义了位置服务的提供方法,例如,是由GPS设备提供还是通过网络提供等。1、LocationManager通过LocationManager可以实现设备的定位、跟踪和趋近提示。可以通过getSystemService(Context.LOCATION_SERVICE)方法获得该类的实例。LocationManager和LocationProvid属性或方法名称属性或方法描述GPS_PROVIDER静态字符串常量,表明LocationProvider是GPSNETWORK_PROVIDER静态字符串常量,表明LocationProvider是网络addGpsStatusListener(Listenerlistener)添加一个GPS状态监听器addProximityAlert(doublelatitude,doublelongitude,floatradius,longexpiration,PendingIntentintent)添加一个趋近警告getAllProviders()获得所有LocationProvider列表getBestProvider(Criteriacriteria,booleanenabledOnly)根据Criteria返回最适合的LocationProvider属性或方法名称属性或方法描述GPS_PROVIDER静态字符getLastKnownLocation(Stringprovider)根据Provider获得位置信息getProvider(Stringname)获得指定名称的LocationProvidergetProviders(booleanenabledOnly)获得可利用的LocationProvider列表removeProximityAlert(PendingIntent

intent)删除趋近警告requestLocationUpdates(String

provider,longminTime,floatminDistance,

LocationListener

listener)通过给定的Provider名称,周期性的通知当前ActivitygetLastKnownLocation(Stringpr2、LocationProvider用来描述位置提供者,设置位置提供者的一些属性。可以通过Criteria类来为LocationProvider设置条件,获得合适的LocationProvider。属性或方法名称属性或方法描述AVAILABLE静态整形常量,标示是否可利用OUT_OF_SERVICE静态整形常量,不再服务器TEMPORARILY_UNAVAILABLE静态整形常量,临时不可利用getAccuracy()获得经度getName()获得名称2、LocationProvider属性或方法名称属性或方法getPowerRequirement()获得电源需求hasMonetaryCost()花钱的还是免费的requiresCell()是否需要访问基本网络requiresNetwork()是否需要Internet网络数据requiresSatellite()是否需要访问卫星supportsAltitude()是否能够提供高度信息supportsBearing()是否能够提供方向信息supportsSpeed()是否能够提供速度信息getPowerRequirement()获得电源需求has获得LocationProvider1、通过名称获得LocationProvider//通过getSystemService方法获得LocationManager实例

LocationManager

locationManager

=

(LocationManager)

getSystemService(Context.LOCATION_SERVICE);

//Provider名称常量

String

name

=

LocationManager.GPS_PROVIDER;

//根据Provider名称获得LocationProvider

LocationProvider

myProvider;

myProvider

=

locationManager.getProvider(name);

获得LocationProvider1、通过名称获得Loca2、获得当前可利用的LocationProvider//通过getSystemService方法获得LocationManager实例

LocationManager

locationManager

=

(LocationManager)

getSystemService(Context.LOCATION_SERVICE);

//LocationProvider的两种方式

String

name

=

LocationManager.GPS_PROVIDER;

String

name2

=

LocationManager.NETWORK_PROVIDER;

//根据Provider名称获得LocationProvider

LocationProvider

myProvider;

myProvider

=

locationManager.getProvider(name);

boolean

enabledOnly

=

true;

//获得所有可利用的Provider名称列表

List<String>

providers

=

locationManager.getProviders(enabledOnly);

//根据名称获得Provider

myProvider

=

locationManager.getProvider(name);

2、获得当前可利用的LocationProvider3、根据Criteria条件获得LocationProviderLocationManager

locationManager

=

(LocationManager)

getSystemService(Context.LOCATION_SERVICE);

//LocationProvider的查询条件案例

Criteria

criteria

=

new

Criteria();

//设置精确度

criteria.setAccuracy(Criteria.ACCURACY_COARSE);

//设置电耗

criteria.setPowerRequirement(Criteria.POWER_LOW);

//是否需要高度信息

criteria.setAltitudeRequired(false);

//是否需要方位信息

criteria.setBearingRequired(false);

//是否需要速度信息

criteria.setSpeedRequired(false);

//是否产生费用

criteria.setCostAllowed(true);

//获得符合条件最好的Provider

String

bestProvider

=

locationManager.getBestProvider(criteria,

true);

//获得符合条件的Provider

List<String>

matchingProviders

=

locationManager.getProviders(criteria,

false);

3、根据Criteria条件获得LocationProvid定位和跟踪定位就是确定设备的位置,在这里用到了另外一个Location类,该类描述了当前设备的地理位置信息,包括经纬度、方向、高度和速度等。Location常见属性和方法定位和跟踪定位就是确定设备的位置,在这里用到了另外一个Loc属性或方法名称属性或方法描述getLongitude()获得经度getLatitude()获得纬度getAccuracy()获得精确度getAltitude()获得高度getBearing()获得方向getSpeed()获得速度属性或方法名称属性或方法描述getLongitude()获得跟踪是通过注册监听器来实现的。声明LocationListener监听器,在onLocationChanged方法中实现位置的实时变化,通过locationManager类的requestLocationUpdates方法注册监听器,onLocationChanged方法被调用跟踪是通过注册监听器来实现的。趋近警告如果有这样一种位置服务,能够对我们进入或退出某个设定的区域进行提示,这样的应用是很有意义的。LocationManager提供了这一方法实现这一功能:addProximityAlert(doublelatitude,doublelongitude,floatradius,longexpiration,

PendingIntent

intent),该方法有5个参数,前两个是经纬度,第三个是区域半径,第四个是是否过期,第五个一般是一个广播PendingIntent。要实现此功能需要两个步骤:一是获得LocationManager实例,调用其方法addProximityalert并添加趋近提示;二是定义一个广播接收器,当设备进入设定区域时提醒用户。趋近警告如果有这样一种位置服务,能够对我们进入或退出某个设定Geocoder正逆向编码Geocoder可以完成位置信息和经纬度坐标之间的相互转换。例如,你知道了某个地方的名称,想知道它的经纬度坐标,或者你知道了某个地方的经纬度坐标,想知道其名称。解码方式有以下两种:正向编码:通过位置名称获得经纬度坐标反向编码:通过经纬度坐标获得位置名称Geocoder正逆向编码Geocoder可以完成位置信息和Android传感器和位置服务Android传感器和位置服务传感器的定义

传感器是一种物理装置或生物器官,能够探测、感受外界的信号、物理条件(如光、热、湿度)或化学组成(如烟雾),并将探知的信息传递给其他装置或器官。国家标准GB7665-87对传感器的定义是:"能感受规定的被测量并按照一定的规律转换成可用信号的器件或装置,通常由敏感元件和转换元件组成"。传感器是一种检测装置,能感受被测量的信息,并能将检测的感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。它是实现自动检测和自动控制的首要环节。传感器的定义 传感器是一种物理装置或生物器官,能够探测、感受传感器的种类

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

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

物理传感器应用的是物理效应,诸如压电效应,磁致伸缩现象,离化、极化、热电、光电、磁电等效应。被测信号量的微小变化都将转换成电信号。

化学传感器包括那些以化学吸附、电化学反应等现象为因果关系的传感器,被测信号量的微小变化也将转换成电信号。

大多数传感器是以物理原理为基础运作的。化学传感器的技术问题较多,例如可靠性问题、规模生产的可能性、价格问题等,解决了这些问题,化学传感器的应用将会有巨大增长。而有些传感器既不能划分为物理类,也不能划分为化学类。传感器的种类可以从不同的角度对传感器Android中传感器的种类GoogleAndroid操作系统中内置了很多传感器,在部分游戏或软件中可以自动识别屏幕的横屏、竖屏方向来改变屏幕显示布局。下面是Android中支持的几种传感器:

SenSor。TYPE_ACCELEROMETER:加速度传感器。

Sensor。TYPE_GYROSCOPE:陀螺仪传感器。

Sensor。TYPE_LIGHT:亮度传感器。

Sensor。TYPE_MAGNETIC_FIELD:地磁传感器。

Sensor。TYPE_ORIENTATION:方向传感器。

Sensor。TYPE_PRESSURE:压力传感器。

Sensor。TYPE_PROXIMITY:近程传感器。

Sensor。TYPE_TEMPERATURE:温度传感器。Android中传感器的种类GoogleAndroid操作Android中传感器的功能要在Android中使用传感器,首先需要了解SensorManager和SensorEventListener。顾名思义,SensorManager就是所有传感器的一个综合管理类,包括了传感器的种类、采样率、精准度等。我们可以通过getSystemService方法来取得一个SensorManager对象。代码如下:

SensorManagermSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);Android中传感器的功能要在Android中使用传感器取得SensorManager对象之后,可以通过getSensorList方法来获得我们需要的传感器类型,保存到一个传感器列表中。通过如下代码可以得到一个方向传感器:

Listsensors=mSensorManager。getSensorList(Sensor。TYPE_ORIENTATION);

要与传感器交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。Android中提供了registerListener来注册一个传感器,并提供了unregisterListener来卸载一个传感器。registerListener方法包括3个参数:第1个参数,接收信号的Listener实例;第2个参数,想接收的传感器类型的列表(即上一步创建的List对象);第3个参数,接收频度。调用之后返回一个布尔值,true表示成功,false表示失败。取得SensorManager对象之后,可以通过getSen//注册传感器BooleanmRegisteredSensor=mSensorManager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_FASTEST);//卸载传感器mSensorManager.unregisterListener(this);//注册传感器onSensorChanged(SensorEventevent)方法在传感器值更改时调用。该方法只由受此应用程序监视的传感器调用。该方法的参数包括一个SensorEvent对象,该对象主要包括一组浮点数,表示传感器获得的方向、加速度等信息。例如,以下代码可以取得其值:

floatx=event.values[SensorManager.DATA_X];

floaty=event.values[SensorManager.DATA_Y];

floatz=event.values[SensorManager.DATA_Z];

onAccuracyChanged(Sensorsensor,intaccuracy)方法在传感器的精准度发生改变时调用。其参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。onSensorChanged(SensorEventeAndroid加速度传感器加速度传感器是为了检测物体的加速度的传感器。物体运动加速度也跟着变化,如果能取到加速度,物体受到什么样的作用力或则物体进行什么样的运动,我们就可以知道。使用加速度,我们就能做模拟计步器、物体运动的应用程序。Android加速度传感器加速度传感器是Android加速度传感器的类型是

Sensor.TYPE_ACCELEROMETER通过android.hardware.SensorEvent返回加速度传感器值。

加速度传感器返回值的单位是加速度的单位m/s^2(米每二次方秒),有三个方向的值分别是values[0]:x-axis方向加速度

values[1]:y-axis方向加速度

values[2]:z-axis方向加速度

Android加速度传感器的类型是

Sensor.TYP其中x,y,z方向的定义是以水平放置在的手机的右下脚为参照系坐标原点(如下图)x方向就是手机的水平方向,右为正y方向就是手机的水平垂直方向,前为正y方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负

x<0

x>0

^

|

+-----------+-->

y>0

|

|

|

|

|

|

|

|

/z<0

|

|

/

|

|/

O-----------+/

|[]

[]

[]/

+----------/+

y<0

/

/

|/z>0(towardthesky)

O:Origin(x=0,y=0,z=0)其中x,y,z方向的定义是以水平放置在的手机的右下脚为参照系需要注意的是,由于地球固有的重力加速度g(值为9.8m/s^2),因此现实中实际加速度值应该是z方向返回值-9.8m/s^2.比如你以2m/s^2的加速度将手机抛起,这时z方向的返回值应该是11.8m/s^2.反之若以手机以2m/s^2的加速度坠落,则z方向的返回值应该是7.8m/s^2.需要注意的是,由于地球固有的重力加速度g(值为9.8m/常量名说明实际的值GRAVITY_DEATH_STAR_1

死亡星3.5303614E-7

GRAVITY_EARTH地球

9.80665

GRAVITY_JUPITER木星

23.12

GRAVITY_MARS火星

3.71

GRAVITY_MERCURY水星

3.7

GRAVITY_MOON月亮

1.6

GRAVITY_NEPTUNE海王星

11.0

GRAVITY_PLUTO冥王星

0.6

GRAVITY_SATURN土星

8.96

GRAVITY_SUN太阳

275.0

GRAVITY_THE_ISLAND岛屿星

4.815162

GRAVITY_URANUS天王星

8.69

GRAVITY_VENUS金星

8.87常量名说明实际的值GRAVITY_DEATH_STAR_1

Android姿态传感器姿态传感器是使用最多的传感器之一,该传感器主要感应手机方位的变化,捕获的同样是三个数,分别代表手机沿Yaw轴、Pitch轴和Roll轴转过的角度。

Yaw轴、Pitch轴和Roll轴与平时我们理解的空间坐标系有所不同,下面分别对这三个轴所表示的含义进行详细介绍。

Yaw轴,该轴是三个轴中最简单的一个,其表示的方向是不变的,一直是重力加速度g的反方向,即一直是竖直向上的,与手机的姿态无关。

Pitch轴,该轴的方向并不是固定不变的,而是会随着手机沿Yaw轴旋转而改变,唯一不变的关系是该轴永远与Yaw轴成90度角,图表示了该轴的方向。实际上Yaw轴与Pitch轴相当于焊到一起的一个90度支架,无论手机怎么旋转,其与Yaw轴的角度都为90度。

Roll轴,该轴是沿着手机屏幕向上的轴,在图14-10中可以看到,无论手机是何种姿态,Roll轴都是沿着手机的屏幕向上的,其方向是与手机绑定的。Android姿态传感器姿态传感器是使用最多的传感器之一,android传感器和位置服务课件android重力感应器整个重力感应坐标设定如下:以屏幕的左下方为原点(2d编程的时候,是以屏幕左上方为原点的,这个值得注意一下),箭头指向的方向为正。从-10到10,以浮点数为等级单位,想象一下以下情形:手机屏幕向上(z轴朝天)水平放置的时侯,(x,y,z)的值分别为(0,0,10);手机屏幕向下(z轴朝地)水平放置的时侯,(x,y,z)的值分别为(0,0,-10);手机屏幕向左侧放(x轴朝天)的时候,(x,y,z)的值分别为(10,0,0);手机竖直(y轴朝天)向上的时候,(x,y,z)的值分别为(0,10,0);其他的如此类推,规律就是:朝天的就是正数,朝地的就是负数。利用x,y,z三个值求三角函数,就可以精确检测手机的运动状态了。android重力感应器整个重力感应坐标设定如下:android传感器和位置服务课件光线传感器光线传感器的类型常量是Sensor.TYPE_LIGHT。values数组只有第一个元素(values[0])有意义。表示光线的强度。最大的值是120000.0f。AndroidSDK将光线强度分为不同的等级,每一个等级的最大值由一个常量表示,这些常量都定义在SensorManager类中,代码如下:

光线传感器光线传感器的类型常量是Sensor.TYPE_LIpublicstaticfinalfloatLIGHT_SUNLIGHT_MAX=120000.0f;

publicstaticfinalfloatLIGHT_SUNLIGHT=110000.0f;

publicstaticfinalfloatLIGHT_SHADE=20000.0f;

publicstaticfinalfloatLIGHT_OVERCAST=10000.0f;

publicstaticfinalfloatLIGHT_SUNRISE=400.0f;

publicstaticfinalfloatLIGHT_CLOUDY=100.0f;

publicstaticfinalfloatLIGHT_FULLMOON=0.25f;

publicstaticfinalfloatLIGHT_NO_MOON=0.001f;publicstaticfinalfloatLIGH其他传感器陀螺仪传感器

陀螺仪传感器的类型常量是Sensor.TYPE_GYROSCOPE。values数组的三个元素表示的含义如下:values[0]:延X轴旋转的角速度。

values[1]:延Y轴旋转的角速度。

values[2]:延Z轴旋转的角速度。

当手机逆时针旋转时,角速度为正值,顺时针旋转时,角速度为负值。陀螺仪传感器经常被用来计算手机已转动的角度其他传感器陀螺仪传感器

陀螺仪传感器的类型常量是SenAndroid感应模拟器下载地址/p/openintents/downloads/list?q=sensorsimulator运行SensorSimulator(bin/sensorsimulator-x.x.x.jar)程序

在Android模拟器上安装bin/SensorSimulatorSettings-x.x.x.apk(adbinstallapk_path)

运行SensorSimulatorSettings,输入IPAddress

和socketportnumber,Android感应模拟器下载地址使用传感器模拟器类库的步骤为:

a.在构建路径中加入lib/sensorsimulator-lib-x.x.x.jar

b.将sensor_manager_original

=(SensorManager)getSystemService(Context.SENSOR_SERVICE);用sensor_manager_present=SensorManagerSimulator.getSystemService(this,

SENSOR_SERVICE);sensor_manager_present.connectSimulator();代替

c.一般在onResume()方法中为传感器注册监听器,在onStop()方法中取消注册

d.实现SensorEventListener接口,重写onAccuracyChanged(Sensorsensor,inaccuracy)和onSensorChanged(SensorEventevent)方法即可

注意点:大家可能会担心,我如果为了测试在代码中使用OpenIntents组织的SensorSimulator项目,那么到发布的时候还要大量修改源代码,这一点在OpenIntents组织设计SensorSimulator项目的时候就已经想到了,如果你连接的设备并不是传感器模拟器,那么SensorManagerSimulator实际上是调用SensorManager完成获取传感器数据的功能,所以这个时候不需要修改代码,依然获取的是设备上传感器的数据。[5].

传感器的数据定义

有关传感器的数据定义,能够在GoogleDevleloper网站上关于

AndroidSensorEventreference的介绍中找到,在具体使用某一种传感器的时候,你可以参照这上面的资料了解某种传感器的数据是什么含义。使用传感器模拟器类库的步骤为:

a.在构建路径中加入lib/Google地图定位本节主要内容通过模拟器测试定位服务跟踪和查找设备创建趋近警告地址和经纬度之间的相互解码Google地图定位本节主要内容GoogleMap安装GoogleMapAPI

keytool-list-v-keystore

mystore.keystore获得GoogleMapAPIKey

(1)使用Google帐号登入APIsConsole(/apis/console),并将GoogleMapsAPIv2的选项打开。

(2)依据您的需求产生对应的GoogleMapsAPIKey,若您是要继续采用v2版本的方式使用GoogleMapsAPI,请选择「CreatenewBrowserKey」,之后将产生的Key依据过去的方式填入对应的位置即可。GoogleMap安装GoogleMapAPI配置文件中加入<meta-data

android:name="com.google.android.maps.v2.API_KEY"

android:value="your_api_key"/>和对应的许可<permissionandroid:name="com.example.mapdemo.permission.MAPS_RECEIVE"android:protectionLevel="signature"/><uses-permissionandroid:name="com.example.mapdemo.permission.MAPS_RECEIVE"/>配置文件中加入数字签名

在Android

系统中,所有安装

到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。一:同一个开发者的多个程序尽可能使用同一个数字证书

,这可以带来以下好处(1)有利于程序升级(2)有利于程序的模块化设计和开发(3)可以通过权限(permission)的方式在多个程序间共享数据和代码数字签名

在Android

系统中,所有安装

到系统的应用两种签名方式第一种签名方式,

使用Keytool和Jarsigner给程序签名(

用于1.5以下版本

)keytool-genkey-v-keystoreandroid.keystore-aliasandroid-keyalgRSA-validity20000

该命令中,-keystoreophone.keystore表示生成的证书,可以加上路径(默认在用户主目录下);-aliasophone表示证书的别名是ophone;-keyalgRSA表示采用的RSA算法;-validity20000表示证书的有效期是20000天。两种签名方式第一种签名方式,

使用Keytool和JarsiEclipse工具生成打开Eclipse->选择你要签名的项目->右击->androidtools->ExportsignedApplicationpackage...Eclipse工具生成GPS GPS(GlobalPositionSystem,全球定位系统)是20世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统。24颗GPS卫星在离地面2万2千功力的高空上,以12小时的周期环绕地球运行,使得在任意时刻,在地面的任意一点都可以同时观测到4颗以上的卫星。

由于卫星的位置精确,在GPS观测中,我们可以得到卫星到接收机的距离,利用三维坐标中的距离公式和3颗卫星,就可以组成3个方程式,解出观测点的位置(X、Y、Z)。考虑到卫星的时钟与接收机时钟之间的误差,实际上有4个未知数,X、Y、Z和钟差,因而需要引入第4颗卫星,形成4个方程式求解,从而得到观测点的经纬度和高程。GPS GPS(GlobalPositionSystemLocationManager和LocationProviderLocationManager位于android.location包中,该类提供了系统位置访问的方法。LocationProvider定义了位置服务的提供方法,例如,是由GPS设备提供还是通过网络提供等。1、LocationManager通过LocationManager可以实现设备的定位、跟踪和趋近提示。可以通过getSystemService(Context.LOCATION_SERVICE)方法获得该类的实例。LocationManager和LocationProvid属性或方法名称属性或方法描述GPS_PROVIDER静态字符串常量,表明LocationProvider是GPSNETWORK_PROVIDER静态字符串常量,表明LocationProvider是网络addGpsStatusListener(Listenerlistener)添加一个GPS状态监听器addProximityAlert(doublelatitude,doublelongitude,floatradius,longexpiration,PendingIntentintent)添加一个趋近警告getAllProviders()获得所有LocationProvider列表getBestProvider(Criteriacriteria,booleanenabledOnly)根据Criteria返回最适合的LocationProvider属性或方法名称属性或方法描述GPS_PROVIDER静态字符getLastKnownLocation(Stringprovider)根据Provider获得位置信息getProvider(Stringname)获得指定名称的LocationProvidergetProviders(booleanenabledOnly)获得可利用的LocationProvider列表removeProximityAlert(PendingIntent

intent)删除趋近警告requestLocationUpdates(String

provider,longminTime,floatminDistance,

LocationListener

listener)通过给定的Provider名称,周期性的通知当前ActivitygetLastKnownLocation(Stringpr2、LocationProvider用来描述位置提供者,设置位置提供者的一些属性。可以通过Criteria类来为LocationProvider设置条件,获得合适的LocationProvider。属性或方法名称属性或方法描述AVAILABLE静态整形常量,标示是否可利用OUT_OF_SERVICE静态整形常量,不再服务器TEMPORARILY_UNAVAILABLE静态整形常量,临时不可利用getAccuracy()获得经度getName()获得名称2、LocationProvider属性或方法名称属性或方法getPowerRequirement()获得电源需求hasMonetaryCost()花钱的还是免费的requiresCell()是否需要访问基本网络requiresNetwork()是否需要Internet网络数据requiresSatellite()是否需要访问卫星supportsAltitude()是否能够提供高度信息supportsBearing()是否能够提供方向信息supportsSpeed()是否能够提供速度信息getPowerRequirement()获得电源需求has获得LocationProvider1、通过名称获得LocationProvider//通过getSystemService方法获得LocationManager实例

LocationManager

locationManager

=

(LocationManager)

getSystemService(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论