简介
Android应用程序如果能够记录用户的位置信息会为应用程序增添不少价值。Android应用实现定位功能有两种方式:使用Android系统API的LocationManager、Location类或者使用第三方SDK实现定位功能。然而Android系统API定位功能getLastKnownLocation(String provider)往往返回null(可能是因为系统API使用Google地图服务实现定位,而Google服务在国内不好使)。在国内百度也有提供定位服务,而且响应的SDK也在不断更新,因此在国内开发应用程序使用百度定位SDK实现定位功能是个不错的选择(可恶的是SDK说明太简陋了)。
定位大致原理:应用程序设置参数并请求百度定位SDK,百度定位SDK获取手机当前定位依据(如WIFI,GSM,GPS信息等),并使用此依据像百度后台地图服务发出定位请求,请求成功后百度定位SDK会调用应用注册的回调接口以便通知应用。
接口
要使用百度定位SDK实现应用程序定位功能需要开发者注册百度开发者账号并为应用程序注册申请AccessKey(详细说明请参见 http://developer.baidu.com/map/index.php?title=android-locsdk),并下载响应SDK。
如果仅实现定位功能,主要需要以下三个接口:LocationClient、LocationClientOption、BDLocationListener、BDLocation 。
BDLocation 为位置类,包含纬度、经度、精度等等
LocationClient为定位服务客户端类,是定位SDK核心类,它负责发送定位请求,通知定位结果等,定位相关操作是在后台线程中执行的。
LocationClientOption为LocationClient使用的定位选项,定义了请求的一些详细信息,比如定位模式、定位请求时间间隔、是否获取地址信息等等。
BDLocationListener为定位回调接口,此接口有一个方法onReceiveLocation(BDLocation location),此接口注册给LocationClient对象上,在每次定位后此方法会被调用(在主线程中调用)。
示例
说明:
本示例通过百度定位SDK实现Android应用程序的定位功能,并将定位结果展示。
注意:
在Manifest.xml配置文件application标签内定义 定位服务和定义元数据name/value,百度定位SDK使用次元数据作为请求时的ak。
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="key为自己应用申请的key" />
android:name="com.baidu.lbsapi.API_KEY"
android:value="key为自己应用申请的key" />