百度地圖定位功能的封裝

packagecom.jiahao.baidulocation;

importandroid.content.Context;

importandroid.os.Handler;

importandroid.os.Looper;

importandroid.util.Log;

importcom.baidu.location.BDLocation;

importcom.baidu.location.BDLocationListener;

importcom.baidu.location.LocationClient;

importcom.baidu.location.LocationClientOption;

importcom.baidu.location.Poi;

importjava.util.List;

/**

* Created by Administrator on 2017/5/25.

*/

public classBaiduLocationManager {

private staticBaiduLocationManagermInstance;

privateLocationClientlocationClient;

private staticBDLocationListenermyListener;

privateLocationBeanmLocationBean;

privateHandlermHandler;

privateonLocationListenermLocationListener;

privateBaiduLocationManager(Context context){

//聲明LocationClient類

locationClient=newLocationClient(context);

//注冊(cè)監(jiān)聽函數(shù)

myListener=newMyLocationListener();

locationClient.registerLocationListener(myListener);

mHandler=newHandler(Looper.getMainLooper());

}

public staticBaiduLocationManager getInstance(Context context){

if(mInstance==null&&myListener==null){

mInstance=newBaiduLocationManager(context);

}

returnmInstance;

}

private classMyLocationListenerimplementsBDLocationListener {

@Override

public voidonReceiveLocation(BDLocation location) {

mLocationBean=newLocationBean();

//獲取定位結(jié)果

StringBuffer sb =newStringBuffer(256);

sb.append("time : ");

sb.append(location.getTime());//獲取定位時(shí)間

mLocationBean.setLocationTime(location.getTime());

sb.append("\nerror code : ");

sb.append(location.getLocType());//獲取類型類型

sb.append("\nlatitude : ");

sb.append(location.getLatitude());//獲取緯度信息

mLocationBean.setLocationLatitude(location.getLatitude());

sb.append("\nlontitude : ");

sb.append(location.getLongitude());//獲取經(jīng)度信息

mLocationBean.setLocationLongitude(location.getLongitude());

sb.append("\nradius : ");

sb.append(location.getRadius());//獲取定位精準(zhǔn)度

if(location.getLocType() == BDLocation.TypeGpsLocation){

// GPS定位結(jié)果

sb.append("\nspeed : ");

sb.append(location.getSpeed());// 單位:公里每小時(shí)

sb.append("\nsatellite : ");

sb.append(location.getSatelliteNumber());//獲取衛(wèi)星數(shù)

sb.append("\nheight : ");

sb.append(location.getAltitude());//獲取海拔高度信息园欣,單位米

sb.append("\ndirection : ");

sb.append(location.getDirection());//獲取方向信息,單位度

sb.append("\naddr : ");

sb.append(location.getAddrStr());//獲取地址信息

mLocationBean.setLocationAddress(location.getAddrStr());

sb.append("\ndescribe : ");

sb.append("gps定位成功");

}else if(location.getLocType() == BDLocation.TypeNetWorkLocation){

// 網(wǎng)絡(luò)定位結(jié)果

sb.append("\naddr : ");

sb.append(location.getAddrStr());//獲取地址信息

mLocationBean.setLocationAddress(location.getAddrStr());

sb.append("\noperationers : ");

sb.append(location.getOperators());//獲取運(yùn)營商信息

sb.append("\ndescribe : ");

sb.append("網(wǎng)絡(luò)定位成功");

}else if(location.getLocType() == BDLocation.TypeOffLineLocation) {

// 離線定位結(jié)果

sb.append("\ndescribe : ");

sb.append("離線定位成功,離線定位結(jié)果也是有效的");

}else if(location.getLocType() == BDLocation.TypeServerError) {

sb.append("\ndescribe : ");

sb.append("服務(wù)端網(wǎng)絡(luò)定位失敗见咒,可以反饋IMEI號(hào)和大體定位時(shí)間到loc-bugs@baidu.com,會(huì)有人追查原因");

}else if(location.getLocType() == BDLocation.TypeNetWorkException) {

sb.append("\ndescribe : ");

sb.append("網(wǎng)絡(luò)不同導(dǎo)致定位失敗,請(qǐng)檢查網(wǎng)絡(luò)是否通暢");

}else if(location.getLocType() == BDLocation.TypeCriteriaException) {

sb.append("\ndescribe : ");

sb.append("無法獲取有效定位依據(jù)導(dǎo)致定位失敗坠七,一般是由于手機(jī)的原因见转,處于飛行模式下一般會(huì)造成這種結(jié)果命雀,可以試著重啟手機(jī)");

}

sb.append("\nlocationdescribe : ");

sb.append(location.getLocationDescribe());//位置語義化信息

mLocationBean.setLocationDescribe(location.getLocationDescribe());

List list = location.getPoiList();// POI數(shù)據(jù)

if(list !=null) {

sb.append("\npoilist size = : ");

sb.append(list.size());

for(Poi p : list) {

sb.append("\npoi= : ");

sb.append(p.getId() +" "+ p.getName() +" "+ p.getRank());

}

mLocationListener.onSuccess(mLocationBean);

}else{

mLocationListener.onFile();

}

// Log.i("BaiduLocationApiDem", sb.toString());

}

@Override

public voidonConnectHotSpotMessage(String s,inti) {

}

}

/**

* 開始定位

*/

public voidstartBaiduLocation(){

locationClient.start();

initLocation();

}

public voidgetmLocationBean(onLocationListener listener){

this.mLocationListener= listener;

}

/**

* 結(jié)束定位

*/

public voidstopBaiduLocation(){

locationClient.stop();

}

/**

* 設(shè)置參數(shù)

*/

private voidinitLocation(){

LocationClientOption option =newLocationClientOption();

option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);

//可選,默認(rèn)高精度斩箫,設(shè)置定位模式吏砂,高精度,低功耗乘客,僅設(shè)備

option.setCoorType("bd09ll");

//可選狐血,默認(rèn)gcj02,設(shè)置返回的定位結(jié)果坐標(biāo)系

intspan=1000;

option.setScanSpan(span);

//可選寨典,默認(rèn)0氛雪,即僅定位一次,設(shè)置發(fā)起定位請(qǐng)求的間隔需要大于等于1000ms才是有效的

option.setIsNeedAddress(true);

//可選耸成,設(shè)置是否需要地址信息报亩,默認(rèn)不需要

option.setOpenGps(true);

//可選,默認(rèn)false,設(shè)置是否使用gps

option.setLocationNotify(true);

//可選井氢,默認(rèn)false弦追,設(shè)置是否當(dāng)GPS有效時(shí)按照1S/1次頻率輸出GPS結(jié)果

option.setIsNeedLocationDescribe(true);

//可選,默認(rèn)false花竞,設(shè)置是否需要位置語義化結(jié)果劲件,可以在BDLocation.getLocationDescribe里得到,結(jié)果類似于“在北京天安門附近”

option.setIsNeedLocationPoiList(true);

//可選约急,默認(rèn)false零远,設(shè)置是否需要POI結(jié)果,可以在BDLocation.getPoiList里得到

option.setIgnoreKillProcess(false);

//可選厌蔽,默認(rèn)true牵辣,定位SDK內(nèi)部是一個(gè)SERVICE,并放到了獨(dú)立進(jìn)程奴饮,設(shè)置是否在stop的時(shí)候殺死這個(gè)進(jìn)程纬向,默認(rèn)不殺死

option.SetIgnoreCacheException(false);

//可選,默認(rèn)false戴卜,設(shè)置是否收集CRASH信息逾条,默認(rèn)收集

option.setEnableSimulateGps(false);

//可選,默認(rèn)false投剥,設(shè)置是否需要過濾GPS仿真結(jié)果师脂,默認(rèn)需要

locationClient.setLocOption(option);

}

/**

* 自己定義的bean類

*/

public classLocationBean {

//定位時(shí)間

privateStringlocationTime;

//緯度

privateDoublelocationLatitude;

//經(jīng)度

privateDoublelocationLongitude;

//定位位置

privateStringlocationAddress;

//語義化

privateStringlocationDescribe;

publicString getLocationTime() {

returnlocationTime;

}

public voidsetLocationTime(String locationTime) {

this.locationTime= locationTime;

}

publicDouble getLocationLatitude() {

returnlocationLatitude;

}

public voidsetLocationLatitude(Double locationLatitude) {

this.locationLatitude= locationLatitude;

}

publicDouble getLocationLongitude() {

returnlocationLongitude;

}

public voidsetLocationLongitude(Double locationLongitude) {

this.locationLongitude= locationLongitude;

}

publicString getLocationAddress() {

returnlocationAddress;

}

public voidsetLocationAddress(String locationAddress) {

this.locationAddress= locationAddress;

}

publicString getLocationDescribe() {

returnlocationDescribe;

}

public voidsetLocationDescribe(String locationDescribe) {

this.locationDescribe= locationDescribe;

}

@Override

publicString toString() {

return"LocationBean{"+

"locationTime='"+locationTime+'\''+

", locationLatitude="+locationLatitude+

", locationLongitude="+locationLongitude+

", locationAddress='"+locationAddress+'\''+

", locationDescribe='"+locationDescribe+'\''+

'}';

}

}

interfaceonLocationListener{

voidonSuccess(LocationBean locationBean);

voidonFile();

}

}



使用:

packagecom.jiahao.baidulocation;

importandroid.support.v7.app.AppCompatActivity;

importandroid.os.Bundle;

importandroid.util.Log;

importcom.baidu.location.BDLocation;

importcom.baidu.location.BDLocationListener;

importcom.baidu.location.LocationClient;

importcom.baidu.location.LocationClientOption;

importcom.baidu.location.Poi;

importjava.util.List;

public classMainActivityextendsAppCompatActivity {

privateBaiduLocationManagerbaiduLocationManager;

@Override

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

baiduLocationManager=? BaiduLocationManager.getInstance(getApplicationContext());

baiduLocationManager.startBaiduLocation();

baiduLocationManager.getmLocationBean(newBaiduLocationManager.onLocationListener() {

@Override

public voidonSuccess(BaiduLocationManager.LocationBean locationBean) {

Log.i("BaiduLocationApiDem", locationBean.toString());

baiduLocationManager.stopBaiduLocation();

}

@Override

public voidonFile() {

Log.i("BaiduLocationApiDem","失敗了");

}

});

}

@Override

protected voidonDestroy() {

super.onDestroy();

baiduLocationManager.stopBaiduLocation();

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子危彩,更是在濱河造成了極大的恐慌攒磨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汤徽,死亡現(xiàn)場(chǎng)離奇詭異娩缰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)谒府,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門拼坎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人完疫,你說我怎么就攤上這事泰鸡。” “怎么了壳鹤?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵盛龄,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我芳誓,道長(zhǎng)余舶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任锹淌,我火速辦了婚禮匿值,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赂摆。我一直安慰自己挟憔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布烟号。 她就那樣靜靜地躺著绊谭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汪拥。 梳的紋絲不亂的頭發(fā)上龙誊,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音喷楣,去河邊找鬼。 笑死鹤树,一個(gè)胖子當(dāng)著我的面吹牛铣焊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罕伯,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼曲伊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坟募,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤岛蚤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后懈糯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涤妒,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年赚哗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了她紫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屿储,死狀恐怖贿讹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情够掠,我是刑警寧澤民褂,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站疯潭,受9級(jí)特大地震影響赊堪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袁勺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一雹食、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧期丰,春花似錦群叶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至埠通,卻和暖如春赎离,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背端辱。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工梁剔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人舞蔽。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓荣病,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親渗柿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子个盆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • (題外話:up主開發(fā)android開發(fā)快三年了,以前遇到的問題都是自己解決完就可以了,不過在簡(jiǎn)書看到之前的同事颊亮,也...
    愛笑的臭淇閱讀 2,479評(píng)論 1 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理柴梆,服務(wù)發(fā)現(xiàn),斷路器终惑,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 來聊聊怎么接入百度地圖吧 百度地圖SDK接入 其實(shí)這個(gè)環(huán)境配置在百度官方的介紹上面已經(jīng)很詳細(xì)了绍在,我也差不多是都是根...
    Discredited閱讀 706評(píng)論 0 0
  • 【 申請(qǐng)密鑰AndroidSDK:應(yīng)用程序包名+數(shù)字簽名 As查看數(shù)字簽名:cmd-----cd .android...
    征程_Journey閱讀 2,277評(píng)論 0 5
  • 01 現(xiàn)在大家都知道羅恩和羽的關(guān)系了。 雖然他們?cè)诠娒媲皬膩矶硷@得互不相識(shí)一樣狠鸳。 只是這種事就像一塊臭豆腐...
    龍女卷風(fēng)閱讀 651評(píng)論 0 0