gpt4 book ai didi

android - 像健身应用程序中的位置跟踪

转载 作者:行者123 更新时间:2023-11-30 01:50:44 25 4
gpt4 key购买 nike

我的目标

即使应用程序未在前台运行(这意味着启动位置跟踪的 Activity 可能会被破坏),也会以相当高的频率(例如每 30 秒)获取用户位置更新相当长的时间(例如 8 小时)。

问题

我发现了很多关于 Android 应用中的位置跟踪的文章。较新的通常会解释如何使用 Google Play 服务的位置 API。

问题是,在大多数情况下,它们演示了与 ActivityLocationListener 合作获取位置更新。例如在 Google's tutorial .很明显这不是我需要的。长时间运行的后台位置更新的唯一方法是基于服务的定期启动(通过 AlarmManager)运行,直到它获得足够准确的位置更新。但是,这种方法似乎不适合我需要的频率。

因此,我最终得出了如何解决该主题的自定义想法,但欢迎您提出批评。在这里:

可能的解决方案的想法

  • MainActivity - 仅用于通过启动/停止 MonitoringService
  • 来启动/停止跟踪
  • MonitoringService - 一种前台服务,从 Google Play 服务到 LocationServices 的整个连接都发生在该服务中。此外,一旦连接,就会调用 requestLocationUpdates 方法,但它的变体带有 PendingIntent 对象。待定Intent bundle 含调用 MyWakefulBroadcastReceiver 类的 Intent 。 此外,该服务持有部分唤醒锁,以防止设备进入休眠状态并中断位置更新的接收。在这里,我不确定持有唤醒锁是否真的有帮助。
  • MyWakefulBroadcastReceiver - 扩展WakefulBroadcastReceiver,只是通过startWakefulService
  • 启动 LocationProcessingIntentService
  • LocationProcessingIntentService - 处理通过 intent 传递给它的位置更新。网络通信在这里进行。因此,它是在单独的服务中完成的,而不是直接在 MonitoringService
  • 中完成的

目前,我在未获取 MonitoringService 中的部分唤醒锁的情况下实现了上述解决方案。当连接到 Android Studio 中的调试器时,我看到位置更新的处理工作。但是,我不确定它会在例如之后做什么。在不连接笔记本电脑的情况下运行 4 小时(好像是为了调试目的)

问题

  1. 从架构/性能/电池生命周期的角度来看,这种方法是否可行?
  2. 我是否应该使用唤醒锁来确保设备不会进入休眠状态?
  3. 如果对 2. 的回答是肯定的,我是否仍需要使用 WakefulBroadcastReceiver 来启动 IntentService 处理位置更新?
  4. 还有其他建议吗?

最佳答案

你所拥有的大部分都很好。您不需要 MonitoringServicePendingIntent 将唤醒您的 BroadcastReceiver,无论您的应用处于何种状态。您不需要永久唤醒锁。只需在设置 Activity 中使用 PendingIntent 即可 requestLocationUpdates

请记住,位置服务已经在后台运行(只要用户启用了位置服务),因此您也不需要运行永久唤醒锁定服务(您可以在 BroadcastReceiver#onReceive(),但不要忘记在处理后释放唤醒锁。

您可能唯一需要担心 PendingIntent 没有唤醒您的 BroadcastReceiver 的情况是用户强制停止您的应用程序。在这种情况下,您可以选择尊重用户的决定。您还可以探索使用 intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 这应该将您的 BroadcastReceiver 从停止状态唤醒,但我没有在这种情况下测试这个标志。

关于android - 像健身应用程序中的位置跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com