注意点:百度的定位编码:是bd09ll,09后面是英文字母l

package mwteck.ettda.map;import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.LocationManager;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
import android.support.v7.app.AlertDialog;import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.BDNotifyListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;import java.util.List;import mwteck.ettda.R;
import mwteck.ettda.Utils.L;
import mwteck.ettda.Utils.Tools;/*** Created by 刘世华 on 2017/5/9 0009.* Discription :*/public class MapLocationUtil {private Context context;protected LocationClientOption.LocationMode tempMode = LocationClientOption.LocationMode.Device_Sensors; // GPS定位protected LocationClient locationClient = null;public static final int MAPLOCAL_SUCCESS = 11;public static final int MAPLOCAL_FAILURE = 22;public static final int MAPLOCAL_SEARCH_OK = 33;public static final int MAPLOCAL_SEARCH_FAILURE = 44;private LocationClientOption option;public MapLocationUtil(Context context) {this.context = context;locationClient = new LocationClient(context.getApplicationContext());initLocationOption(context);}public void getLocalPoint(Context context, final Handler handler) {//获取当前位置locationClient.registerLocationListener(new BDLocationListener() {@Overridepublic void onReceiveLocation(BDLocation location) {Message message = new Message();message.what = MAPLOCAL_SUCCESS;message.obj = location;handler.sendMessage(message);locationClient.stop();}});locationClient.start();}private void initLocationOption(Context context) {option = new LocationClientOption();if (Tools.isInternetConnect(context)) {//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);} else {option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);}option.setCoorType("bd09ll");//返回百度经纬度坐标——ll是英文字母loption.setNeedDeviceDirect(true);//需要手机的方向信息option.setScanSpan(2000);//设置定位次数,设置发起定位请求的间隔需要大于等于1000ms才是有效的option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要option.setOpenGps(true);//可选,默认false,设置是否使用gpsoption.setTimeOut(9 * 1000);//10秒定位不到就返回option.setLocationNotify(true);//可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到option.setIsNeedLocationPoiList(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死option.setIgnoreKillProcess(true);//可选,默认false,设置是否收集CRASH信息,默认收集option.SetIgnoreCacheException(false);//可选,默认false,设置是否需要过滤GPS仿真结果,默认需要option.setEnableSimulateGps(false);locationClient.setLocOption(option);}public void setLocalPoint(final Handler handler, final BaiduMap baiduMap, final boolean isNeedShowLocation) {//获取当前位置if (locationClient == null) {locationClient = new LocationClient(context.getApplicationContext());initLocationOption(context);}locationClient.registerLocationListener(new BDLocationListener() {@Overridepublic void onReceiveLocation(BDLocation location) {LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());Message message = new Message();message.what = MAPLOCAL_SUCCESS;message.obj = location;L.d("定位成功:" + location.getLatitude() + ":" + location.getLongitude() + "\t" + location.getAddrStr());handler.sendMessage(message);if (isNeedShowLocation) {setLocationMark(baiduMap, latLng);//设置定位图标}getAroundPoi(handler, new LatLng(location.getLatitude(), location.getLongitude()));}});locationClient.start();}// 重新定位public void restartLocation() {if (locationClient != null) {if (locationClient.isStarted()) {locationClient.stop();}if (option != null)if (Tools.isInternetConnect(context)) {//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);} else {option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);}locationClient.setLocOption(option);locationClient.start();}}//设置定位点public void setLocationMark(BaiduMap baiduMap, LatLng latLng) {if (baiduMap == null) return;baiduMap.clear();//清除之前的marker//构建Marker图标BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.map_point_48px);//构建MarkerOption,用于在地图上添加MarkerOverlayOptions option = new MarkerOptions().position(latLng).icon(bitmap);//在地图上添加Marker,并显示baiduMap.addOverlay(option);//设置显示中心点MapStatus mapStatus = new MapStatus.Builder(baiduMap.getMapStatus()).target(latLng)//设置中心点.zoom(17f)//缩放比例.overlook(-10f)//俯视角度.build();MapStatusUpdate statusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);baiduMap.setMapStatus(statusUpdate);//设置地图状态改变}/*** 设置定位点(不清除之前的点)** @param baiduMap* @param latLng* @param zoom     设置地图放大比例*/public void setLocationMark(BaiduMap baiduMap, LatLng latLng, float zoom) {if (baiduMap == null) return;//构建Marker图标BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.my_local);//构建MarkerOption,用于在地图上添加MarkerOverlayOptions option = new MarkerOptions().position(latLng).icon(bitmap);//在地图上添加Marker,并显示baiduMap.addOverlay(option);//设置显示中心点MapStatus mapStatus = new MapStatus.Builder(baiduMap.getMapStatus()).target(latLng)//设置中心点.zoom(zoom)//缩放比例.overlook(-10f)//俯视角度.build();MapStatusUpdate statusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);baiduMap.setMapStatus(statusUpdate);//设置地图状态改变}//设置定位点_图标为百度系统自带/*** @param baiduMap* @param latLng* @param zoom     地图放大比例*/public void setLocation(BaiduMap baiduMap, LatLng latLng, float zoom) {baiduMap.clear();// 开启定位图层baiduMap.setMyLocationEnabled(true);// 构造定位数据MyLocationData locData = new MyLocationData.Builder().accuracy(0).direction(0)// 此处设置开发者获取到的方向信息,顺时针0-360.latitude(latLng.latitude).longitude(latLng.longitude).build();// 设置定位数据baiduMap.setMyLocationData(locData);MapStatus mapStatus = new MapStatus.Builder(baiduMap.getMapStatus()).target(latLng)//设置中心点.zoom(zoom)//缩放比例.overlook(-10f)//俯视角度.build();MapStatusUpdate statusUpdate = MapStatusUpdateFactory.newMapStatus(mapStatus);baiduMap.setMapStatus(statusUpdate);//设置地图状态改变}public void getAroundPoi(final Handler handler, LatLng latLng) {// 创建GeoCoder实例对象final GeoCoder geoCoder = GeoCoder.newInstance();// 设置查询结果监听者geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {@Overridepublic void onGetGeoCodeResult(GeoCodeResult result) {if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {//没有检索到结果}}@Overridepublic void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {//没有找到检索结果return;}final List<PoiInfo> poiInfos = result.getPoiList();if (poiInfos != null && poiInfos.size() > 0) {Message message = new Message();message.what = MAPLOCAL_SEARCH_OK;message.obj = poiInfos;handler.sendMessage(message);geoCoder.destroy();stopLocation();} else {Message message = new Message();message.what = MAPLOCAL_SEARCH_FAILURE;message.obj = poiInfos;handler.sendMessage(message);}}});//发起地理编码检索geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(latLng));}//关闭定位public void stopLocation() {if (locationClient != null && locationClient.isStarted()) {locationClient.stop();}}//是否开启GPSpublic boolean isOpenGPS(Activity activity) {LocationManager locManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);return locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);}/*** 设置GPS弹框** @param activity* @param GPS_REQUEST_CODE*/public void showSetGPSDialog(final Activity activity, final int GPS_REQUEST_CODE) {new AlertDialog.Builder(activity).setTitle("定位提示").setMessage("GPS未开启,GPS开启后定位更精确,是否设置GPS?")// 拒绝, 退出应用.setNegativeButton(R.string.cancel, null).setPositiveButton(R.string.setting,new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//跳转GPS设置界面Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);activity.startActivityForResult(intent, GPS_REQUEST_CODE);}}).setCancelable(false).show();}
}

Android 百度地图定位工具类相关推荐

  1. android 定位工具类,高德地图定位工具类

    引言 定位功能初始化设置时耗时较多,如果放在Activity中操作,难免会有Activity切换较慢的问题.通过该工具类,可以实现一次初始化,多处随时调用.具有占用资源少,使用方便,便于复用,速度快, ...

  2. android获得图片的坐标,Android百度地图定位后获取周边位置的实现代码

    本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 android:orientation="vertic ...

  3. Android百度地图定位APP,显示出当前位置坐标

    Android百度地图定位APP,显示出当前位置坐标 官网配置百度地图 通过CMD命令获取SHA1 在百度的官网里面创建一个应用 Android配置 显示地图即定位 配置 AndroidManifes ...

  4. android 百度地图定位辅助教程

    这里使用讲解的是androidStudio下开发android应用,实现百度地图定位功能的辅助教程. 登入百度地图API官方网站http://lbsyun.baidu.com/ 在主页中选择开发-&g ...

  5. android 百度地图定位总结

    百度地图用过几次,往往用过即忘,疏于总结,这次归纳一下 api-key, jar导入,Menifest.xml配置参考官方文档, 基于jar包 3.6.1版,地图sdk版本不同,方法会有差异 效果图: ...

  6. android 百度地图定位SDK使用方法

    本以为gps定位就只是拿个经纬度,不会很复杂,结果折腾了一下午才弄好,惭愧啊~ Ps:今天练跆拳道,刚热身就两条腿一起抽筋,难道是平时撸多了......好吧,我想多了,废话不多说,开始入正题~ 首先介 ...

  7. unlegal android,百度地图定位 Cordova 插件 cordova-plugin-baidumaplocation

    软件介绍 百度地图定位Cordova插件,支持Android,IOS 可以在此地址查看example 基于百度地图Android版定位SDK(v7.1)以及百度地图IOS SDK (v3.2.1) 一 ...

  8. android百度地图定位自定义图标,Android应用开发之android 百度地图自定义圆,更改默认图标等常用方法...

    本文将带你了解Android应用开发之android 百度地图自定义圆,更改默认图标等常用方法,希望本文对大家学Android有所帮助. 总结了一下百度地图常用的方法(前提是集成百度地图环境成功): ...

  9. android百度地图定位、城市列表选择搜索

    百度地图的集成在百度地图的开发文档中有详细的介绍:Android定位SDK  | 百度地图API SDK 本文介绍的主要功能有: kotlin语言搭建的项目 百度地图的定位 选择城市(包括省市县三级搜 ...

最新文章

  1. 【NLP】文本自动摘要任务的心得总结
  2. and or not 优先级_我的侠客公测成就奖励大全 成就解锁优先级排名
  3. Android工程目录
  4. JS判断是否出现滚动条
  5. ie6和ie7两个div之间有空隙
  6. 4位16色灰度图像处理
  7. SmartSVN for Mac 使用说明
  8. oppo专用计算机,OPPO手机助手
  9. java堆外内存6_Java 堆外内存的使用
  10. SpringBoot 入门篇(二) SpringBoot常用注解以及自动配置
  11. 【VRP】基于matlab遗传算法求解多中心的车辆路径规划问题【含Matlab源码 010期】
  12. 2018年最新全国县级以上行政区划对应关系数据(按国家统计局网站整理)
  13. Unity流水账4:动画
  14. erstudio怎么导入mysql数据库?_使用ERStudio生成数据库设计文档。
  15. 新版2002觅知blibli专用可对接JSON解析弹幕播放器-所有后台功能一键管理-更新22-4-29详解
  16. c语言中char转换为int的问题
  17. 动态改变shiro的Principal属性
  18. SystemUI之NavigationBar导航栏
  19. ZJU PAT的一些代码
  20. BIO NIO AIO

热门文章

  1. JAVA 调用摄像头 拍照 实现人脸识别
  2. html base64 img 图片显示
  3. python中的模块和类_Python模块与类
  4. Js 在字符串中提取数字
  5. springboot毕设项目校园二手商品交易平台4kncl(java+VUE+Mybatis+Maven+Mysql)
  6. 杰理之关于 SPI 主机配置参数的几个说明:【篇】
  7. BUUCTF [INSHack2018]Tricky-Part2
  8. 安全架构--9--企业安全开发体系建设总结
  9. 5G扬帆 -- 2022中国国际信息通信展推出数字医疗健康展区
  10. 老师,强奸你时别叫痛(转载)