第二天任务 集成百度地图实现基本定位功能,并得到定位信息,要点如下:
1、去百度官方下载百度地图SDK,实现注册获取秘钥,(不发布app版本的前提下)基本方法可以参考第一行代码,主要是拿到自己本地的keystore文件,在电脑执行脚本命令:keytools -list -v -keystore <keystore文件路劲> ,获取到android的sdk指纹后,将百度地图集成到工程中,添加必要的权限,对获取的指纹添加包名,就可以激活并使用百度地图api了。但是对于android studio的开发环境,在系统配置文件中要添加特殊的服务和在gradle文件中android编译环境中必添加:
sourceSets{
main { jniLibs.srcDir 'libs' }
2、初步认识定位location功能:
百度地图定位功能是由三个对象共同来完成的 LocationClient、GeoCoder和LocationClientOption,把它们解释成为定位服务端与地理解码(也就是获取地址)和定位服务的设置工具,可见这个过程是先定位,然后获取地址这两个步骤完成的。这三个对象的初始化过程:
LocationClient mLocationClient =new LocationClient(context);
GeoCoder mGeoCoder=GeoCoder.newInstance();
LocationCilentOption mLocationClientOption=new LocationClientOption();
之后,三个对象分别干活,具体如下:
LocationClient对象注册定位监听器
GeoCoder mGeoCoder=GeoCoder.newInstance();
LocationCilentOption mLocationClientOption=new LocationClientOption();
之后,三个对象分别干活,具体如下:
LocationClient对象注册定位监听器
mLocationCilent.registerLocationListener(BDLocationListener mBDLocationListener
);
这里的BDLocationLitener是一个接口,里面封装着定位客服端定位的反馈信息的回调方法。
GeoCoder对象设置地理位置返回值监听器
GeoCoder对象设置地理位置返回值监听器
mGeoCoder.setOnGetGeoCodeResultListener(OnGetGeoCoderResultListener mOnGetGeoCoderResultListener);
这里的OnGetGeoCoderResultListener也是一个接口,里面封装这反馈地理位置信息的回调方法。
LocationCilentOption设置定位的方式,
这里的OnGetGeoCoderResultListener也是一个接口,里面封装这反馈地理位置信息的回调方法。
LocationCilentOption设置定位的方式,
比如打开GPS,定义坐标系类型和隔多长时间定位一次等;最后分别调用LocationClient的
setLocOption(option)和start( )方法启动,定位功能就完成了!接下来我们要处理定位反馈的信息了。
3、用观察者模式实现获取定位的信息。
很显然,BDLocationListener和OnGetGeoCoderResultListener两个接口中的回调方法是需要客户端来实现的,而客户端就是要把反馈信息及时的进行解析出来,为了实现这个业务逻辑,就必须要对这两个对象进行随时监听观察,在它们的回调方法中加上“观察”,让观察者来实现处理返回信息的任务。
下面是示例代码:
下面是示例代码:
如上所述,我们对BDLocationListener和OnGetGeoCoderResultListener两个接口中的回调方法加上了“观察”,把定位的信息及时反馈给观察者处理,实现了对以上两个对象的Observe。再者,我们把它们封装在一个LocationManager对象中,并对其单例化后,对观察者进行了有效的管理。如要再次的调用定位功能,只需要一下两行代码就可以实现。
movieListener是观察者接口观察者接口interface MovieLocationListener的实现对象。由此可见,只要是实现了观察者接口的对象,就能够对BDLocationListener和OnGetGeoCoderResultListener两个进行观察监视。那么作为观察者的客户端,可以在观察者接口的回调方法中自由的发挥对返回的信息进行处理。
这是项目第二天的内容,运用观察者模式对百度地图的两个监听器对象进行观察监视,自定义观察者接口,处理返回的信息。