Android-Google的定位和地图-详细版

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

Android——定位和地图

Location and Maps

Quickview

∙你的应用程序可以利用Android提供的定位框架(location framework)来确定设备的位置和方向,并且能够进行更新。

∙可以利用Google Maps外部类库来显示和管理地图数据

开发基于地理位置的服务可以使用android.location类和Google Maps 外部类库来开发。Location Services

可以利用android.location包来访问设备中的定位服务。Location framework的核心组件是LocationManager系统服务,该服务提供了确定位置的APIs和内置设备的方向(应该是电子罗盘了,如果可用的话)。

要获得一个LocationManager的实例,无需直接初始化,而是通过调

用 getSystemService(Context.LOCATION_SERVICE)来获取一个实例。

一旦获得一个LocationManager的实例,你就可以在程序中做如下三件事:

∙Query for the list of all LocationProviders for the last known user location.

∙注册/解注册到一个定位提供商(specified either by criteria or name)来周期性地更新用户的当前位置。

∙Register/unregister for a given Intent to be fired if the device comes within

a given proximity (specified by radius in meters) of a given lat/long. Google Maps External Library

Google提供的地图外部类库——com.google.android.maps package. 这个包的类提供了内建的地图碎片的下载、翻译和缓存, 此外,还有很多显示选项和控制。

在这个类库中的核心类是com.google.android.maps.MapView, 是ViewGroup的子类。一个MapView显示从Google Maps服务获得的图形和数据。当MapView获得焦点的时候,它将捕捉用户按下的键和触摸姿势来显示和放缩地图,包括管理额外的地图标题的网络请求。它还包含了供用户控制地图的必须的UI元素。你的应用程序还能够使用MapView类提供的方法来编程控制MapView,并能够在地图上绘制一些覆盖的按钮等UI 元素。

Google Maps外部类库不是标准的Android库的一部分,所以它可能并不包含在一些编译好的Android设备中,也不包含在Android SDK中。但是你能够使用

com.google.android.maps包中的类进行开发,Google Maps外部类库将会作为Android SDK的Google APIs插件存在。

获取更多的Google Maps外部类库的信息,以及如何下载使用Google APIs插件,可以访问:

For your convenience, the Google APIs add-on is also available as a downloadable component from the Android SDK and AVD Manager (see Adding SDK Components). Note: In order to display Google Maps data in a MapView, you must register with the Google Maps service and obtain a Maps API Key. For information about how to get a Maps API Key, see Obtaining a Maps API Key.

Obtaining User Location

Quickview

∙网络位置提供商提供好的位置数据而且需要GPS

∙获取用户位置会消耗大量的电力,所以要注意你能花费多长的时间来更新位置。Key classes

要了解用户哪儿需要你的应用程序更加智能以传递更好的信息给用户。当开发一个基于位置的应用程序时,你能够利用GPS和Android的网络位置提供商来获取用户位置。尽管GPS是更加精确地,但它仅在户外使用,它也会快速地消耗大量的电量,并且不能尽快地返回位置信息。Android的网络位置提供商使用cell tower(基塔)和Wi-FI信令来确定用户的位置,不管用户在户内还是户外,提供用户的位置信息,而且速度更快,消耗电量更少。为了获取到用户位置,你的应用程序可以利用GPS和网络位置提供商,或者只是使用其中一个。

Challenges in Determining User Location

在一个移动设备上获取用户位置可能是结构复杂的。之所以读取用户位置出错或者不精确,有以下几方面的原因。

∙Multitude of location sources

GPS, Cell-ID, and Wi-Fi can each provide a clue to users location. Determi

ning which to use and trust is a matter of trade-offs in accuracy, speed, an

d battery-efficiency.

∙User movement

Because the user location changes, you must account for movement by re-

estimating user location every so often.

∙Varying accuracy

Location estimates coming from each location source are not consistent in t

heir accuracy. A location obtained 10 seconds ago from one source might b

e more accurate than the newest location from another or same source.

上述问题使得获取一个可靠的用户位置是比较困难的。这个文档提供信息帮助你解决这些问题以获取更可靠的位置信息。它也提供一些方法,这些方法在你的应用程序中可以使用,以提供给用户一个精确的和灵敏的地理位置体验。

在详细讲述上面描述的一些位置错误之前,这儿先介绍你怎样能够获取到用户的位置信息。在Android上,是通过回调函数来获取用户的位置的。调用LocationManager的requestLocationUpdates表示请求接收位置更新,需要传递一个LocationListener给它。传递给它的LocationListener必须实现几个回调函数,然后当用户位置更新或服务状态改变的时候,Location Manager就能够调用这些方法来进行应用程序方面的处理。。

下面的示例代码展示了怎样定义LocationListener和请求一个位置更新:

view sourceprint?

1// Acquire a reference to the system Location Manager

1LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

1// Define a listener that responds to location updates

1LocationListener locationListener = new LocationListener() {

1public void onLocationChanged(Location location) {

1// Called when a new location is found by the network location provider.

1makeUseOfNewLocation(location);

1}

1

{}

相关文档
最新文档