我正在尝试在我现有的Android应用程序中添加一项功能,其中应用程序应该在用户登录后每分钟向服务器发送GPS坐标,并在应用程序关闭时停止发送。我想使用调度程序在后台运行的东西,并且每分钟发送坐标。 另外,我有一种方法可以返回GPS坐标。此外,如果用户设备上的互联网不可用,那么坐标必须存储在本地数据库中(表格已经到位),然后在用户登录时可以使用互联网时发送坐标列表。 / p>
我考虑过几个选项,需要一些建议才能使用:
如果有人使用过任何这些服务并有意见,请建议我应该使用哪一种服务。
由于 ~S
答案 0 :(得分:2)
我建议foreground service使用GcmNetworkManager(棒棒糖前的JobScheduler类型功能)或AlarmManager。
前台服务需要通知,告知用户您的应用处于活动状态,并允许其在屏幕关闭等时继续运行。
AlarmManager更准确地说是WRT预定的运行时间,而GcmNetworkManager更适合在最适合整个系统的时间运行任务,批量调用以优化电池寿命,在执行前检查网络连接等。 / p>
SyncAdapter可以为GcmNetworkManager提供类似的选项,但不是用于将数据发送到服务器的一种方式,因此SyncAdapter对此可能过度。
答案 1 :(得分:2)
Google会建议您的应用是否必须在后台连续轮询位置,然后使用FusedLocationApi
,这将在给定的时间间隔后触发,您将收到回调。在Google的培训部分查看整个实施。
Adding Location in your app
基本上,您必须在此处创建位置更新请求和设置间隔,以便获得更新(在您的情况下,它可能是1 min)然后设置优先级(高精度,功率平衡等),然后回调进行位置更新,并将fusedLocationService
连接到onCreate()
或onStart
你的活动。完成后,您将获得该时间间隔的位置更新。
确保在不使用服务时断开服务。
要将这些位置更新到服务器,我认为您应该再次批量上传,这取决于您的应用的使用情况。
同意@kroikie for syncAdapter如果您只有单向数据流,那么您不应该使用syncAdapter但应该进行批量上传,就像您可以在本地保存100(此数字可以根据连接的网络类型和电池电量更改)位置然后一次性上传所有这些内容。