关于手机定位并且画出一天行程路线的功能实现逻辑

最近做项目的时候突然发现可以给自己的手机加一个定位的系统,定时往服务器发送自己的位置,之后再把这些坐标放到百度地图之类的sdk上面,就能画出一天的行程。【以下只是下班之后弄的,其实代码只完成了50%,所以就不把代码贴出来了只是写一些代码逻辑,主要用来记录整个过程。

(一)关于定位的知识,这篇文章说得很详细https://www.cnblogs.com/kdkler/p/6196751.html。除了LocationManager等自带的工具类,咱们还可以使用百度定位的sdk。在定位之前,最好先获取当前最精准的地理位置传感器,android手机所有的传感器信息可以使用LocationManager类下的getAllProviders()获得,然后筛选

LocationManager.GPS_PROVIDER
LocationManager.NETWORK_PROVIDER
LocationManager.PASSIVE_PROVIDER

一般首选GPS。

(二)因为咱们这个功能必须要在后台长时间运行,所以必须使用service,并且要给这个定位的service开启另一个进程

android:process=":xxxService"

使用一个定时器或者一个不停短暂停止的thread获取到经纬度之后,使用Handler发送定位信息给主进程

ThreadManagerUtil.getThreadPollProxy().execute(new Runnable() {
    @Override
    public void run() {
        Bundle bundle = new Bundle();
        bundle.putString("address", address);
        bundle.putDouble("latitude", latitude);
        bundle.putDouble("longitude", longitude);
        Message msg = new Message();
        msg.what = GET_MESSENGER;
        msg.setData(bundle);
        try {
            if (mLocalMessenger != null) {
                mLocalMessenger.send(msg);
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
});

备注:经过测试,有些手机在室内或者一些奇怪的地方会获取不到经纬度,所以我在成功定位到一次位置之后就把经纬度保存到SharedPreferences里,以保证后续再地图上画线的连续性。

(三)android的高版本因为要提升系统的流畅性以及省电,会对后台没有任务标记的serivce进行扑杀,所以必须要加上一个保活的功能,我使用的是双进程守护,当其中一个进程被被kill时,另外一个进程负责重启。这篇关于双进程守护的文章说得很详细https://blog.csdn.net/qq_38520096/article/details/79007228

(四)要查看轨迹的话就用另一个app,这个app专门读取服务器上的经纬度数据,然后用百度地图api画出线路图https://blog.csdn.net/u013351759/article/details/51768136

【先记录到这,后续再完善

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值