现在的位置: 首页 > 综合 > 正文

Android位置策略(一)

2013年08月01日 ⁄ 综合 ⁄ 共 2084字 ⁄ 字号 评论关闭

本文译自:http://developer.android.com/guide/topics/location/strategies.html

让你的应用程序了解用户的位置,可以更加智能的给用户发送更好的信息。在开发一款Android版的位置感知应用程序时,你能够利用GPS和Android的网络位置提供器来获取用户的位置。尽管GPS是最准确的,但它只能在户外工作,并且会快速的消耗电池电量,同时返回的位置信息也没有用户想要的那样快。Android的网络位置提供器使用蜂窝基站和Wi-Fi信号来判定用户位置,使用这种方式,可以在屋内和户外来提供位置信息,它响应快,并且耗电很少。要在你的应用程序中获取用户的位置,你能够同时使用GPS和网络位置提供器,或其中一种。

在确定用户位置中所面临的挑战

从移动设备上获取用户位置可能是复杂的。有几个原因可能导致读取的位置(不管使用哪种方式)包含错误和不准确信息。以下是在用位置中所包括的一些错误源:

1. 众多的位置源

GPS、Cell-ID和Wi-Fi都能够提供用户位置的线索。决定使用和信任哪条线索主要要权衡精度、速度和电池效率。

2. 用户的移动

因为用户位置的改变,你必须要因此而经常的重新计算用户的位置。

3. 不同的精度

因为位置估算来源与不同的位置探测源,所以它们的精度并不一致。从一个位置探测源10秒前获取的位置,可能比从另一个位置探测源获取的位置或同一个位置探测源所获取的位置要更准确。

这些问题使得获取一个稳定可靠的用户位置变的很困难。本文所提供的信息会帮助你在遇到这些问题的挑战时,来获取稳定可靠的位置信息。它还提供了一些建议,以便你能够在应用程序中提供准确的反应迅速的位置体验。

请求位置更新

在解决上述位置错误之前,首先要介绍如何在Android上获取用户位置。

通过回调的方式来获得在Android工作的用户位置。通过调用带有LocationListener对象的requestLocationUpdates()方法来指示你想要接收的来自LocationManager对象(位置管理器)的位置更新。你的locationListener接口必须实现位置管理器在用户位置改变或服务改变状态时所要调用的几个回调方法。

例如,下列代码显示了如何定义一个LocationListener接口,以及如何请求位置更新:

// Acquire a reference to the system Location Manager

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

// Define a listener that responds to location updates

LocationListener locationListener = new LocationListener() {

   
public void onLocationChanged(Location location) {

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

     
makeUseOfNewLocation(location);

   
}

    
public void onStatusChanged(String provider, int status, Bundle extras) {}

    
public void onProviderEnabled(String provider) {}

    
public void onProviderDisabled(String provider) {}

 
};

// Register the listener with the Location Manager to receive location updates

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
locationListener);

requestLocationUpdates()方法中的第一个参数是要使用的位置提供器的类型(在这个例子中,是基于蜂窝基站和Wi-Fi的网络位置提供器)。你能够用第二和第三个参数来控制你的监听器接收位置更新的频率---第二个参数是两个通知之间的最小间隔,第三个参数是两个通知之间位置改变的最小距离,把它们都设置为0,尽可能的提高位置通知的频率。最后一个参数是你的LocationListener,它用于接受位置更新的回调。

要请求来自GPS提供器的位置更新,用GPS_PROVIDER来代替NETWORK_PROVIDER。你还能够通过调用2~1NETWORK_PROVIDERrequestLocationUpdates()方法和一次的GPS_PROVIDERrequestLocationUpdates()方法来请求来自GPS和网络位置提供器的位置更新。

 

抱歉!评论已关闭.