为android封装的百度定位组件
16lz
2022-01-21
packagecom.android.location;importjava.math.BigDecimal;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.HttpStatus;importorg.apache.http.client.HttpClient;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.DefaultHttpClient;importorg.apache.http.util.EntityUtils;importorg.json.JSONObject;importandroid.content.Context;importandroid.os.Handler;importandroid.os.Message;importandroid.util.Log;importcom.baidu.location.BDLocation;importcom.baidu.location.BDLocationListener;importcom.baidu.location.LocationClient;importcom.baidu.location.LocationClientOption;/***利用百度地图定位**@authorEsa*/publicclassLocationService{privateStringTAG="Location";publicstaticfinalintDATA=6;privateLocationClientclient;privateLocationClientOptionoption;privateHandlerhandler;/***构造函数*/publicLocationService(Contextcontext){client=newLocationClient(context);//实例化定位类client.registerLocationListener(newBDLocationListener(){@OverridepublicvoidonReceiveLocation(BDLocationlocation){if(location!=null){intlocType=location.getLocType();//获取定位类型,161网络定位61GPS定位Log.w(TAG,"Locationtype="+locType);if(locType==BDLocation.TypeNetWorkLocation||locType==BDLocation.TypeGpsLocation){doublelatitude=location.getLatitude();//返回维度doublelongitude=location.getLongitude();//返回经度Stringaddress=location.getAddrStr();//返回地理信息floatradius=-1;if(location.hasRadius()){radius=location.getRadius();//获取定位精度半径,单位是米BigDecimalb=newBigDecimal(radius);radius=b.setScale(2,BigDecimal.ROUND_HALF_UP).floatValue();}if(handler!=null){StringBufferjson=newStringBuffer();json.append("{\"locType\":\"").append(locType==BDLocation.TypeNetWorkLocation?"网络定位":"GPS定位").append("\",");json.append("\"latitude\":\"").append(latitude).append("\",");json.append("\"longitude\":\"").append(longitude).append("\",");json.append("\"radius\":\"").append(radius).append("\",");json.append("\"address\":\"").append(address).append("\"}");Messagemsg=handler.obtainMessage();msg.what=DATA;msg.obj=json.toString();Log.d(TAG,"定位结果=>"+json.toString());handler.sendMessage(msg);}}}}@OverridepublicvoidonReceivePoi(BDLocationlocation){}});//设置监听option=newLocationClientOption();//实例化定位参数option.setAddrType("all");//设置返回地理信息option.setOpenGps(true);//option.setPriority(LocationClientOption.GpsFirst);option.setCoorType("bd09ll");//设置为百度坐标系option.disableCache(true);//不使用缓存option.setScanSpan(1000*3);//定位间隔client.setLocOption(option);//设置参数}/***通过经纬度获取地理信息**@paramlatitude*@paramlongitude*@return*/publicsynchronizedStringgetAddress(Stringlatitude,Stringlongitude){HttpClientclient=newDefaultHttpClient();HttpGetget=newHttpGet(String.format("http://api.map.baidu.com/geocoder/v2/?ak=%s&location=%s,%s&output=%s&pois=%s","C2ab471c7883b11890e509c2abb27b56",latitude,longitude,"json","0"));try{HttpResponseresponse=client.execute(get);if(response.getStatusLine().getStatusCode()!=HttpStatus.SC_OK){returnnull;}HttpEntityentity=response.getEntity();if(entity!=null){Stringjson=EntityUtils.toString(entity,"UTF-8");JSONObjectobject=newJSONObject(json);intstatus=object.getInt("status");if(status==0){Stringaddress=object.getJSONObject("result").getString("formatted_address");if(address!=null&&!"".equals(address.trim())){returnaddress;}}}}catch(Exceptione){Log.e(TAG,"",e);}returnnull;}/***启动定位**@paramhandler*接收的handler*/publicvoidstart(Handlerhandler){this.handler=handler;this.start();}/***开启定位*/privatevoidstart(){if(client.isStarted()){Log.w(TAG,"定位服务正在运行");}else{Log.d(TAG,"开启定位");client.start();}}/***是否正在定位**@return*/publicbooleanisStarted(){returnclient.isStarted();}/***停止定位*/publicvoidstop(){Log.d(TAG,"定位服务关闭");client.stop();handler=null;}}
使用方法:
LocationServiceservice=newLocationService(Context);service.start(Handler);
更多相关文章
- Android(安卓)监听手机GPS打开状态实现代码
- Android通过原生方式获取经纬度与城市信息的方法
- Android中的HashMap原理实践探索,重写equals(),为什么重写hashCode
- Android双击返回键退出程序的实现方法
- android 内部文件读取
- (1)集成
- Android中文API(132) —— GpsSatellite
- Android中文API(136) —— Bitmap
- Android中文API(136) —— GeoCoder