百度定位的簡單應用
阿新 • • 發佈:2018-11-04
百度定位的jar自己去下,地址自行解決
1 定義一個回撥介面
public interface ILocationCallback { public void callback(BDLocation locationMap); }2定義一個工具類
public class BaiDuLocationUtil { public LocationClient mLocationClient = null; private Context mContext; public BDLocationListener myListener = newMyLocationListener(); 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 打完收工