定期向android中的服务器发送数据

时间:2015-08-27 05:04:30

标签: java android google-cloud-messaging alarmmanager

我正在尝试在我现有的Android应用程序中添加一项功能,其中应用程序应该在用户登录后每分钟向服务器发送GPS坐标,并在应用程序关闭时停止发送。我想使用调度程序在后台运行的东西,并且每分钟发送坐标。 另外,我有一种方法可以返回GPS坐标。此外,如果用户设备上的互联网不可用,那么坐标必须存储在本地数据库中(表格已经到位),然后在用户登录时可以使用互联网时发送坐标列表。 / p>

我考虑过几个选项,需要一些建议才能使用:

  1. AlarmManager:根据Google的android documentation - “它可能不是您应用的最佳选择,特别是如果您需要触发网络操作”
  2. JobScheduler API:适合我的目的,但它包含在Android 5.0 API 21中,我的应用程序是为API 9开发的。
  3. 使用SyncAdapter的GCM:我不确定这是否需要大量工作并达到我的目的。
  4. 如果有人使用过任何这些服务并有意见,请建议我应该使用哪一种服务。

    由于 ~S

2 个答案:

答案 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(此数字可以根据连接的网络类型和电池电量更改)位置然后一次性上传所有这些内容。