亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android百度地圖定位、顯示用戶當前位置

2019-10-21 21:30:31
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android百度地圖定位、顯示用戶當前位置的工具類,供大家參考,具體內容如下

1、構建定位Option的工具類

import com.baidu.location.LocationClientOption;/** * 建造 LocationClientOption 項 * * @author peter 2018-12-21 10:58 */public class LocationClientOptionBuilder { private LocationClientOption option; public static LocationClientOptionBuilder builder() {  LocationClientOptionBuilder builder = new LocationClientOptionBuilder();  builder.option = builder.initOption();  return builder; } /**  * 設置坐標系  *  * @return  * @see CoorType  */ public LocationClientOptionBuilder setCoorType() {  return setCoorType(CoorType.bd09ll); } public LocationClientOptionBuilder setCoorType(CoorType coorType) {  this.option.setCoorType(coorType.name());  return this; } /**  * 連續定位  * 可選,設置發起定位請求的間隔,int類型,單位ms  * 如果設置為0,則代表單次定位,即僅定位一次,默認為0  * 如果設置非0,需設置1000ms以上才有效  *  * @param time  * @return  */ public LocationClientOptionBuilder setScanSpan(int time) {  this.option.setScanSpan(time);  return this; } public LocationClientOption bulid() {  return this.option; } private LocationClientOption initOption() {  LocationClientOption option = new LocationClientOption();  //可選,設置定位模式,默認高精度  //LocationMode.Hight_Accuracy:高精度;  //LocationMode. Battery_Saving:低功耗;  //LocationMode. Device_Sensors:僅使用設備;  option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);  //可選,設置返回經緯度坐標類型,默認GCJ02  //GCJ02:國測局坐標;  //BD09ll:百度經緯度坐標;  //BD09:百度墨卡托坐標;  //海外地區定位,無需設置坐標類型,統一返回WGS84類型坐標//  option.setCoorType("bd09ll");  //可選,設置發起定位請求的間隔,int類型,單位ms  //如果設置為0,則代表單次定位,即僅定位一次,默認為0  //如果設置非0,需設置1000ms以上才有效//  option.setScanSpan(1000);  //可選,設置是否使用gps,默認false  //使用高精度和僅用設備兩種定位模式的,參數必須設置為true  option.setOpenGps(true);  //可選,設置是否當GPS有效時按照1S/1次頻率輸出GPS結果,默認false//  option.setLocationNotify(true);  //可選,定位SDK內部是一個service,并放到了獨立進程。  //設置是否在stop的時候殺死這個進程,默認(建議)不殺死,即setIgnoreKillProcess(true)//  option.setIgnoreKillProcess(true);  //可選,設置是否收集Crash信息,默認收集,即參數為false//  option.SetIgnoreCacheException(false);  //可選,V7.2版本新增能力  //如果設置了該接口,首次啟動定位時,會先判斷當前Wi-Fi是否超出有效期,若超出有效期,會先重新掃描Wi-Fi,然后定位//  option.setWifiCacheTimeOut(5 * 60 * 1000);  //可選,設置是否需要過濾GPS仿真結果,默認需要,即參數為false//  option.setEnableSimulateGps(false);  return option; } /**  * 坐標系  */ public enum CoorType {  gcj02,  bd09,  bd09ll }}

2、構建定位的工具類

import android.content.Context;import android.support.annotation.NonNull;import android.util.Log;import com.baidu.location.BDAbstractLocationListener;import com.baidu.location.BDLocation;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;/** * 百度地圖定位工具類 * * @author peter 2018-12-21 10:12 */public class BMapLocationHelper { private static final int LOCATION_SUCCESS = 1; static final int LOCATION_FAIL = -1; private LocationClient mLocationClient; private MyLocationListener myListener = new MyLocationListener(); private LocationCallBack callBack; private BMapLocationHelper(LocationCallBack callBack) {  this.callBack = callBack; } public static BMapLocationHelper create(@NonNull Context context, @NonNull LocationClientOption option, @NonNull LocationCallBack callBack) {  BMapLocationHelper bMapLocationHelper = new BMapLocationHelper(callBack);  LocationClient client = new LocationClient(context);  client.setLocOption(option);  //聲明LocationClient類  client.registerLocationListener(bMapLocationHelper.myListener);  bMapLocationHelper.mLocationClient = client;  return bMapLocationHelper; } /**  * 開始定位  */ public void locStart() {  mLocationClient.start(); } /**  * 停止定位  */ public void locStop() {  mLocationClient.stop(); } public void locReStart() {  mLocationClient.restart(); } public LocationClient getmLocationClient() {  return mLocationClient; } /**  * 地圖定位結果監聽類  */ public class MyLocationListener extends BDAbstractLocationListener {  private static final String TAG = "MyLocationListener";  @Override  public void onReceiveLocation(BDLocation location) {   if (location == null) return;   int locType = location.getLocType();   int status = LOCATION_SUCCESS;   if (locType != 61 && locType != 161 && locType != 66) status = LOCATION_FAIL;   String errMsg = getLocationResultMsg(locType);   callBack.onReceiveLocation(status, location, errMsg);  }  @Override  public void onLocDiagnosticMessage(int i, int i1, String s) {   Log.i(TAG, "onLocDiagnosticMessage: " + i + "diaType:" + i1);   callBack.onLocDiagnosticMessage(i, i1, getLocDiagnosticMessage(i, i1));   super.onLocDiagnosticMessage(i, i1, s);  } } /**  * 回調類  */ public abstract static class LocationCallBack {  /**   * 定位的結果   *   * @param statusCode 狀態碼,1:定位成功,-1定位失敗   * @param bdLocation 定位成功時返回的定位結果對象   * @param errMsg  定位失敗時的錯誤信息,成功時則為null   */  public abstract void onReceiveLocation(int statusCode, BDLocation bdLocation, String errMsg);  /**   * 錯誤的狀態碼   * <a>http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/addition-func/error-code</a>   * <p>   * 回調定位診斷信息,開發者可以根據相關信息解決定位遇到的一些問題   *   * @param locType   當前定位類型   * @param diagnosticType 診斷類型(1~9)   * @param diagnosticMessage 具體的診斷信息釋義   */  public void onLocDiagnosticMessage(int locType, int diagnosticType, String diagnosticMessage) {  } } /**  * 錯誤的狀態碼  * <a>http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/addition-func/error-code</a>  *  * @param locType 當前定位類型  * @return String 定位成功或失敗的信息  */ private String getLocationResultMsg(int locType) {  switch (locType) {   case 61:    return "GPS定位結果,GPS定位成功";   case 62:    return "無法獲取有效定位依據,定位失敗,請檢查運營商網絡或者WiFi網絡是否正常開啟,嘗試重新請求定位";   case 63:    return "網絡異常,沒有成功向服務器發起請求,請確認當前測試手機網絡是否通暢,嘗試重新請求定位";   case 66:    return "離線定位結果。通過requestOfflineLocaiton調用時對應的返回結果";   case 67:    return "離線定位失敗";   case 161:    return "網絡定位結果,網絡定位成功";   case 162:    return "請求串密文解析失敗,一般是由于客戶端SO文件加載失敗造成,請嚴格參照開發指南或demo開發,放入對應SO文件";   case 167:    return "服務端定位失敗,請您檢查是否禁用獲取位置信息權限,嘗試重新請求定位";   case 505:    return "AK不存在或者非法,請按照說明文檔重新申請AK";   default:    return "";  } } /**  * @param locType  當前定位類型  * @param diagnosticType 診斷類型(1~9)  * @return String  */ private String getLocDiagnosticMessage(int locType, int diagnosticType) {  switch (locType) {   case 62:    switch (diagnosticType) {     case 4:      return "定位失敗,無法獲取任何有效定位依據";     case 5:      return "定位失敗,無法獲取有效定位依據,請檢查運營商網絡或者Wi-Fi網絡是否正常開啟,嘗試重新請求定位";     case 6:      return "定位失敗,無法獲取有效定位依據,請嘗試插入一張sim卡或打開Wi-Fi重試";     case 7:      return "定位失敗,飛行模式下無法獲取有效定位依據,請關閉飛行模式重試";     case 9:      return "定位失敗,無法獲取任何有效定位依據";    }   case 67:    if (diagnosticType == 3) return "定位失敗,請您檢查您的網絡狀態";   case 161:    switch (diagnosticType) {     case 1:      return "定位失敗,建議您打開GPS";     case 2:      return "定位失敗,建議您打開Wi-Fi";    }   case 167:    if (diagnosticType == 8) return "定位失敗,請確認您定位的開關打開狀態,是否賦予APP定位權限";   default:    return "未知錯誤";  } }}

3、顯示用戶當前位置到地圖的工具類

import android.content.Context;import android.support.annotation.NonNull;import android.util.Log;import com.baidu.location.BDLocation;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;import com.yikesong.sender.util.ToastUtils;/** * 顯示用戶當前位置到地圖上 * * @author peter 2018-12-21 16:27 */public class UserLocation extends BMapLocationHelper.LocationCallBack { private Context context; private boolean isFirstLoc = true; private BaiduMap map; private int mCurrentDirection = 0; private BMapLocationHelper helper; private static final String TAG = "UserLocation"; public UserLocation(@NonNull Context context, @NonNull BaiduMap map) {  this.context = context;  this.map = map;  init(); } private void init() {  map.setMapType(BaiduMap.MAP_TYPE_NORMAL);  //開啟定位圖層  map.setMyLocationEnabled(true); } /**  * 在地圖上顯示用戶的當前位置  */ public void showUserLocationOnMap() {  if (helper == null) {   LocationClientOption option = LocationClientOptionBuilder     .builder()     .setCoorType()     .bulid();   helper = BMapLocationHelper.create(this.context, option, this);  }  helper.locStart(); } @Override public void onReceiveLocation(int statusCode, BDLocation bdLocation, String errMsg) {  if (statusCode == BMapLocationHelper.LOCATION_FAIL) {   ToastUtils.toastInfo(errMsg, context);   Log.i(TAG, "onReceiveLocation: " + errMsg);   return;  }  MyLocationData locData = new MyLocationData.Builder()    .accuracy(bdLocation.getRadius())    // 此處設置開發者獲取到的方向信息,順時針0-360    .direction(mCurrentDirection).latitude(bdLocation.getLatitude())    .longitude(bdLocation.getLongitude()).build();  map.setMyLocationData(locData);  if (isFirstLoc) {   isFirstLoc = false;   LatLng centerPoint = new LatLng(bdLocation.getLatitude(),     bdLocation.getLongitude());   MapStatus mapStatus = new MapStatus.Builder()     .target(centerPoint) //設置中心點     .zoom(18f)//設置縮放級別     .build();   map.animateMapStatus(MapStatusUpdateFactory.newMapStatus(mapStatus));  }  if (helper != null) helper.locStop(); } @Override public void onLocDiagnosticMessage(int locType, int diagnosticType, String diagnosticMessage) {  super.onLocDiagnosticMessage(locType, diagnosticType, diagnosticMessage); } public BMapLocationHelper getHelper() {  return helper; } public BaiduMap getMap() {  return map; } public int getmCurrentDirection() {  return mCurrentDirection; }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美乱人伦中文字幕在线| 国产成人在线播放| 欧美在线国产精品| 久久久999成人| 国产精品综合不卡av| 日韩精品视频在线观看网址| 亚洲国产精品一区二区久| 久久久精品一区| 亚洲精品久久久久中文字幕二区| 亚洲成人av片在线观看| 精品一区二区三区四区在线| 久久久精品一区二区| 欧美日韩中文在线观看| 成人免费福利视频| 国产精品一区专区欧美日韩| 911国产网站尤物在线观看| 亚洲精品v天堂中文字幕| 欧美激情中文字幕乱码免费| 欧美精品在线看| 精品国产福利在线| 国自产精品手机在线观看视频| 91九色单男在线观看| 日韩欧美国产一区二区| 色伦专区97中文字幕| 国产免费一区二区三区在线能观看| 日韩高清a**址| 欧美日韩免费一区| 欧美性xxxxx极品| 国语自产精品视频在免费| 久久成人人人人精品欧| 国产日本欧美一区二区三区| 2019中文字幕免费视频| 日韩性xxxx爱| 亚洲图片欧美午夜| 亚洲福利视频免费观看| 欧美激情在线有限公司| 国产成人jvid在线播放| 欧美在线日韩在线| 欧美在线观看视频| 色中色综合影院手机版在线观看| 亚洲国产成人久久综合一区| 日韩成人激情视频| 日韩黄色高清视频| 日韩视频免费在线观看| 91沈先生作品| 欧美日韩aaaa| 日韩av最新在线| 中文字幕在线看视频国产欧美| 青青草成人在线| 精品精品国产国产自在线| 日产精品99久久久久久| 久久久噜噜噜久久久| 日韩av在线一区| 亚洲天堂成人在线视频| 久久九九国产精品怡红院| 欧美电影免费观看高清| 国产精品在线看| 中文字幕亚洲综合久久| 欧美成人精品在线观看| 成人性教育视频在线观看| 亚洲第一精品夜夜躁人人爽| 久久精品亚洲热| 欧美一级在线播放| 欧美亚洲一级片| 国产精自产拍久久久久久蜜| 精品中文视频在线| 久久视频在线视频| 欧美精品一区二区三区国产精品| 黑人极品videos精品欧美裸| 一个人www欧美| 欧美成人精品激情在线观看| 91sao在线观看国产| 国产欧美在线看| 97精品久久久| 久久久中文字幕| 91久久久久久久一区二区| 国产精品女人网站| 97超级碰在线看视频免费在线看| 亚洲系列中文字幕| 日韩欧美主播在线| 欧美激情乱人伦一区| 日韩中文娱乐网| 欧美在线视频观看| 亚洲精品ady| 国产成人精品久久| 久久亚洲综合国产精品99麻豆精品福利| 日韩中文字幕网站| 久久久精品久久久| 国产精品视频免费在线观看| 国产69久久精品成人| 久久久久久久久久婷婷| 亚洲精品自拍第一页| 91免费欧美精品| 欧美寡妇偷汉性猛交| 91久久精品美女高潮| 久久综合国产精品台湾中文娱乐网| 欧美极品少妇xxxxⅹ免费视频| 亚洲自拍偷拍福利| 亚洲美女福利视频网站| 日韩电影在线观看免费| 亚洲国产精品国自产拍av秋霞| 91久久国产综合久久91精品网站| 久热精品视频在线| 亚洲国产天堂久久综合| 在线观看日韩av| 国产亚洲欧美另类中文| 色婷婷**av毛片一区| 欧美在线视频免费| 欧美一级视频免费在线观看| 日韩免费av一区二区| 国产日韩欧美夫妻视频在线观看| 亚洲欧美日韩一区在线| 日韩欧美亚洲范冰冰与中字| 日韩欧美国产高清91| 51久久精品夜色国产麻豆| 国产精品一区二区久久久| 久久69精品久久久久久久电影好| 久久久www成人免费精品张筱雨| 国产精品自拍视频| 亚洲免费视频在线观看| 国产精品27p| 色综合久久悠悠| 欧美在线视频观看| 亚洲天堂免费视频| 操日韩av在线电影| 欧美大肥婆大肥bbbbb| 在线精品视频视频中文字幕| 日韩男女性生活视频| 色小说视频一区| 成人444kkkk在线观看| 国产精品美女午夜av| 国产精品第七影院| 最近2019好看的中文字幕免费| 久久久久久久久久久久av| 精品国产31久久久久久| 久久中国妇女中文字幕| 国产精品久久久久av免费| 久久久久久综合网天天| 日韩久久免费视频| 亚洲天堂av网| 中文字幕一区电影| 在线观看精品自拍私拍| 欧美日韩免费在线观看| 亚洲第一视频在线观看| 欧美精品在线极品| 国产欧美中文字幕| 国产日韩精品入口| 欧美在线一区二区三区四| 国产精品www网站| 国产剧情久久久久久| 国产精品福利小视频| 中文字幕亚洲欧美在线| 亚洲一区二区免费| 欧美壮男野外gaytube| 国产日韩在线亚洲字幕中文| 日韩毛片中文字幕| 国产精品美女www| 国产精品久久久久久久久免费| 亚洲精品在线看| 成人黄色生活片| 欧美在线观看网站| 欧美在线一级视频| 日韩欧美在线视频观看| 亚洲视频日韩精品|