| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- package com.xzjmyk.pm.activity;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- 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.xzjmyk.pm.activity.sp.LocationSp;
- public class BdLocationHelper {
- public static final String ACTION_LOCATION_UPDATE = AppConfig.sPackageName + ".action.location_update";
- private Context mContext;
- private double mLongitude;
- private double mLatitude;
- private String mAddress;
- private String mProvinceName;// 省份
- private String mCityName;// 城市
- private String mDistrictName;// 街道
- private boolean isLocationUpdate;// 本次程序启动后,位置有没有成功更新一次
- private LocationClient mLocationClient = null;
- private int mFaildCount = 0;
- BdLocationHelper(Context context) {
- mContext = context;
- // 获取上一次的定位数据
- mLongitude = LocationSp.getInstance(context).getLongitude(0);
- mLatitude = LocationSp.getInstance(context).getLatitude(0);
- mAddress = LocationSp.getInstance(context).getAddress("");
- mProvinceName = LocationSp.getInstance(context).getProvinceName("");
- mCityName = LocationSp.getInstance(context).getCityName("");
- mDistrictName = LocationSp.getInstance(context).getDistrictName("");
- mLocationClient = new LocationClient(context); // 声明LocationClient类
- mLocationClient.registerLocationListener(mMyLocationListener); // 注册监听函数
- LocationClientOption option = new LocationClientOption();
- option.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式
- option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
- option.setScanSpan(5000);// 设置发起定位请求的间隔时间为10s
- option.setIsNeedAddress(true);
- option.setNeedDeviceDirect(false);
- mLocationClient.setLocOption(option);
- requestLocation();
- }
- public void release() {
- if (mLocationClient.isStarted()) {
- mLocationClient.stop();
- }
- }
- public void requestLocation() {
- if (!mLocationClient.isStarted()) {
- mFaildCount = 0;
- mLocationClient.start();
- } else {
- int scanSpan = mLocationClient.getLocOption().getScanSpan();
- if (scanSpan < 1000) {
- mLocationClient.getLocOption().setScanSpan(5000);
- }
- }
- }
- private BDLocationListener mMyLocationListener = new BDLocationListener() {
- @Override
- public void onReceiveLocation(BDLocation location) {
- int resultCode = 0;
- if (location != null) {
- resultCode = location.getLocType();
- }
- // 百度定位失败
- if (resultCode != BDLocation.TypeGpsLocation && resultCode != BDLocation.TypeCacheLocation
- && resultCode != BDLocation.TypeOffLineLocation && resultCode != BDLocation.TypeNetWorkLocation) {
- if (AppConfig.DEBUG) {
- Log.d(AppConfig.TAG, "百度定位失败");
- }
- mFaildCount++;
- if (mFaildCount > 3) {// 停止定位
- mLocationClient.stop();
- }
- return;
- }
- // 百度定位成功
- mLongitude = location.getLongitude();
- mLatitude = location.getLatitude();
- if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
- mAddress = location.getAddrStr();
- mProvinceName = location.getProvince();
- mCityName = location.getCity();
- mDistrictName = location.getDistrict();
- if (AppConfig.DEBUG) {
- Log.d(AppConfig.TAG,
- "百度定位信息 City:" + location.getCity() + " CityCode:" + location.getCityCode() + " 区:" + location.getDistrict());
- }
- }
- if (!isLocationUpdate) {
- LocationSp.getInstance(mContext).setLongitude((float) mLongitude);
- LocationSp.getInstance(mContext).setLatitude((float) mLatitude);
- LocationSp.getInstance(mContext).setAddress(mAddress);
- LocationSp.getInstance(mContext).setProvinceName(mProvinceName);
- LocationSp.getInstance(mContext).setCityName(mCityName);
- LocationSp.getInstance(mContext).setDistrictName(mDistrictName);
- isLocationUpdate = true;
-
-
-
- }
- if (AppConfig.DEBUG) {
- Log.d(AppConfig.TAG, "百度定位信息 mLongitude:" + mLongitude + " mLatitude:" + mLatitude + " mAddressDetail:" + mAddress);
- }
- mLocationClient.stop();
- // if (isTimingScan()) {// 停止定时定位
- // mLocationClient.getLocOption().setScanSpan(100);
- // }
- mContext.sendBroadcast(new Intent(ACTION_LOCATION_UPDATE));// 发送广播
- }
- };
- // 获取经纬度
- public double getLongitude() {
- return mLongitude;
- }
- // 获取经纬度
- public double getLatitude() {
- return mLatitude;
- }
- // 获取地址详情
- public String getAddress() {
- return mAddress;
- }
- public String getProvinceName() {
- return mProvinceName;
- }
- public String getCityName() {
- return mCityName;
- }
- public String getDistrictName() {
- return mDistrictName;
- }
- public boolean isLocationUpdate() {
- return isLocationUpdate;
- }
- public boolean hasData() {
- return mLatitude != 0 && mLongitude != 0;
- }
- }
|