android传感器和位置服务课件.ppt

上传人(卖家):三亚风情 文档编号:3229008 上传时间:2022-08-08 格式:PPT 页数:42 大小:412.52KB
下载 相关 举报
android传感器和位置服务课件.ppt_第1页
第1页 / 共42页
android传感器和位置服务课件.ppt_第2页
第2页 / 共42页
android传感器和位置服务课件.ppt_第3页
第3页 / 共42页
android传感器和位置服务课件.ppt_第4页
第4页 / 共42页
android传感器和位置服务课件.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

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

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

3、oid中传感器的种类中传感器的种类Google Android操作系统中内置了很多传感器,在部分游戏或软件中可以自动识别屏幕的横屏、竖屏方向来改变屏幕显示布局。下面是Android中支持的几种传感器:SenSor。TYPE_ACCELEROMETER:加速度传感器。Sensor。TYPE_GYROSCOPE:陀螺仪传感器。Sensor。TYPE_LIGHT:亮度传感器。Sensor。TYPE_MAGNETIC_FIELD:地磁传感器。Sensor。TYPE_ORIENTATION:方向传感器。Sensor。TYPE_PRESSURE:压力传感器。Sensor。TYPE_PROXIMITY:近程

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

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

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

7、的参数包括一个SensorEvent对象,该对象主要包括一组浮点数,表示 传感器获得的方向、加速度等信息。例如,以下代码可以取得其值: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,

9、y,z方向的定义是以水平放置在的手机的右下脚为参照系坐标原点(如下图)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.8 m/s2.反之若以手机以2 m/s2 的加速度坠落,则

10、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.815162GRAVITY_URANUS天王星8.69GRAVITY_

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

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

13、,-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将光线强度分为不同的等级,每一个等级的最大值由一个常量表示,这些常量都定义在SensorManager类中,代码如下:pu

14、blic 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 float LIGHT_CLOUDY=100.0f;public

15、 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轴旋转的角速度。当手机逆时针旋转时,角速度为正值,顺时针旋转时,角速度为负值。陀螺仪传感器经常被用来计算手机已转动的角度Android感应模拟器感应模拟器下载地址http:/ install apk

16、_path)运行运行SensorSimulatorSettings,输入输入IP Address 和和socket port number,使用传感器模拟器类库的步骤为使用传感器模拟器类库的步骤为:a.在构建路径中加入lib/sensorsimulator-lib-x.x.x.jarb.将将sensor_manager_original=(SensorManager)getSystemService(Context.SENSOR_SERVICE);用sensor_manager_present=SensorManagerSimulator.getSystemService(this,SENSO

17、R_SERVICE);sensor_manager_present.connectSimulator();代替c.一般在一般在onResume()方法中为传感器注册监听器,在方法中为传感器注册监听器,在onStop()方法中取消注册方法中取消注册d.实现实现SensorEventListener接口,重写接口,重写onAccuracyChanged(Sensor sensor,in accuracy)和和onSensorChanged(SensorEvent event)方法即可方法即可 注意点:大家可能会担心,我如果为了测试在代码中使用注意点:大家可能会担心,我如果为了测试在代码中使用Ope

18、nIntents组织的组织的SensorSimulator项目,那么到发布的时候还要大量修改源代码,这一点在项目,那么到发布的时候还要大量修改源代码,这一点在OpenIntents组织设计组织设计SensorSimulator项目的时候就已经想到了,如果你连接项目的时候就已经想到了,如果你连接的设备并不是传感器模拟器,那么的设备并不是传感器模拟器,那么SensorManagerSimulator实际上是调用实际上是调用SensorManager完成获取传感器数据的功能,所以这个时候不需要修改代码完成获取传感器数据的功能,所以这个时候不需要修改代码,依然获取的是设备上传感器的数据。,依然获取的是

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

20、Map API Key(1)使用Google帐号登入APIs Console(https:/ 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 该 命

22、令中,-keystore ophone.keystore 表示生成的证书,可以加上路径(默认在用户主目录下);-alias ophone 表示证书的别名是ophone;-keyalg RSA 表示采用的RSA算法;-validity 20000表示证书的有效期是20000天。Eclipse工具生成打开Eclipse-选择你要签名的项目-右击-android tools-Export signed Application package.GPSGPS(Global Position System,全球定位系统)是20世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统。24颗GPS卫

23、星在离地面2万2千功力的高空上,以12小时的周期环绕地球运行,使得在任意时刻,在地面的任意一点都可以同时观测到4颗以上的卫星。由于卫星的位置精确,在GPS观测中,我们可以得到卫星到接收机的距离,利用三维坐标中的距离公式和3颗卫星,就可以组成3个方程式,解出观测点的位置(X、Y、Z)。考虑到卫星的时钟与接收机时钟之间的误差,实际上有4个未知数,X、Y、Z和钟差,因而需要引入第4颗卫星,形成4个方程式求解,从而得到观测点的经纬度和高程。LocationManager和LocationProvider LocationManager位于android.location包中,该类提供了系统位置访问的方

24、法。LocationProvider定义了位置服务的提供方法,例如,是由GPS设备提供还是通过网络提供等。1、LocationManager通过LocationManager可以实现设备的定位、跟踪和趋近提示。可以通过getSystemService(Context.LOCATION_SERVICE)方法获得该类的实例。属性或方法名称属性或方法描述GPS_PROVIDER静态字符串常量,表明LocationProvider是GPSNETWORK_PROVIDER静态字符串常量,表明LocationProvider是网络addGpsStatusListener(Listener listener

25、)添加一个GPS状态监听器addProximityAlert(double latitude,double longitude,float radius,long expiration,PendingIntent intent)添加一个趋近警告getAllProviders()获得所有LocationProvider列表getBestProvider(Criteria criteria,boolean enabledOnly)根据Criteria返回最适合的LocationProvidergetLastKnownLocation(String provider)根据Provider获得位置信息

26、getProvider(String name)获得指定名称的LocationProvidergetProviders(boolean enabledOnly)获得可利用的LocationProvider列表removeProximityAlert(PendingIntent intent)删除趋近警告requestLocationUpdates(String provider,long minTime,float minDistance,LocationListener listener)通过给定的Provider名称,周期性的通知当前Activity2、LocationProvider用来

27、描述位置提供者,设置位置提供者的一些属性。可以通过Criteria类来为LocationProvider设置条件,获得合适的LocationProvider。属性或方法名称属性或方法描述AVAILABLE静态整形常量,标示是否可利用OUT_OF_SERVICE静态整形常量,不再服务器TEMPORARILY_UNAVAILABLE静态整形常量,临时不可利用getAccuracy()获得经度getName()获得名称getPowerRequirement()获得电源需求hasMonetaryCost()花钱的还是免费的requiresCell()是否需要访问基本网络requiresNetwork(

28、)是否需要Internet网络数据requiresSatellite()是否需要访问卫星supportsAltitude()是否能够提供高度信息supportsBearing()是否能够提供方向信息supportsSpeed()是否能够提供速度信息获得LocationProvider1、通过名称获得LocationProvider/通过getSystemService方法获得LocationManager实例 LocationManager locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);/

29、Provider名称常量 String name=LocationManager.GPS_PROVIDER;/根据Provider名称获得LocationProvider LocationProvider myProvider;myProvider=locationManager.getProvider(name);2、获得当前可利用的LocationProvider/通过getSystemService方法获得LocationManager实例 LocationManager locationManager=(LocationManager)getSystemService(Context.

30、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 providers=locat

31、ionManager.getProviders(enabledOnly);/根据名称获得Provider myProvider=locationManager.getProvider(name);3、根据Criteria条件获得LocationProviderLocationManager locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);/LocationProvider的查询条件案例 Criteria criteria=new Criteria();/设置精确度 criteria.setA

32、ccuracy(Criteria.ACCURACY_COARSE);/设置电耗 criteria.setPowerRequirement(Criteria.POWER_LOW);/是否需要高度信息 criteria.setAltitudeRequired(false);/是否需要方位信息 criteria.setBearingRequired(false);/是否需要速度信息 criteria.setSpeedRequired(false);/是否产生费用 criteria.setCostAllowed(true);/获得符合条件最好的Provider String bestProvider=

33、locationManager.getBestProvider(criteria,true);/获得符合条件的Provider List matchingProviders=locationManager.getProviders(criteria,false);定位和跟踪 定位就是确定设备的位置,在这里用到了另外一个Location类,该类描述了当前设备的地理位置信息,包括经纬度、方向、高度和速度等。Location常见属性和方法属性或方法名称属性或方法描述getLongitude()获得经度getLatitude()获得纬度getAccuracy()获得精确度getAltitude()获得

34、高度getBearing()获得方向getSpeed()获得速度 跟踪是通过注册监听器来实现的。声明LocationListener监听器,在onLocationChanged方法中实现位置的实时变化,通过locationManager类的requestLocationUpdates方法注册监听器,onLocationChanged方法被调用趋近警告 如果有这样一种位置服务,能够对我们进入或退出某个设定的区域进行提示,这样的应用是很有意义的。LocationManager提供了这一方法实现这一功能:addProximityAlert(double latitude,double longitu

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(android传感器和位置服务课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|