目前我在做的一个 app 由于需求,需要跟踪用户的移动路径。 那么我想给 app 添加一个后台不断运行的服务。并且不断读取当前位置然后保存到数据库。
我现在的一个实现就是通过 AlarmManager 建立一个每 x 秒的 alarm,再通过 alarm 呼叫前台服务。之后让前台服务进行 gps 信息获取。 git: https://github.com/Qiaorui/GpsTracker
但是这样的做法会把服务变成前台服务,在界面上会不断提醒用户。 我想知道的是,微信,qq 这些是怎么做到不变成前台服务并且保持 gps 信息的获取的? 有没有一个 best practice ? 现在 Api 更新的挺多的,我找到的都已经 deprecated 了。
1
pimin 2018-02-02 03:26:24 +08:00 via Android
可以看下 Google 的 MyTracks 源码
目前项目已经停止服务了 |
2
ai277014717 2018-02-02 10:40:10 +08:00
这个我做过。微信,qq 都是毒瘤 APP,厂商会给开后门的。自己做的话基本没希望保活,除非打开开发者模式后台限制。不然分分钟被杀死。非要弄的话建议直接介入百度地图的 sdk。后台开一个 service,只做定位和保存数据库功能。
每次需要定位直接换行这个 service 即可,权限弄的多一些。 像 iOS 我也弄过,基本为了省电,1 分钟 gps 只工作十秒用完关闭可以达到一个省电的效果。 |
3
XinLake 2018-02-02 13:00:18 +08:00 via Android
GPS 信息这块,不用你 app 主动,位置信息更新系统会通知你,你 app 只需要注册 GPS 事件通知即可。
Android 编程,面向对象编程不要老想着那个“ main ” |
4
fangchang OP @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 |
6
s82kd92l 2018-02-03 00:24:12 +08:00 via Android
追踪用户路径还不让前台提醒用户,这得有多流氓啊?
|