【问题标题】:Geolocation when device goes idle设备空闲时的地理位置
【发布时间】:2018-04-25 12:02:13
【问题描述】:

我在 iOS 和 Android 上的 appcelerator 应用需要每 5 秒获取一次最新的地理位置并将位置发送回服务器。

当应用程序打开并且屏幕打开时,它运行良好,但是在两个平台上,当屏幕关闭时,地理位置对象似乎不会经常更新 - 所以即使我每 5 秒获取一次地理位置,它也是不准确。

如何在手机屏幕关闭时定期更新地理位置?

【问题讨论】:

  • 感谢@AtishAgrawal - 我创建了一个后台服务。它会运行,但一旦屏幕关闭,它就不再获取地理位置数据。有什么想法吗?
  • 您一定是缺少唤醒锁。检查它。另外,请检查您的服务是否在后台运行?
  • 我设置了 WakeLock。该应用程序仍每 5 秒输出一次控制台日志,因此我知道它仍在运行。这是地理定位对象不会随着新位置更新。
  • 你能分享一些代码,以便我们可以看到你缺少什么吗?它将帮助我们更好地诊断

标签: android appcelerator appcelerator-titanium appcelerator-mobile appcelerator-alloy


【解决方案1】:

您应该在前台请求地理定位Intent Service,否则它将无法在 Android O 上以 5 秒的精度运行。

您还应该使用WakeLock 来阻止睡眠模式。

【讨论】:

  • 谢谢@DEADMC 我会玩wakelock。您是说即使使用唤醒锁我也无法使用 Android O 达到 5 秒的准确度?操作系统中有什么东西会阻止我实现它吗?
  • @EngWeiChua 现在 WakeLock 将为您提供 5 秒的准确度。
【解决方案2】:

您真的想在设备关闭时每 5 秒获取一次位置吗?这将很快耗尽电池。我认为每 5 到 10 分钟 会更合适。甚至可能这也太过分了。

如果您真正需要的是定期、定期更新位置,我建议以下两种解决方案:

注意:对于 android,我们发现操作系统会定期终止我们的服务,虽然它总是安排它重新启动,但有时,它会安排很长时间(例如 8 小时)。我们最终使用了一个 AlarmService (https://github.com/benbahrenburg/benCoding.AlarmManager) 来定期启动我们的后台代码(例如每 30 分钟一次),后台代码会在大约 25 分钟后自行关闭。

另外,如果您关心您的服务在设备重启后会启动备份,您应该考虑使用 BootReceiver (https://github.com/benbahrenburg/benCoding.Android.Tools/) 来重启 AlarmService。

显然,Ben Bahrenburg 出色的模块是他的大功臣!

【讨论】:

  • 感谢您的回复。该应用程序不适用于消费者,它是企业出于责任原因极其准确地跟踪一个人的位置。在 Android 上,我实现了一个后台服务。当应用程序不在前台时,它会为我提供位置,但是一旦屏幕关闭,就没有位置更新事件。这发生在三星 S8 上。我创建了一个手动 GPS 位置提供程序,但是一旦手机屏幕关闭,地理位置更新就会停止。如果我运行这个应用程序,它可以运行 GPS Keeper Lite。我不知道它是怎么做到的!
  • 我们使用后台服务,并且我们能够持续获取位置更新(尽管频率比您尝试完成的频率低得多)。但是,我们没有收到“事件”——我们直接调用 Ti.Geolocation.getCurrentPosition()
【解决方案3】:

在 7.2.0 中似乎会对此进行修复

https://jira.appcelerator.org/browse/TIMOB-16066

还有一个第 3 方模块也可以解决问题

https://github.com/AppWerft/Ti.LocationUpdatesService

我还没有尝试过

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多