实施地理围栏 - 在应用程序未运行时接收地理围栏转换事件

Posted

技术标签:

【中文标题】实施地理围栏 - 在应用程序未运行时接收地理围栏转换事件【英文标题】:Implementing Geo-fencing - Receiving geo-fences transition events when the app is not running 【发布时间】:2016-04-17 22:37:00 【问题描述】:

我正在实施地理围栏。它工作得很好,但它们的转换事件只有在应用程序处于后台或前台时才会触发。我有一个 IntentService 接收地理围栏转换事件,但我的问题是这个意图服务只在应用程序运行时接收更新。

该实现有一个标准的 LocationService,用于在应用运行时管理地理围栏,然后是一个 IntentService,当检测到地理围栏转换时,操作系统会通知它。

您是否有任何解决方案来接收转换,即使应用程序根本没有运行?

谢谢。

【问题讨论】:

【参考方案1】:

Intent service 应该启动一个工作线程,处理您计划执行的任何操作,然后自行关闭。在您的情况下,当应用程序运行时,服务基本上会生成、运行,然后自行关闭。

来自安卓文档

服务根据需要启动,使用工作线程依次处理每个 Intent,并在工作结束时自行停止。

要解决这个问题,您可能希望通过扩展 Service 类来 create 您自己的服务实现。

Checkout diff between Intent Service and Service

P.S : 如果您提供了一些您尝试过的代码,那么您可以直接向您展示在应用程序未运行时究竟是什么没有让您的代码运行。

【讨论】:

【参考方案2】:

我根据official documentation 找到了解决方案。

建议的最小半径应在100150 米之间,特别是如果您在位置请求中使用PRIORITY_LOW_POWERPRIORITY_BALANCED_POWER_ACCURACY

我遇到的问题是我将地理围栏保存到半径非常小的设备(例如 20 米),在这种情况下,当应用程序运行时,设备根本没有检测到地理围栏转换事件未运行(不在后台和前台)。

【讨论】:

以上是关于实施地理围栏 - 在应用程序未运行时接收地理围栏转换事件的主要内容,如果未能解决你的问题,请参考以下文章

未触发 Android 地理围栏广播接收器

Android Oreo 上未添加地理围栏

应用程序在后台时未触发地理围栏通知

即使应用程序未运行,如何使用有效的地理围栏? [复制]

地理围栏 PendingIntent 始终为空

应用程序在后台时的地理围栏设备