import android.util.Log; import android.widget.Toast; import com.baidu.lbsapi.BMapManager; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.location.LocationClientOption.LocationMode; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MarkerOptions; import com.baidu.mapapi.model.LatLng; 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 com.smsc.os.R; import com.smsc.os.frameset.ApplicationExt; import com.smsc.os.utils.WifiNetUtils; /** * description 百度定位地理位置信息工具类 * * @author 喧嚣求静 * @version V1.0 createTime:2014年6月4日 下午4:21:22 */ public class BdMapLocationUtils { private static BdMapLocationUtils single = null; private GeoCoder mMKSearch = null; // 定位客户端 private LocationClient mLocationClient = null; // 百度定位结果回调 private BDLocationListener myListener = new MyLocationListener(); // 定位成功返回信息的回调 private BdLocationSuccessListenner listenner = null; public static interface BdLocationSuccessListenner { public void locationResult(double _latitude, double _longitude, String _locationAddr,String _locationType); } private BdMapLocationUtils() { if (mLocationClient == null) initClient(); } // 静态工厂方法 public synchronized static BdMapLocationUtils getInstance() { if (single == null) { single = new BdMapLocationUtils(); } return single; } private void initClient() { // 声明LocationClient类 mLocationClient = new LocationClient(ApplicationExt.getApplication()); initLoctaionOpt(); } // 初始化定位参数 private void initLoctaionOpt() { LocationClientOption option = new LocationClientOption(); // 设置定位模式 option.setLocationMode(LocationMode.Hight_Accuracy); option.setOpenGps(true);//打开gps // 返回的定位结果是百度经纬度,默认值gcj02 option.setCoorType("bd09ll"); // 设置发起定位请求的间隔时间为5000ms option.setScanSpan(5000); // option.setScanType(5000); // 返回的定位结果包含地址信息 option.setIsNeedAddress(true); // 返回的定位结果包含手机机头的方向 option.setNeedDeviceDirect(true); mLocationClient.setLocOption(option); // 注册监听函数 mLocationClient.registerLocationListener(myListener); } /** * 启动百度定位 * * @param * */ public void startLocation(BdLocationSuccessListenner listenner) { // 首先检测下网络是否连接 if (!WifiNetUtils.isNetworkConnected(ApplicationExt.getApplication())) { Toast.makeText(ApplicationExt.getApplication(), R.string.nowifi, Toast.LENGTH_SHORT).show(); return; } this.listenner = listenner; if (mLocationClient == null) initClient(); if (!mLocationClient.isStarted()) mLocationClient.start(); if (mLocationClient != null && mLocationClient.isStarted()) { mLocationClient.requestLocation(); }/* else { Toast.makeText(ApplicationExt.getApplication(), "locClient is null or not started", Toast.LENGTH_SHORT) .show(); return; }*/ } public void stopLocation() { if (mLocationClient != null) mLocationClient.stop(); // MKSearch 对象在不使用时需执行销毁函数. if (mMKSearch != null) mMKSearch.destroy(); } private class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null) return; /* * StringBuffer sb = new StringBuffer(256); sb.append("time : "); * sb.append(location.getTime()); sb.append("\nerror code : "); * sb.append(location.getLocType()); sb.append("\nlatitude : "); * sb.append(location.getLatitude()); sb.append("\nlontitude : "); * sb.append(location.getLongitude()); sb.append("\nradius : "); * sb.append(location.getRadius()); */ if (location.getLocType() == BDLocation.TypeGpsLocation) { /* * sb.append("\nspeed : "); sb.append(location.getSpeed()); * sb.append("\nsatellite : "); * sb.append(location.getSatelliteNumber()); */ if (mMKSearch == null) mMKSearch = GeoCoder.newInstance(); // 注意,MKSearchListener只支持一个,以最后一次设置为准 mMKSearch.setOnGetGeoCodeResultListener(new MySearchListener()); // 逆地址解析 LatLng ptCenter = new LatLng(location.getLatitude(),location.getLongitude()); // 反Geo搜索 mMKSearch.reverseGeoCode(new ReverseGeoCodeOption() .location(ptCenter)); // mMKSearch.geocode(key, city);//地址解析 } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) { /* * sb.append("\naddr : "); sb.append(location.getAddrStr()); */ if (listenner != null) listenner.locationResult(location.getLatitude(), location.getLongitude(), location.getAddrStr(),"TypeNetWorkLocation"); stopLocation(); } // logMsg(sb.toString()); } public void onReceivePoi(BDLocation poiLocation) { // 将在下个版本中去除poi功能 if (poiLocation == null) { return; } StringBuffer sb = new StringBuffer(256); sb.append("Poi time : "); sb.append(poiLocation.getTime()); sb.append("\nerror code : "); sb.append(poiLocation.getLocType()); sb.append("\nlatitude : "); sb.append(poiLocation.getLatitude()); sb.append("\nlontitude : "); sb.append(poiLocation.getLongitude()); sb.append("\nradius : "); sb.append(poiLocation.getRadius()); if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation) { sb.append("\naddr : "); sb.append(poiLocation.getAddrStr()); } // logMsg(sb.toString()); } } private class MySearchListener implements OnGetGeoCoderResultListener { @Override public void onGetGeoCodeResult(GeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(ApplicationExt.getApplication(), "抱歉,未能找到结果", Toast.LENGTH_LONG) .show(); } } @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(ApplicationExt.getApplication(), "抱歉,未能找到结果", Toast.LENGTH_LONG).show(); } if (listenner != null) listenner.locationResult(result.getLocation().latitude, result.getLocation().longitude, result.getAddress(),"TypeGPSLocation"); }} }
相关推荐
总的来说,"Android-BDLocationUtil"是一个实用的工具,它降低了Android开发者集成百度地图定位服务的门槛,提高了开发效率,同时也优化了应用的定位体验。通过深入理解和合理运用这个工具类,开发者可以更专注于...
在Android开发中,百度地图API是一个非常常用的工具,它提供了丰富的地图展示、定位、路径规划等功能,极大地便利了开发者在构建地理位置相关应用时的工作。"老罗android 百度地图开发源码"是一个示例项目,它展示了...
总的来说,实现“Android开发之百度地图定位打卡”涉及到Android应用开发基础、百度地图API的集成与使用、位置服务的管理和定制化功能的实现等多个方面,需要开发者具备扎实的Android编程技能和良好的问题解决能力。...
百度地图作为一款功能强大的地图服务工具,在Android开发中被广泛应用。对于地图的交互操作(如缩放),开发者往往希望能够在地图状态改变时获取到相应的事件,以便执行特定的操作。本文将详细介绍如何在Android应用...
在"Android百度地图Marker轨迹坐标连线"这个项目中,我们主要关注如何在地图上显示多个Marker并用线段连接它们,形成一条轨迹。这个功能在路径规划、导航或者运动轨迹记录等场景中非常实用。 首先,我们需要集成...
本项目“Android-Android定位基于百度基础定位sdk封装”提供了一个方便开发者使用的Android定位解决方案,它基于百度地图SDK进行封装,简化了集成过程,使得开发者能够更快速地实现定位功能。 首先,我们需要了解...
百度地图工具类,用它分分钟实现定位功能,简单易懂,方便好用!
在Android开发中,百度地图API是一个非常实用的工具,它为开发者提供了丰富的地图服务功能,包括定位、路线规划、城市查询以及兴趣点(POI)搜索。以下将详细阐述这些功能及其实现方式。 首先,**定位功能**是百度...
在Android开发中,百度地图API提供了丰富的功能,包括定位、离线地图、测量以及运动轨迹绘制等。这些功能使得开发者可以构建出具有专业地理信息处理能力的应用。在使用百度地图API时,尤其对于Android 6.0及以上版本...
在Unity游戏引擎中调用Android百度地图SDK是一项常见的跨平台开发任务,这使得开发者能够在Unity游戏中集成地图功能,实现定位、导航、路线规划等服务。本文将深入探讨如何实现这一技术,以及涉及到的相关知识点。 ...
在Android开发中,百度地图SDK是一个非常重要的工具,它提供了丰富的地图功能,如定位、路线规划、地图渲染等,使得开发者能够轻松地在应用程序中集成地图功能。本篇将深入探讨"android 百度地图学习SDK案例"的相关...
在Android开发中,百度地图API是一个非常实用的工具,它为开发者提供了丰富的地图展示、定位、路线规划等功能。本文将详细解析"android 百度地图案例(源码)",帮助初学者理解如何在Android应用中集成并使用百度...
在Android开发中,百度地图API是一个非常实用的工具,它为开发者提供了丰富的地图展示、定位、路线规划等功能。本教程将基于"android 百度地图演示源码"这个项目,详细解析其背后的IT知识点。 首先,我们要理解...
本资源“Android百度地图API源码.zip”包含的是百度地图API的源代码,这对于理解其内部工作原理、自定义功能以及优化性能非常有帮助。现在,我们将深入探讨这个API的几个关键知识点。 首先,**地图展示**是百度地图...
在Android开发中,百度地图API是一个非常重要的工具,它提供了丰富的地图展示、定位、路径规划等功能,使得开发者能够轻松地将地图集成到自己的应用程序中。本篇主要探讨如何在Android应用中实现百度地图的标注及...
"Android百度地图覆盖层"这个知识点主要涉及如何在地图上显示自定义的图形元素,如标记、信息窗口、自定义图层等,以增强地图的信息展示和交互性。 首先,我们要理解什么是覆盖层(Overlay)。在百度地图API中,...
本项目"定位路线规划android百度地图源码"提供了一个完整的解决方案,利用百度地图API来实现实时定位、路径规划以及地图上的轨迹绘制。下面将详细讲解其中涉及的技术点。 1. **百度地图SDK集成**: 百度地图SDK是...
在Android开发中,将JSON数据解析并显示在百度地图上是一项常见的任务,特别是在构建地理位置相关的应用时。本项目"android读取JSON数据在百度地图上画线"提供了一个实际的示例,展示如何使用Android Studio处理JSON...
总的来说,通过分析"android百度地图源码",我们可以学习到如何在Android应用中集成百度地图,实现地图显示、定位、路径规划等核心功能。这不仅加深了对Android SDK的理解,也拓展了在地理信息系统方面的开发技能。...
在Android开发中,百度地图SDK是一个非常重要的工具,它提供了丰富的功能,如定位、地图展示、路线规划等。本文将详细解析"Android 百度地图 SDK v3.4.0"中的定位功能以及如何结合方向传感器来实现更精确的导航体验...