免费计算机类电子书资源,欢迎关注公众号“小黄鸽鸽叨叨叨”领取!
代码块
定位工具类:
package com.steptowin.eshop.common.tools;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationListener;
import com.steptowin.eshop.m.sql.bean.Location;
import com.steptowin.library.base.app.Pub;
import com.steptowin.map.amap.AMapWrapper;
/**
* Created by fjw on 2017/3/28.
*/
public class LocationHelper {
static LocationHelper intance;
private AMapWrapper mapWrapper;
private double lat;
private double longitude;
Location myLocation;
public static LocationHelper getInstance() {
synchronized (LocationHelper.class) {
if (intance == null) {
intance = new LocationHelper();
}
return intance;
}
}
public void updateLocation() {
mapWrapper = AMapWrapper.newInstance(null);
mapWrapper.getLocation(new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation.getErrorCode() == AMapLocation.LOCATION_SUCCESS) {
myLocation = Location.create(aMapLocation);
lat = aMapLocation.getLatitude();
longitude = aMapLocation.getLongitude();
}
//定位完就关掉
mapWrapper.stop();
}
});
}
public String getDistance(String begin, String distance) {
if (lat <= 0 || longitude <= 0 || Pub.IsStringEmpty(distance) || distance.equals("0"))
return "暂无法获取距离";
return begin == null ? "" : begin + distance + "km";
}
public double getLat() {
updateLocation();
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public Location getMyLocation() {
updateLocation();
return myLocation;
}
public void setMyLocation(Location myLocation) {
this.myLocation = myLocation;
}
}
- 1
代码思路解析:
更新Helper池定位更新Helper池定位获取Helper池定位获取Helper池定位用Helper池的定位请求用Helper池的定位请求updateLocation()getLat() 、getLongitude()
getLat()或者getLongitude()可以去更新一下定位信息,刚进入更新的时候去更新一下。这样使用的时候只要
double lat = LocationHelper.getInstance().getLat();
double longitude = LocationHelper.getInstance().getLongitude();
DoHttp(new StwHttpConfig("你的地址")
.put("lat",lat)
.put("long", long)
.setBack(new StwHttpCallBack<StwRetT<xxxx>>(getView(),
new TypeToken<StwRetT<xxx>>(){}){
@Override
public void onSuccess(StwRetT<xxxx> xxx) {
....
}
}));
- 1
我再也不用担心我的定位啦;也不用考虑定位失败的问题;
失败的处理:
public String getDistance(String begin, String distance) {
if (lat <= 0 || longitude <= 0 || Pub.IsStringEmpty(distance) || distance.equals("0"))
return "暂无法获取距离";
return begin == null ? "" : begin + distance + "km";
}
- 1
高德地图错误是直接返回0;我这里判断如果0的话 就返回无法获取距离;如果后台返回“空”和“0”就是商家没有距离(这个和你们后台定义好就行)。这样的话 定位内容就全部统一处理了。
如果有人有强迫症,说那你不是永远都是加载上次的定位信息。
那么你可以在onCreate->updateLoction onResume去请求。我尝试过 ,高德的定位是是比这onCreate->onResume的时间要短; 这个你们也可以自己测试一下。如果对定位时间相差要求很高,可以使用这个方法。一般可以不用,基本上人都是不动。两种方式都可以,看你们需求而定。
总结
好了,定位优化就这里了,如果就是获取一下定位的 记得定位完就关掉哦,比较定位还是耗电和流量的。