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);

更多相关文章

  1. Android(安卓)监听手机GPS打开状态实现代码
  2. Android通过原生方式获取经纬度与城市信息的方法
  3. Android中的HashMap原理实践探索,重写equals(),为什么重写hashCode
  4. Android双击返回键退出程序的实现方法
  5. android 内部文件读取
  6. (1)集成
  7. Android中文API(132) —— GpsSatellite
  8. Android中文API(136) —— Bitmap
  9. Android中文API(136) —— GeoCoder

随机推荐

  1. Android的CTS测试
  2. Java Android(安卓)线程池
  3. Android使用HttpURLConnection和HttpClie
  4. Android(安卓)各国语言缩写-各国语言简称
  5. Android(安卓)Studio开发准备
  6. Android(安卓)HelloWorld 例子
  7. Android自定义对话框(Custom Dialog)
  8. Android(安卓)O 硬鼠导致黑屏
  9. 性能优化之Java(Android)代码优化
  10. Android:Resources资源文件