1. 程式人生 > >百度定位的簡單應用

百度定位的簡單應用

百度定位的jar自己去下,地址自行解決

1 定義一個回撥介面

public interface ILocationCallback {
   public void callback(BDLocation locationMap);
}
 2定義一個工具類 
 

public class BaiDuLocationUtil  {
   public LocationClient mLocationClient = null;
   private Context mContext;
   public BDLocationListener myListener = new 
MyLocationListener(); private ILocationCallback locationCallback; public BaiDuLocationUtil(ILocationCallback locationCallback,Context context) { this.locationCallback = locationCallback; this.mContext = context; } private void callback(BDLocation locationMap) { this
.locationCallback.callback(locationMap); } public void startLocation(Context context) { if ( null== mLocationClient ) { mLocationClient = new LocationClient(context.getApplicationContext()); // 宣告LocationClient mLocationClient.registerLocationListener(myListener); // 註冊監聽函式
init(); } mLocationClient.start(); } private void init(){ LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationMode.Hight_Accuracy);//可選,預設高精度,設定定位模式,高精度,低功耗,僅裝置 option.setCoorType("bd09ll");//可選,預設gcj02,設定返回的定位結果座標系 int span=4000; option.setScanSpan(span);//可選,預設0,即僅定位一次,設定發起定位請求的間隔需要大於等於1000ms才是有效的 option.setIsNeedAddress(true);//可選,設定是否需要地址資訊,預設不需要 option.setOpenGps(true);//可選,預設false,設定是否使用gps option.setLocationNotify(true);//可選,預設false,設定是否當gps有效時按照1S1次頻率輸出GPS結果 option.setIsNeedLocationDescribe(true);//可選,預設false,設定是否需要位置語義化結果,可以在BDLocation.getLocationDescribe裡得到,結果類似於在北京天安門附近 option.setIsNeedLocationPoiList(true);//可選,預設false,設定是否需要POI結果,可以在BDLocation.getPoiList裡得到 option.setIgnoreKillProcess(false);//可選,預設false,定位SDK內部是一個SERVICE,並放到了獨立程序,設定是否在stop的時候殺死這個程序,預設殺死 option.SetIgnoreCacheException(false);//可選,預設false,設定是否收集CRASH資訊,預設收集 option.setEnableSimulateGps(false);//可選,預設false,設定是否需要過濾gps模擬結果,預設需要 mLocationClient.setLocOption(option); }; public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if(!location.hasAddr()){ return; } callback(location); stopLocation(); } } private void stopLocation() { if( null!= mLocationClient ){ mLocationClient.stop(); } } }

3 在你想要的地方去使用

private BaiDuLocationUtil baiDuLocationUtil;
 3.1 定義一下

   

private void getPositionByBaidu() {
      if (baiDuLocationUtil == null) {
         baiDuLocationUtil = new BaiDuLocationUtil(new ILocationCallback() {
            @Override
            public void callback(BDLocation locationMap) {
             //這裡有你想要的經緯度,城市code等資訊,自己去看BDLocation 
            }
         }, mConetxt);
      }
	//等著成功回撥
      baiDuLocationUtil.startLocation(mConetxt);
   }
------------------------------可以忽視的--------------------------------------------------------
4 迴圈獲得,這個是一個迴圈的示例,想要處理,就自己解決.

 
boolean bb = true;

 
Handler mHandler ; 
void scheduleSyncIn( final int aSeconds) { mHandler = new Handler(); mRunnable = new Runnable() { @Override public void run() { if( bb){ mHandler.postDelayed( mRunnable, aSeconds);
//這裡去迴圈定位

 
getPositionByBaidu();
                  }else{         }      }   };   mHandler.postDelayed(mRunnable, aSeconds);}
------------------------------可以忽視的--------------------------------------------------------
5 打完收工