`
喧嚣求静
  • 浏览: 550435 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android百度地图定位 工具类

 
阅读更多
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百度地图定位工具类

    百度地图定位工具类,让app里面使用百度地图进行定位更加的方便

    百度地图工具类

    百度地图工具类,用它分分钟实现定位功能,简单易懂,方便好用!

    百度地图经纬度定位

    百度地图,一键定位功能,只需要传入一个经纬度即可快速定位哦。可以直接搬到项目里面使用。

    百度定位与百度地图

    百度定位与百度地图的工具类、jar包、配属权限都有,方便引用

    Android百度地图定位、显示用户当前位置

    本文实例为大家分享了Android百度地图定位、显示用户当前位置的工具类,供大家参考,具体内容如下 1、构建定位Option的工具类 import com.baidu.location.LocationClientOption; /** * 建造 LocationClientOption ...

    集成目前Android主流优秀第三方组件

    百度地图定位SDK 谷歌依赖注入库RoboGuice WebService调用库ksoap2 XML解析XStream 动画开源库nineoldandroids 表单验证库android-validation-komensky 更多优秀开源库等待集成... 已封装工具类: HTTP网络通信工具...

    Android集成主流优秀第三方组件框架

    百度地图定位SDK 谷歌依赖注入库RoboGuice WebService调用库ksoap2 XML解析XStream 动画开源库nineoldandroids 表单验证库android-validation-komensky 更多优秀开源库等待集成... 已封装工具类: HTTP网络通信工具...

    Android例子源码集成安卓主流优秀第三方组件框架.zip

    百度地图定位SDK 谷歌依赖注入库RoboGuice WebService调用库ksoap2 XML解析XStream 动画开源库nineoldandroids 表单验证库android-validation-komensky 更多优秀开源库等待集成... 已封装工具类: HTTP网络...

    android上百例精品实例源码(非常值得下载)收藏

    百度地图API 之 定位周边搜索POI.zip 百度手机地图 实例集合.rar 获取Gps信息的程序源码.rar 进度条对话框Demo.zip 通话记录源码.rar 飞行射击类游戏源码.rar 这个是传送门,如果觉得资源好可以去这里下载...

    集成安卓主流优秀第三方组件框架.zip

    百度地图定位SDK 谷歌依赖注入库RoboGuice WebService调用库ksoap2 XML解析XStream 动画开源库nineoldandroids 表单验证库android-validation-komensky 更多优秀开源库等待集成... 已封装工具类: HTTP网络...

    android开发资料大全

    百度地图API 之 定位周边搜索POI(奉上源代码) Android 应用小实例--炫酷计时器 android客户端连接服务器并交互实例 Android小项目合集(经典教程) 看到很强大的实例----高仿【优酷】圆盘旋转菜单 的实现 如何...

    Android例子源码集成安卓主流优秀第三方组件框架

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义控件、实用工具类封装、以及一些APP共通模块...百度地图定位SDK 谷歌依赖注入库RoboGuice WebService调用库ksoap2 XML解析XStream 动画开源库nineold

    zxing.java源码解析-allUtils:搜集工具类

    本文来自zftlive(本人只是暂存,再次表明,其中也加入了其他的一些工具类,只是暂存本人使用过和见过有用的工具类,实力不足非我原创),顾名思义“曾繁添的生活”,我是一个追求技术的代码狂,我的生活很单纯,占据我大...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    (1)针对多窗口类浏览器模式问题,指出并分析了该问题存在的原因,利用Activity的运行机制,通过Fragment栈对主要模块的Webview进行管理,实现对不同模块之间切换的控制。 (2)针对跨域数据交互问题,指出并分析了...

    带领新手快速开发Android App【视频+源码 完整版】

    第1章 课程介绍与项目准备 第2章 工具类封装与首页引导页开发 ...第4章 个人数据编辑 快递及号码地查询开发 ...第9章 二维码扫描生成 百度地图定位及绘制开发 第10章 细节优化与项目总结 【源码project】

    Java版QQ签到源码-enjoyshop:购物(商城)类app,项目主要分为主页、热卖、分类、购物车、我的五大板块.该app基本上覆盖市面上

    15.百度地图定位及Mob天气查询 基本封装与自定义: 1.ToolBar的封装 2.FragmentTabHost的自定义 3.一键清除的EditText 4.购物车的加减控件 5.短信验证倒计时的定时器 6.Glide的封装 7.自定义圆形头像(可自定义是否有...

    java版商城源码下载-OnlineShop:网上商店

    15.百度地图定位及Mob天气查询 基本封装与自定义: 1.ToolBar的封装 2.FragmentTabHost的自定义 3.一键清除的EditText 4.购物车的加减控件 5.短信验证倒计时的定时器 6.Glide的封装 7.自定义圆形头像(可自定义是否有...

    微信公众平台应用开发:方法、技巧与案例.(机械工业.柳峰)

     9.2.1 百度地图API产品简介 220  9.2.2 申请访问密钥 221  9.2.3 Place API的使用 221  9.2.4 步行导航检索的使用 224  9.2.5 百度坐标转换 225  9.3 MySQL的使用 227  9.3.1 MySQL的下载与安装 228 ...

    仿途牛.zip

    1)登录及注册 2)用户头像的上传 3)鱼塘的创建(鱼塘都是百度地图定位到的周边建筑) 4)加入其它鱼塘 5)想要卖出的商品的发布(可选择发布到的鱼塘及商品的分类) 6)鱼塘的人气以及发布数 7)下单购买买商品 8...

    JAVA上百实例源码以及开源项目

    有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码加以改进做成小工具。 Java右键弹出...

Global site tag (gtag.js) - Google Analytics