开发定位以及获取当前详细地址

来源:互联网 发布:社交网络之类的电影 编辑:程序博客网 时间:2024/05/06 17:08


   百度地图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

[java] view plaincopyprint?
  1. package com.busleep.baidu;  
  2. import android.content.Context;  
  3.   
  4. import com.baidu.location.BDLocation;  
  5. import com.baidu.location.BDLocationListener;  
  6. import com.baidu.location.LocationClient;  
  7. import com.baidu.location.LocationClientOption;  
  8. import com.busleep.listener.MrLocationListener;  
  9.   
  10. public class LocationHelper {  
  11.       
  12.     private LocationClient mLocationClient=null;  
  13.       
  14.     /** 
  15.      * 接受百度地图定位的回调类,该类是派生于百度地图的一个地图定位的监听类,用于定位后信息的返回。 
  16.  
  17.      */  
  18.     private MyBDLocationListener mMyBDLocationListener=null;  
  19.       
  20.     /** 
  21.      * 自定义的定位回调接口监听器,该接口是自定义的一个接口,用于在使用该对象时,把定位信息进行回调; 
  22.      */  
  23.     private MrLocationListener mLocationListener=null;  
  24.       
  25.     private Context ct;  
  26.       
  27.     public LocationHelper(Context ct){  
  28.           
  29.         this.ct=ct;  
  30.     }  
  31.       
  32.     /** 
  33.      * 设置自定义的监听器; 
  34.      * @param locationListener 
  35.      */  
  36.     public void setMrLocationListener(MrLocationListener locationListener){  
  37.           
  38.         this.mLocationListener=locationListener;  
  39.     }  
  40.       
  41.     /** 
  42.      * 停止定位; 
  43.      */  
  44.     public void stop(){  
  45.           
  46.         if(mLocationClient!=null){  
  47.               
  48.             mLocationClient.stop();  
  49.         }  
  50.     }  
  51.       
  52.     /** 
  53.      * 启动定位; 
  54.      */  
  55.     public void start(){  
  56.   
  57.         //新建百度地图定位客户端类;  
  58.   
  59.         mLocationClient=new LocationClient(ct);  
  60.         mMyBDLocationListener=new MyBDLocationListener();  
  61.   
  62.         //注册监听器;  
  63.   
  64.         mLocationClient.registerLocationListener(mMyBDLocationListener);  
  65.          
  66.   
  67.         //创建定位选项;        
  68.   
  69.         LocationClientOption option = new LocationClientOption();  
  70.         option.setOpenGps(true);            // 打开gps;  
  71.         option.setCoorType("bd09ll");   // 设置坐标类型;  
  72.         option.setScanSpan(1000);         // 设置定位间隙,每隔1秒定位一次;  
  73.         option.setAddrType("all");         // 注意:该参数是设置地址类型,如果不设置就获取不到地址信息;  
  74.           
  75.         mLocationClient.setLocOption(option);  
  76.         mLocationClient.start();  
  77.     }  
  78.       
  79.     /** 
  80.      * 实现百度地图的接口; 
  81.      * @author Render; 
  82.      * 
  83.      */  
  84.     public class MyBDLocationListener implements BDLocationListener{  
  85.   
  86.         @Override  
  87.         public void onReceiveLocation(BDLocation location) {  
  88.               
  89.             if(mLocationListener!=null){  
  90.   
  91.                 //回调自定义的监听对象;  
  92.   
  93.                 mLocationListener.onReceiveLocation(location);  
  94.             }  
  95.         }  
  96.   
  97.         @Override  
  98.         public void onReceivePoi(BDLocation arg0) {  
  99.             // TODO Auto-generated method stub  
  100.               
  101.         }  
  102.     }  
  103. }  

2、创建完该定位帮助类后,接下来就是如何使用该类,本文直接在app的应用对象中进行使用,代码如下:

[java] view plaincopyprint?
  1. package com.busleep.app;  
  2.   
  3. import com.baidu.location.BDLocation;  
  4. import com.baidu.mapapi.SDKInitializer;  
  5. import com.baidu.mapapi.model.LatLng;  
  6. import com.busleep.baidu.LocationHelper;  
  7. import com.busleep.config.Constant;  
  8. import com.busleep.listener.MrLocationListener;  
  9.   
  10. import android.app.Application;  
  11.   
  12. /** 
  13.  * 自定义的Android的应用类,进行一些接口的初始化操作,如百度地图; 
  14.  * @author Render 
  15.  * 
  16.  */  
  17. public class CustomApplication  extends Application implements MrLocationListener{  
  18.   
  19.     private static CustomApplication mCustomApplication=null;  
  20.       
  21.     /** 
  22.      * 记录当前用户的位置; 
  23.      */  
  24.     public static BDLocation mLastLocation=null;  
  25.      
  26.     /** 
  27.      * 定位帮助类; 
  28.      */  
  29.     private LocationHelper locationHelper=null;  
  30.       
  31.     public static CustomApplication getInstance() {  
  32.           
  33.         return mCustomApplication;  
  34.     }  
  35.   
  36.     public double getLongtitude(){  
  37.           
  38.         if(mLastLocation!=null)  
  39.         {  
  40.             return mLastLocation.getLongitude();  
  41.         }  
  42.           
  43.         return 0.0;  
  44.     }  
  45.       
  46.     public double getLatitude() {  
  47.           
  48.         if(mLastLocation!=null)  
  49.         {  
  50.             return mLastLocation.getLatitude();  
  51.         }  
  52.     
  53.         return 0.0;  
  54.     }  
  55.       
  56.     /** 
  57.      * 获取当前的位置; 
  58.      * @return 
  59.      */  
  60.     public LatLng getCurrentLatLng(){  
  61.           
  62.         return new LatLng(getLatitude(), getLongtitude());  
  63.     }  
  64.       
  65.     @Override  
  66.     public void onCreate() {  
  67.           
  68.         super.onCreate();  
  69.           
  70.         mCustomApplication=this;  
  71.           
  72.         //初始化百度地图;  
  73.         SDKInitializer.initialize(this);  
  74.           
  75.         //定位当前用户的位置;  
  76.         locationHelper=new LocationHelper(getApplicationContext());  
  77.           
  78.         //设置自定义监听器;  
  79.         locationHelper.setMrLocationListener(this);  
  80.   
  81.         //启动定位;  
  82.         locationHelper.start();  
  83.     }  
  84.       
  85.     @Override  
  86.     public void onReceiveLocation(BDLocation location) {  
  87.           
  88.         if(mLastLocation==null){  
  89.           
  90.             mLastLocation=location;  
  91.               
  92.   
  93.            //获取当前城市和当期的详细地址信息位置;  
  94.   
  95.             Constant.city=location.getCity();  
  96.             Constant.address= location.getAddrStr();  
  97.         }  
  98.   
  99.         //停止定位;  
  100.         locationHelper.stop();  
  101.     }  
  102.   
  103. }  

3、总结:

        通过把百度地图的定位功能封装成单一的LocationHelper类,主要是为了方便在后续app开发中多次使用,当然各位朋友也可以根据自己的需求来进行使用。

        最后,发表一下感言:由于本人一直是做C++开发,现在也稍微接触一下Java开发,发现Java中接口真的太好用了,C++中如果实现一个接口需要定义纯虚函数来实现,并且是通过派生的方式,或者多继承的方式,相对于Java来说接口的实现使得程序更加简洁易懂。

        以上代码由本人自己撰写,如有雷同,纯属巧合,有什么不妥之处或者需要再优化之处,望各位兄台不啬指教

0 0