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

下载本文档

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

文档简介

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

2、工作的基本物理或化学效应);用途;输出信号类型以及制作材料和工艺等。根据工作原理,传感器可分为物理传感器和化学传感器两大类。物理传感器应用的是物理效应,诸如压电效应,磁致伸缩现象,离化、极化、热电、光电、磁电等效应。被测信号量的微小变化都将转换成电信号。化学传感器包括那些以化学吸附、电化学反应等现象为因果关系的传感器,被测信号量的微小变化也将转换成电信号。大多数传感器是以物理原理为基础运作的。化学传感器的技术问题较多,例如可靠性问题、规模生产的可能性、价格问题等,解决了这些问题,化学传感器的应用将会有巨大增长。而有些传感器既不能划分为物理类,也不能划分为化学类。Android中传感器的种类Go

3、ogle Android操作系统中内置了很多传感器,在部分游戏或软件中可以自动识别屏幕的横屏、竖屏方向来改变屏幕显示布局。下面是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_TEM

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

5、sorList方法来获得我们需要的传感器类型,保存到一个传感器列表中。通过如下代码可以得到一个方向传感器:List sensors = mSensorManager。getSensorList(Sensor。TYPE_ORIENTATION);要与传感器交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。Android中提供了registerListener来注册一个传感器, 并提供了unregisterListener来卸载一个传感器。registerListener方法包括3个参数:第1个参数,接收信号的 Listener实例;第2个参数,想接收的传感器类型的列表(即上一步创建的Li

6、st对象);第3个参数,接收频度。调用之后返回一个布尔值,true 表示成功,false表示失败。/注册传感器Boolean mRegisteredSensor = mSensorManager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_FASTEST);/卸载传感器mSensorManager.unregisterListener(this);onSensorChanged (SensorEvent event) 方法在传感器值更改时调用。该方法只由受此应用程序监视的传感器调用。该方法的参数包括一个SensorEvent

7、对象,该对象主要包括一组浮点数,表示 传感器获得的方向、加速度等信息。例如,以下代码可以取得其值:float x = event.valuesSensorManager.DATA_X;float y = event.valuesSensorManager.DATA_Y;float z = event.valuesSensorManager.DATA_Z;onAccuracyChanged (Sensor sensor,int accuracy) 方法在传感器的精准度发生改变时调用。其参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。Android 加速度传感器 加速度传感器是为了

8、检测物体的加速度的传感器。物体运动加速度也跟着变化,如果能取到加速度,物体受到什么样的作用力或则物体进行什么样的运动,我们就可以知道。使用加速度,我们就能做模拟计步器、物体运动的应用程序。Android 加速度传感器的类型是 Sensor.TYPE_ACCELEROMETER通过 android.hardware.SensorEvent 返回加速度传感器值。加速度传感器返回值的单位是加速度的单位 m/s2(米每二次方秒),有三个方向的值分别是values0: x-axis 方向加速度values1: y-axis 方向加速度values2: z-axis 方向加速度其中x,y,z方向的定义是以

9、水平放置在的手机的右下脚为参照系坐标原点(如下图)x 方向就是手机的水平方向,右为正y 方向就是手机的水平垂直方向,前为正y 方向就是手机的空间垂直方向,天空的方向为正,地球的方向为负x0 | +-+- y0 | | | | | | | | / z0 | | / | | / O-+/ | / +-/+ y0 (toward the sky) O: Origin (x=0,y=0,z=0)需要注意的是,由于地球固有的重力加速度g (值为9.8 m/s2),因此现实中实际加速度值应该是 z方向返回值 - 9.8 m/s2.比如你以 2 m/s2 的加速度将手机抛起,这时z方向的返回值应该是 11.

10、8 m/s2.反之若以手机以2 m/s2 的加速度坠落,则z方向的返回值应该是 7.8 m/s2.常量名说明实际的值GRAVITY_DEATH_STAR_1死亡星3.5303614E-7GRAVITY_EARTH地球9.80665GRAVITY_JUPITER木星23.12GRAVITY_MARS火星3.71GRAVITY_MERCURY水星3.7GRAVITY_MOON月亮1.6GRAVITY_NEPTUNE海王星11.0GRAVITY_PLUTO冥王星0.6GRAVITY_SATURN土星8.96GRAVITY_SUN太阳275.0GRAVITY_THE_ISLAND岛屿星4.815162

11、GRAVITY_URANUS天王星8.69GRAVITY_VENUS金星8.87Android 姿态传感器姿态传感器是使用最多的传感器之一,该传感器主要感应手机方位的变化,捕获的同样是三个数,分别代表手机沿Yaw轴、Pitch轴和Roll轴转过的角度。 Yaw轴、Pitch轴和Roll轴与平时我们理解的空间坐标系有所不同,下面分别对这三个轴所表示的含义进行详细介绍。 Yaw轴,该轴是三个轴中最简单的一个,其表示的方向是不变的,一直是重力加速度g的反方向,即一直是竖直向上的,与手机的姿态无关。 Pitch轴,该轴的方向并不是固定不变的,而是会随着手机沿Yaw轴旋转而改变,唯一不变的关系是该轴永远

12、与Yaw轴成90度角,图表示了该轴的方向。实际上Yaw轴与Pitch轴相当于焊到一起的一个90度支架,无论手机怎么旋转,其与Yaw轴的角度都为90度。 Roll轴,该轴是沿着手机屏幕向上的轴,在图14-10中可以看到,无论手机是何种姿态,Roll轴都是沿着手机的屏幕向上的,其方向是与手机绑定的。android重力感应器整个重力感应坐标设定如下:以屏幕的左下方为原点(2d编程的时候,是以屏幕左上方为原点的,这个值得注意一下),箭头指向的方向为正。从-10到10,以浮点数为等级单位,想象一下以下情形:手机屏幕向上(z轴朝天)水平放置的时侯,(x,y,z)的值分别为(0,0,10);手机屏幕向下(z

13、轴朝地)水平放置的时侯,(x,y,z)的值分别为(0,0,-10);手机屏幕向左侧放(x轴朝天)的时候,(x,y,z)的值分别为(10,0,0);手机竖直(y轴朝天)向上的时候,(x,y,z)的值分别为(0,10,0);其他的如此类推,规律就是:朝天的就是正数,朝地的就是负数。利用x,y,z三个值求三角函数,就可以精确检测手机的运动状态了。光线传感器光线传感器的类型常量是Sensor.TYPE_LIGHT。values数组只有第一个元素(values0)有意义。表示光线的强度。最大的值是120000.0f。Android SDK将光线强度分为不同的等级,每一个等级的最大值由一个常量表示,这些常

14、量都定义在SensorManager类中,代码如下:public static final float LIGHT_SUNLIGHT_MAX =120000.0f;public static final float LIGHT_SUNLIGHT=110000.0f;public static final float LIGHT_SHADE=20000.0f;public static final float LIGHT_OVERCAST= 10000.0f;public static final float LIGHT_SUNRISE= 400.0f;public static final f

15、loat LIGHT_CLOUDY= 100.0f;public static final float LIGHT_FULLMOON= 0.25f;public static final float LIGHT_NO_MOON= 0.001f;其他传感器陀螺仪传感器 陀螺仪传感器的类型常量是Sensor.TYPE_GYROSCOPE。values数组的三个元素表示的含义如下:values0:延X轴旋转的角速度。values1:延Y轴旋转的角速度。values2:延Z轴旋转的角速度。当手机逆时针旋转时,角速度为正值,顺时针旋转时,角速度为负值。陀螺仪传感器经常被用来计算手机已转动的角度Andro

16、id感应模拟器下载地址/p/openintents/downloads/list?q=sensorsimulator运行SensorSimulator(bin/sensorsimulator-x.x.x.jar)程序在Android模拟器上安装bin/SensorSimulatorSettings-x.x.x.apk (adb install apk_path)运行SensorSimulatorSettings,输入IP Address和socket port number,使用传感器模拟器类库的步骤为:a.在构建路径中加入lib/sensorsimulator-lib-x.x.x.jarb.

17、将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接口,重写onAccuracyChan

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

19、数据定义有关传感器的数据定义,能够在Google Devleloper网站上关于Android SensorEvent reference的介绍中找到,在具体使用某一种传感器的时候,你可以参照这上面的资料了解某种传感器的数据是什么含义。Google地图定位本节主要内容通过模拟器测试定位服务跟踪和查找设备创建趋近警告地址和经纬度之间的相互解码Google Map安装Google Map APIkeytool -list -v -keystoremystore.keystore获得Google Map API Key(1)使用Google帐号登入APIs Console (/apis/consol

20、e),并将Google Maps API v2的选项打开。(2)依据您的需求产生对应的Google Maps API Key ,若您是要继续采用v2 版本的方式使用Google Maps API ,请选择Create new Browser Key,之后将产生的Key 依据过去的方式填入对应的位置即可。配置文件中加入和对应的许可 数字签名在Android系统中,所有安装到 系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字证书并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。一:

21、同一个开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处(1)有利于程序升级(2)有利于程序的模块化设计和开发(3) 可以通过权限(permission)的方式在多个程序间共享数据和代码两种签名方式第一种签名方式,使用Keytool和Jarsigner给程序签名(用于1.5以下版本)keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 20000该 命令中,-keystore ophone.keystore 表示生成的证书,可以加上路径(默认在用户主目录下);-alias

22、ophone 表示证书的别名是ophone;-keyalg RSA 表示采用的RSA算法;-validity 20000表示证书的有效期是20000天。Eclipse工具生成打开Eclipse-选择你要签名的项目-右击-android tools-Export signed Application package.GPSGPS(Global Position System,全球定位系统)是20世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统。24颗GPS卫星在离地面2万2千功力的高空上,以12小时的周期环绕地球运行,使得在任意时刻,在地面的任意一点都可以同时观测到4颗以上的卫星

23、。由于卫星的位置精确,在GPS观测中,我们可以得到卫星到接收机的距离,利用三维坐标中的距离公式和3颗卫星,就可以组成3个方程式,解出观测点的位置(X、Y、Z)。考虑到卫星的时钟与接收机时钟之间的误差,实际上有4个未知数,X、Y、Z和钟差,因而需要引入第4颗卫星,形成4个方程式求解,从而得到观测点的经纬度和高程。LocationManager和LocationProviderLocationManager位于android.location包中,该类提供了系统位置访问的方法。LocationProvider定义了位置服务的提供方法,例如,是由GPS设备提供还是通过网络提供等。1、Location

24、Manager通过LocationManager可以实现设备的定位、跟踪和趋近提示。可以通过getSystemService(Context.LOCATION_SERVICE)方法获得该类的实例。属性或方法名称属性或方法描述GPS_PROVIDER静态字符串常量,表明LocationProvider是GPSNETWORK_PROVIDER静态字符串常量,表明LocationProvider是网络addGpsStatusListener(Listener listener)添加一个GPS状态监听器addProximityAlert(double latitude, double longitud

25、e,float radius, long expiration, PendingIntent intent)添加一个趋近警告getAllProviders()获得所有LocationProvider列表getBestProvider(Criteria criteria, boolean enabledOnly)根据Criteria返回最适合的LocationProvidergetLastKnownLocation(String provider)根据Provider获得位置信息getProvider(String name)获得指定名称的LocationProvidergetProviders

26、(boolean enabledOnly)获得可利用的LocationProvider列表removeProximityAlert(PendingIntentintent)删除趋近警告requestLocationUpdates(Stringprovider, long minTime,float minDistance,LocationListenerlistener)通过给定的Provider名称,周期性的通知当前Activity2、LocationProvider用来描述位置提供者,设置位置提供者的一些属性。可以通过Criteria类来为LocationProvider设置条件,获得合适

27、的LocationProvider。属性或方法名称属性或方法描述AVAILABLE静态整形常量,标示是否可利用OUT_OF_SERVICE静态整形常量,不再服务器TEMPORARILY_UNAVAILABLE静态整形常量,临时不可利用getAccuracy()获得经度getName()获得名称getPowerRequirement()获得电源需求hasMonetaryCost()花钱的还是免费的requiresCell()是否需要访问基本网络requiresNetwork()是否需要Internet网络数据requiresSatellite()是否需要访问卫星supportsAltitude(

28、)是否能够提供高度信息supportsBearing()是否能够提供方向信息supportsSpeed()是否能够提供速度信息获得LocationProvider1、通过名称获得LocationProvider/通过getSystemService方法获得LocationManager实例LocationManagerlocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);/Provider名称常量Stringname=LocationManager.GPS_PROVIDER;/根据Provider

29、名称获得LocationProviderLocationProvidermyProvider;myProvider=locationManager.getProvider(name);2、获得当前可利用的LocationProvider/通过getSystemService方法获得LocationManager实例LocationManagerlocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);/LocationProvider的两种方式Stringname=LocationManager.GP

30、S_PROVIDER;Stringname2=LocationManager.NETWORK_PROVIDER;/根据Provider名称获得LocationProviderLocationProvidermyProvider;myProvider=locationManager.getProvider(name);booleanenabledOnly=true;/获得所有可利用的Provider名称列表Listproviders=locationManager.getProviders(enabledOnly);/根据名称获得ProvidermyProvider=locationManage

31、r.getProvider(name);3、根据Criteria条件获得LocationProviderLocationManagerlocationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);/LocationProvider的查询条件案例Criteriacriteria=newCriteria();/设置精确度criteria.setAccuracy(Criteria.ACCURACY_COARSE);/设置电耗criteria.setPowerRequirement(Criteria.POWER_LOW);/是否需要高度信息criteria.setAltitudeRequired(false);/是否需要方位信息criteria.setBearingRequired(false);/是否需要速度信息crit

温馨提示

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

评论

0/150

提交评论