百度地图LBS开发平台推出了Android SDK接口,包括了Android地图SDK、Android定位SDK、Android导航SDK、Android全景SDK和Android离线导航等众多接口。有了百度地图强大的后台数据的支撑,为我们软件开发提供了更大方便性,不得不感叹大数据为我们的生活带来了更大的便捷性。百度地图如何在Android平台上进行配置,这里就不再赘述,具体的可参照官网链接:http://developer.baidu.com/map/index.php?title=androidsdk。
在这里,首先讲一下如何利用百度地图来获取当前的位置信息。由于App开发过程中需要多次获取当前的定位信息,故本人把这部分封装成一个单独的类,如下类LocationHelper:
1、创建当前位置定位帮助类:LocationHelper
- package com.busleep.baidu;
- import android.content.Context;
- import com.baidu.location.BDLocation;
- import com.baidu.location.BDLocationListener;
- import com.baidu.location.LocationClient;
- import com.baidu.location.LocationClientOption;
- import com.busleep.listener.MrLocationListener;
- public class LocationHelper {
- private LocationClient mLocationClient=null;
- /**
- * 接受百度地图定位的回调类,该类是派生于百度地图的一个地图定位的监听类,用于定位后信息的返回。
- */
- private MyBDLocationListener mMyBDLocationListener=null;
- /**
- * 自定义的定位回调接口监听器,该接口是自定义的一个接口,用于在使用该对象时,把定位信息进行回调;
- */
- private MrLocationListener mLocationListener=null;
- private Context ct;
- public LocationHelper(Context ct){
- this.ct=ct;
- }
- /**
- * 设置自定义的监听器;
- * @param locationListener
- */
- public void setMrLocationListener(MrLocationListener locationListener){
- this.mLocationListener=locationListener;
- }
- /**
- * 停止定位;
- */
- public void stop(){
- if(mLocationClient!=null){
- mLocationClient.stop();
- }
- }
- /**
- * 启动定位;
- */
- public void start(){
- //新建百度地图定位客户端类;
- mLocationClient=new LocationClient(ct);
- mMyBDLocationListener=new MyBDLocationListener();
- //注册监听器;
- mLocationClient.registerLocationListener(mMyBDLocationListener);
- //创建定位选项;
- LocationClientOption option = new LocationClientOption();
- option.setOpenGps(true); // 打开gps;
- option.setCoorType("bd09ll"); // 设置坐标类型;
- option.setScanSpan(1000); // 设置定位间隙,每隔1秒定位一次;
- option.setAddrType("all"); // 注意:该参数是设置地址类型,如果不设置就获取不到地址信息;
- mLocationClient.setLocOption(option);
- mLocationClient.start();
- }
- /**
- * 实现百度地图的接口;
- * @author Render;
- *
- */
- public class MyBDLocationListener implements BDLocationListener{
- @Override
- public void onReceiveLocation(BDLocation location) {
- if(mLocationListener!=null){
- //回调自定义的监听对象;
- mLocationListener.onReceiveLocation(location);
- }
- }
- @Override
- public void onReceivePoi(BDLocation arg0) {
- // TODO Auto-generated method stub
- }
- }
- }
2、创建完该定位帮助类后,接下来就是如何使用该类,本文直接在app的应用对象中进行使用,代码如下:
- package com.busleep.app;
- import com.baidu.location.BDLocation;
- import com.baidu.mapapi.SDKInitializer;
- import com.baidu.mapapi.model.LatLng;
- import com.busleep.baidu.LocationHelper;
- import com.busleep.config.Constant;
- import com.busleep.listener.MrLocationListener;
- import android.app.Application;
- /**
- * 自定义的Android的应用类,进行一些接口的初始化操作,如百度地图;
- * @author Render
- *
- */
- public class CustomApplication extends Application implements MrLocationListener{
- private static CustomApplication mCustomApplication=null;
- /**
- * 记录当前用户的位置;
- */
- public static BDLocation mLastLocation=null;
- /**
- * 定位帮助类;
- */
- private LocationHelper locationHelper=null;
- public static CustomApplication getInstance() {
- return mCustomApplication;
- }
- public double getLongtitude(){
- if(mLastLocation!=null)
- {
- return mLastLocation.getLongitude();
- }
- return 0.0;
- }
- public double getLatitude() {
- if(mLastLocation!=null)
- {
- return mLastLocation.getLatitude();
- }
- return 0.0;
- }
- /**
- * 获取当前的位置;
- * @return
- */
- public LatLng getCurrentLatLng(){
- return new LatLng(getLatitude(), getLongtitude());
- }
- @Override
- public void onCreate() {
- super.onCreate();
- mCustomApplication=this;
- //初始化百度地图;
- SDKInitializer.initialize(this);
- //定位当前用户的位置;
- locationHelper=new LocationHelper(getApplicationContext());
- //设置自定义监听器;
- locationHelper.setMrLocationListener(this);
- //启动定位;
- locationHelper.start();
- }
- @Override
- public void onReceiveLocation(BDLocation location) {
- if(mLastLocation==null){
- mLastLocation=location;
- //获取当前城市和当期的详细地址信息位置;
- Constant.city=location.getCity();
- Constant.address= location.getAddrStr();
- }
- //停止定位;
- locationHelper.stop();
- }
- }
3、总结:
通过把百度地图的定位功能封装成单一的LocationHelper类,主要是为了方便在后续app开发中多次使用,当然各位朋友也可以根据自己的需求来进行使用。
最后,发表一下感言:由于本人一直是做C++开发,现在也稍微接触一下Java开发,发现Java中接口真的太好用了,C++中如果实现一个接口需要定义纯虚函数来实现,并且是通过派生的方式,或者多继承的方式,相对于Java来说接口的实现使得程序更加简洁易懂。
以上代码由本人自己撰写,如有雷同,纯属巧合,有什么不妥之处或者需要再优化之处,望各位兄台不啬指教