优势:解决使用高德地图,百度地图等,无法在app处于后台时持续定位(比如service中)或者在后台定位一段时间后app被杀死的问题。主要思路就是循环播放非常短的一段无声音乐(由音乐app受启发)。
implementation 'com.github.BLiYing:GaodeLiabrary:v2.0.0'
<service
android:name="com.example.gaodelibrary.GaodeLibraryService"
android:enabled="true"
android:exported="false"
/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
UtilsContextOfGaode.init(this);
GaodeEntity gaodeEntity = new GaodeEntity("上下文");
//初始化定位相关参数
gaodeEntity.initLocation();
//开始定位
gaodeEntity.startLocation();
//关闭定位
gaodeEntity.closeLocation();
//参数说明:context上下文;startClass点击通知栏跳转的页面;resIdIcon通知栏图标;
//因为需要持续采集,所以用到了后台服务,必须告知用户;
GaodeEntity gaodeEntity = new GaodeEntity(Context context, Class<?> startClass,int resIdIcon);
//开始采集轨迹,此方法中处理了手机休眠和切换应用后app可能被杀死导致应用无法持续采集轨迹问题;
gaodeEntity.startTrace();
//停止采集
gaodeEntity.stopTrace();
OnGaodeLibraryListen.LocationListen得到AMapLocation对象;
获取AMapLocation后,可以过滤掉你不需要的点,比如
//速度为0时不进行业务运算
float speed = aMapLocation.getSpeed();
if (speed == 0) {
return;
}
//精度大于100米的点不进行业务运算
float accuracy = aMapLocation.getAccuracy();
if (accuracy > 100) {
return;
}
如果需要实时画线,声明一个List<LatLng>数组变量trackPoints来容纳轨迹点LatLng;
画线方法:
trackPoints.add(currentLatLng);
//库中自带setUpMap(trackPoints)方法可参考,由于v2.0.0版本去掉了2d和3d地图包,只能自己单独实现;
距离方法:
//计算上一个经纬度和下一个经纬度距离然后叠加
float distance = AMapUtils.calculateLineDistance(lastLatLng, currentLatLng);
/**
* 道格拉斯-普克算法抽稀之后上传,可以显著压缩采集点数量同时不影响轨迹显示,
* 节约一定的上传流量,保持手持端和web端显示一致
*/
Douglas douglas = new Douglas(new ArrayList<>(trackPoints), 2);
ArrayList<LatLng> latLngs_compress = douglas.compress();

