Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上定期轮询位置的正确方法?_Android_Android Intent_Android Service - Fatal编程技术网

在Android上定期轮询位置的正确方法?

在Android上定期轮询位置的正确方法?,android,android-intent,android-service,Android,Android Intent,Android Service,我正在寻找建立类似谷歌的实地考察应用程序。我希望证明的关键属性是: 每X分钟运行一次的后台“作业”,检查用户的位置并拨打webservice电话(这个问题实际上与位置部分无关) 即使用户退出主应用程序,作业也应运行 设备重新启动后,后台作业应自动启动 重新启动后,应用程序不应显示在“最近/历史”屏幕上 我的阅读让我了解了许多不同的类/API,从开机时的广播接收器到常规服务,再到报警管理器等。似乎有多种方法可以实现这一点,我很好奇社区推荐的高级方法是什么?您肯定希望使用广播管理器来获取启动事件

我正在寻找建立类似谷歌的实地考察应用程序。我希望证明的关键属性是:

  • 每X分钟运行一次的后台“作业”,检查用户的位置并拨打webservice电话(这个问题实际上与位置部分无关)
  • 即使用户退出主应用程序,作业也应运行
  • 设备重新启动后,后台作业应自动启动
  • 重新启动后,应用程序不应显示在“最近/历史”屏幕上

我的阅读让我了解了许多不同的类/API,从开机时的广播接收器到常规服务,再到报警管理器等。似乎有多种方法可以实现这一点,我很好奇社区推荐的高级方法是什么?

您肯定希望使用广播管理器来获取启动事件

就位置轮询而言,听起来您希望在收到启动事件后使用服务并启动它。

然后,您可以使用类似事件总线的方式将事件传递到您需要的任何地方


就时间而言,您可以使用作业管理器以不同的时间间隔运行任务,或者只是简单地创建一个runnable并让它随时运行。只要您将它保留在服务中,您就应该能够控制它正常运行的长度。无论应用程序是否关闭

我认为您可以将解决方案分为两部分:

  • 通过定义具有以下操作的广播接收器,在设备重新引导过程完成后启动应用程序或服务:

    并在广播“DoyourTask”的“onReceive”方法上启动服务,以侦听位置服务更新

  • 对于收听每x分钟更新一次的位置的部分,您最好使用alarm manager每x分钟“唤醒”一次服务,并且每个服务为下一次呼叫设置闹钟


感谢您的回答,我在您回答时更新了问题,这种方法是否也解决了我的要求“重新启动后,如果您在清单中的活动标记中添加android:excludeFromRecents=“true”,应用程序不应显示在“最近/历史”屏幕上,它不应该在最近出现。我希望应用程序在运行(UI)时显示,但不用于服务。我想我可以在这项服务上加上RecludefromRecents,或者不需要它。因此,一般的想法是,启动事件由广播管理器接收,并启动间隔服务,该服务每x分钟运行一次,而常规应用程序(活动)在用户单击应用程序图标时运行?听起来不错吧?是的,我很确定最近不会有服务出现。你说的是我对它的看法。让您的服务监听该事件,然后从那里开始运行。