博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为android封装的百度定位组件
阅读量:6702 次
发布时间:2019-06-25

本文共 4417 字,大约阅读时间需要 14 分钟。

  hot3.png

package com.android.location;import java.math.BigDecimal;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;import org.json.JSONObject;import android.content.Context;import android.os.Handler;import android.os.Message;import android.util.Log;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;/** * 利用百度地图定位 *  * @author Esa */public class LocationService {	private String TAG = "Location";	public static final int DATA = 6;	private LocationClient client;	private LocationClientOption option;	private Handler handler;	/**	 * 构造函数	 */	public LocationService(Context context) {		client = new LocationClient(context);// 实例化定位类		client.registerLocationListener(new BDLocationListener() {			@Override			public void onReceiveLocation(BDLocation location) {				if (location != null) {					int locType = location.getLocType();// 获取定位类型,161网络定位 61GPS定位					Log.w(TAG, "Location type = " + locType);					if (locType == BDLocation.TypeNetWorkLocation || locType == BDLocation.TypeGpsLocation) {						double latitude = location.getLatitude();// 返回维度						double longitude = location.getLongitude();// 返回经度						String address = location.getAddrStr();// 返回地理信息						float radius = -1;						if (location.hasRadius()) {							radius = location.getRadius();// 获取定位精度半径,单位是米							BigDecimal b = new BigDecimal(radius);							radius = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();						}						if (handler != null) {							StringBuffer json = new StringBuffer();							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("\"}");							Message msg = handler.obtainMessage();							msg.what = DATA;							msg.obj = json.toString();							Log.d(TAG, "定位结果 => " + json.toString());							handler.sendMessage(msg);						}					}				}			}			@Override			public void onReceivePoi(BDLocation location) {			}		});// 设置监听		option = new LocationClientOption();// 实例化定位参数		option.setAddrType("all");// 设置返回地理信息		option.setOpenGps(true);		// option.setPriority(LocationClientOption.GpsFirst);		option.setCoorType("bd09ll");// 设置为百度坐标系		option.disableCache(true);// 不使用缓存		option.setScanSpan(1000 * 3);// 定位间隔		client.setLocOption(option);// 设置参数	}	/**	 * 通过经纬度获取地理信息	 * 	 * @param latitude	 * @param longitude	 * @return	 */	public synchronized String getAddress(String latitude, String longitude) {		HttpClient client = new DefaultHttpClient();		HttpGet get = new HttpGet(String.format("http://api.map.baidu.com/geocoder/v2/?ak=%s&location=%s,%s&output=%s&pois=%s", "C2ab471c7883b11890e509c2abb27b56", latitude, longitude, "json", "0"));		try {			HttpResponse response = client.execute(get);			if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {				return null;			}			HttpEntity entity = response.getEntity();			if (entity != null) {				String json = EntityUtils.toString(entity, "UTF-8");				JSONObject object = new JSONObject(json);				int status = object.getInt("status");				if (status == 0) {					String address = object.getJSONObject("result").getString("formatted_address");					if (address != null && !"".equals(address.trim())) {						return address;					}				}			}		} catch (Exception e) {			Log.e(TAG, "", e);		}		return null;	}	/**	 * 启动定位	 * 	 * @param handler	 *            接收的handler	 */	public void start(Handler handler) {		this.handler = handler;		this.start();	}	/**	 * 开启定位	 */	private void start() {		if (client.isStarted()) {			Log.w(TAG, "定位服务 正在运行");		} else {			Log.d(TAG, "开启定位");			client.start();		}	}	/**	 * 是否正在定位	 * 	 * @return	 */	public boolean isStarted() {		return client.isStarted();	}	/**	 * 停止定位	 */	public void stop() {		Log.d(TAG, "定位服务 关闭");		client.stop();		handler = null;	}}

使用方法:

LocationService service = new LocationService(Context);service.start(Handler);

转载于:https://my.oschina.net/hes/blog/160295

你可能感兴趣的文章
RAD Studio增书签功能 单一窗口就可检视受标记
查看>>
硬盘基本知识(一)
查看>>
Python故事——three(附)
查看>>
ACL
查看>>
Kubernetes 通过statefulset部署redis cluster集群
查看>>
Mac安装Thrift
查看>>
Shell基础:介绍、历史命令、命令不全和别名、通配符、输入输入重定向、管道发和作业控制...
查看>>
【Linux】开源系统监控方案:Observium
查看>>
django 内置验证登录模块(auth login logout authenticate)测试
查看>>
小工具
查看>>
在VM虚拟机中安装Redhat6.5 / CentOs6.5
查看>>
用SVN、LNMP和MySQL三种环境 部署一个社交网站
查看>>
JEPLUS工作流之分支聚合——JEPLUS软件快速开发平台
查看>>
在EditPlus中配置JSHint插件,助你提高JS代码质量
查看>>
AOP(三)
查看>>
14-DHCP Snooping //网上IOU
查看>>
17-高级路由:OSPF区域类型:Stub、Totally Stubby
查看>>
30. Substring with Concatenation of All Words
查看>>
小门禁系统服务端(实现特定协议的服务端应用)开发
查看>>
Javascript面试题解析
查看>>