当前位置: 代码迷 >> Android >> android百度map定位 工具类
  详细解决方案

android百度map定位 工具类

热度:6   发布时间:2016-04-27 23:24:34.0
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");  		}}}

?

  相关解决方案