Presentation is loading. Please wait.

Presentation is loading. Please wait.

第11章 Android GPS位置服务与地图编程

Similar presentations


Presentation on theme: "第11章 Android GPS位置服务与地图编程"— Presentation transcript:

1 第11章 Android GPS位置服务与地图编程
QQ号: QQ群: (Android编程-清华版) (公共版) 网络资源:

2 主要内容

3 11.1 GPS位置服务编程 位置服务(Location-Based Services,LBS),又称定位服务或基于位置的服务,融合了GPS定位、移动通信、导航等多种技术,提供了与空间位置相关的综合应用服务。

4 支持位置服务的核心API Android为支持位置服务,提供了android.location包,该包中包含了与位置信息密切相关的类和接口,主要有:LocationManager、LocationProvider、Location、LocationListener。 LocationManager(定位管理者)类是访问android系统位置服务的入口,所有定位相关的服务、对象都将由该类的对象来产生。和其他服务一样,程序不能直接创建LocationManager对象,而是通过Context的getSystemService()方法来获取。 LocationManager locMg=getSystemService(Context.LOCATION_SERVICE) ;

5 11.1.1支持位置服务的核心API 一旦得到了LocationManager对象,即可调用LocationManager类的方法获取定位相关的服务和对象,例如获取最佳定位提供者、实现临近警报功能等,该类的常用方法如下: public String getBestProvider (Criteria criteria, boolean enabledOnly):根据指定条件返回最优的LocationProvider;criteria表示过滤条件,enabledOnly表示是否要求处于启用状态; public Location getLastKnownLocation (String provider):根据LocationProvider获取最近一次已知的Location,provider表示提供上次位置的LocationProvider名称; public LocationProvider getProvider (String name):根据名称返回LocationProvider; public List<String> getProviders (boolean enabledOnly):获取所有可用的LocationProvider; public void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent):通过指定的LocationProvider周期性地获取定位信息,并通过intent启动相应的组件,进行事件处理,provider表示LocationProvider的名称,mimTime表示每次更新的时间间隔,单位为毫秒,minDistance表示更新的最近位置,单位为米,intent每次更新时启动的组件;

6 11.1.1支持位置服务的核心API LocationProvider(定位提供者)类是对定位组件的抽象表示,用来提供定位信息,能够周期性的报告设备的地理位置,Android中支持多种LocationProvider,它们以不同的技术提供设备的当前位置,区别在于定位的精度、速度和成本等方面。常用的LocationProvider主要有以下两种。 network:由LocationManager.NETWORK_PROVIDER常量表示,代表通过网络获取定位信息的Location Provider对象; gps:由LocationManager.GPS_PROVIDER常量表示,代表通过GPS获取定位信息的LocationProvider对象。 GPS相对来说精度更高,但它只能在户外工作,很费电,并且不能像用户期望的那样立即就能返回位置信息,而网络位置提供器使用手机发射塔或Wi-Fi信号来判断用户位置,在室内室外都能工作、响应速度快,并且更加省电。

7 11.1.1支持位置服务的核心API LocationProvider类的常用方法如下:
int getAccuracy():返回该LocationProvider的精度; String getName():返回该LocationProvider的名称; boolean hasMonetaryCost():返回该LocationProvider是收费的还是免费的; boolean supportsAltitude():判断该LocationProvider是否支持高度信息; boolean supportsBearing():判断该LocationProvider是否支持方向信息; boolean supportsSpeed():判断该LocationProvider是否支持速度信息; Location类 就是代表位置信息的抽象类,通过Location可获取定位信息的精度、高度、方向、纬度、经度、速度以及该位置的LocationProvider等信息。

8 11.1.1支持位置服务的核心API LocationListener接口 用于监听定位信息的监听器,必须在定位管理器中注册该对象,这样在位置发生变化的时候就会触发相应的方法进行事件处理,该监听器包含的方法如下: public abstract void onLocationChanged (Location location):位置发生改变时回调该方法; public abstract void onProviderDisabled (String provider):Provider禁用时回调该方法; public abstract void onProviderEnabled (String provider):Provider启用时回调该方法; public abstract void onStatusChanged (String provider, int status, Bundle extras):当Provider状态发生变化时回调该方法;

9 11.1.2 简单位置服务应用 获取位置信息的通用步骤为:
①获取系统的LocationManager对象; ②使用Locationmanager,通过指定LocationProvider来获取定位信息,定位信息由Location来对象来表示; ③从Location对象中获取定位信息; 案例:获取位置信息 【示例代码:codes\10\LocationService】

10 11.2 Google Map服务编程 前面一节介绍了Android提供的API获取设备的定位信息,但得到的只是一些难记的经纬度的数值,对用户来说没有多大用处。 如果能将这些经纬度与我们的生活联系起来,以更形象直观的方式显示出来将会吸引更多的用户。本节将介绍Google地图的使用,并将位置信息和地图结合起来开发定位应用程序。

11 11.2.1使用Google地图的准备工作 Android系统默认并不支持调用Google Map,为了正常调用Google Map服务,需要先进行如下准备工作。 1、获取Google Map API Key 为了在应用程序中调用Google Map,必须先获取Google Map API的Key,步骤如下: 1)单击Eclipse的“Window”菜单,然后选择Preferences菜单项,弹出如图所示对话框;

12 11.2.1使用Google地图的准备工作 2)展开左边Android节点,选中Build子节点,即可在对话框中看到默认调试的keystore的存储位置,在此为D:\androiddeveloper\AVD\.android\debug.keystore,默认为你的模拟器文件的存储目录下。接下来根据keystore来生成Google API的Key; 3)使用JDK提供的keytool工具为Android keystore生成认证指纹,启动命令行窗口输入如下命令。keytool –list –keystore <Android keystore 的存储位置>,在此为: keytool –list –keystore D:\androiddeveloper\AVD\.android\debug.keystore

13 11.2.1使用Google地图的准备工作 注意:如果运行keytool工具时,提示”找不到该命令”,则说明还未在PATH环境变量中添加java安装目录下的bin路径,该路径下包含keytool.exe工具。如果keystore存储路径中包含空格时,也会提示错误,无法生成认证指纹,此时需修改AVD的存储路径,做法是在环境变量中,添加Android_SDK_Home变量,变量值为电脑上的任意路径,不包含空格。设置完成后,需重启Eclipse。 4)记住上面生成的认证指纹,登录 android/maps-api-signup站点,界面如图所示;

14 11.2.1使用Google地图的准备工作 5)在界面的文本框中输入keytool工具生成的认证指纹,单击Generate API Key 按钮,系统显示如图(左)所示的页面。 6)在页面中输入自己的Google账户,如果还没有Google账户,可以先注册一个,如果已经有了Google账号,输入Google账户和密码,登录后如图(右)所示。

15 11.2.1使用Google地图的准备工作 2、创建支持Google Map API的AVD
Android SDK默认并不支持Google Map,为了得到支持Google Map的SDK,必须为Android SDK添加相应的插件。启动Android的SDK Manager.exe工具,显示如图(左)所示的窗口,勾选Google API前面的复选框,然后单击Install package按钮。 安装完毕后,需要创建一个支持Google Map的模拟器,单击Eclipse中的模拟器管理界面,新建一个模拟器,如图(右)所示。

16 11.2.2 根据位置信息在地图上定位 Google地图核心API介绍
为了使开发者更容易在应用程序中添加强大的地图功能,Google提供了操作地图的API,存放在com.google.android.maps下。包括地图的显示、缩放、定位、标记等,核心API如下: MapView:用于显示地图的View组件。它派生自ViewGroup,它必须和MapActivity配合使用,而且只能被MapActivity创建,这是因为MapView需要通过后台的线程来连接网络或文件系统,这些线程要由MapActivity来管理。当MapView获取的焦点时,它将捕捉按键和触摸手势,自动地平移和缩放地图,还可以在地图上绘制许多Overlay类型标记。 MapActivity:该类是用于显示地图的Activity类,是一个抽象类,任何想要显示MapView的Activity都需要派生自MapActivity,并且在onCreate()中,都要创建一个MapView实例。 MapController:用于控制地图的移动、缩放等的工具类。

17 11.2.2 根据位置信息在地图上定位 GeoPoint:是一个包含经纬度位置的对象。
Overlay:是一个可显示在地图之上的可绘制的对象,常用于绘制标记。如果需要在地图上标注一些图标文字等信息,就需要使用Overlay,首先要将地图上的经度和纬度转换成屏幕上实际的坐标,才能将信息绘制上去。Map API中提供了Projection.toPixels(GeoPoint in,Point out)方法,可以将经度和纬度转换成屏幕上的坐标。然后实现Overlay中的draw()方法才能在地图上绘制信息。 GeoPoint:是一个包含经纬度位置的对象。 案例:输入一个经纬度即在地图上显示该位置信息,并在地图上标记出当前的位置 。【示例代码:codes\chapter11\NavigationTest】

18


Download ppt "第11章 Android GPS位置服务与地图编程"

Similar presentations


Ads by Google