Android 如何做一个 gps tracker?

2018-02-02 03:18:54 +08:00
 fangchang

目前我在做的一个 app 由于需求,需要跟踪用户的移动路径。 那么我想给 app 添加一个后台不断运行的服务。并且不断读取当前位置然后保存到数据库。

我现在的一个实现就是通过 AlarmManager 建立一个每 x 秒的 alarm,再通过 alarm 呼叫前台服务。之后让前台服务进行 gps 信息获取。 git: https://github.com/Qiaorui/GpsTracker

但是这样的做法会把服务变成前台服务,在界面上会不断提醒用户。 我想知道的是,微信,qq 这些是怎么做到不变成前台服务并且保持 gps 信息的获取的? 有没有一个 best practice ? 现在 Api 更新的挺多的,我找到的都已经 deprecated 了。

10718 次点击
所在节点    Android
7 条回复
pimin
2018-02-02 03:26:24 +08:00
可以看下 Google 的 MyTracks 源码
目前项目已经停止服务了
ai277014717
2018-02-02 10:40:10 +08:00
这个我做过。微信,qq 都是毒瘤 APP,厂商会给开后门的。自己做的话基本没希望保活,除非打开开发者模式后台限制。不然分分钟被杀死。非要弄的话建议直接介入百度地图的 sdk。后台开一个 service,只做定位和保存数据库功能。
每次需要定位直接换行这个 service 即可,权限弄的多一些。
像 iOS 我也弄过,基本为了省电,1 分钟 gps 只工作十秒用完关闭可以达到一个省电的效果。
XinLake
2018-02-02 13:00:18 +08:00
GPS 信息这块,不用你 app 主动,位置信息更新系统会通知你,你 app 只需要注册 GPS 事件通知即可。

Android 编程,面向对象编程不要老想着那个“ main ”
fangchang
2018-02-02 16:59:54 +08:00
@pimin 谢谢!我看了下它的 git。不过它最后一次更新是 2015 年了。其中的实现方法已经不符合现在 android 的做法了。

@ai277014717 原来如此。 我主要是想把前台服务转成后台,并且尽量不被杀死吧。 现在后台服务默认如果不进白名单的话,就肯定会被干掉。而且一个小时里只能唤醒几次而已,远远不够达到路径跟踪的效果。

@XinLake 你是指 location manager 里注册一个监听么? 但这样还是需要一个 service 挂起一直监听。而这样一直存活的 service 已经在 Android 8.0 里被严格限制了。 在这两篇里都有提到。
https://developer.android.com/about/versions/oreo/background.html
https://developer.android.com/about/versions/oreo/background-location-limits.html
XinLake
2018-02-02 18:28:46 +08:00
@fangchang 额,是我低估你了。文档我这打不开,有什么有用的信息我再回你。
s82kd92l
2018-02-03 00:24:12 +08:00
追踪用户路径还不让前台提醒用户,这得有多流氓啊?
fangchang
2018-02-03 02:47:56 +08:00
@s82kd92l 如果是必须的话,那我自然也就不会再考虑转后台。 不过像鹅厂的 app 都可以做到,就想着是不是还有什么方法是我没想到的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/427881

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX