问题标签 [region-monitoring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - IOS 中的区域监控问题
我正在开发 4-5 个月的区域监控,之前它运行良好。一周前或之前,当我们在 IOS 7.1 的设备上测试代码时,我们发现了一个问题:
- 当检测到一个注册区域时,它永远不会再次被检测到,直到用户远离该区域 10Km 的距离,如果用户从未跨越这个 10Km 的范围,则不会为该区域调用进入/退出事件。如果用户距离检测到的区域 10 公里远,将调用其 Exit 事件,当用户回到注册区域附近时,将仅触发 Enter 事件。
这是我的代码:-我制作了一个位置管理器,并在位置管理器中对其进行了初始化:
然后我获取用户的当前位置并将其发送到服务器,以获取附近的地理围栏区域,并将它们注册为如下监控:
/li>
我尝试了不同的“distanceFilter”、“DesiredAccuracy”值,并使用不同的监控区域半径值来修复错误。但它没有用。
ios - 使用CoreLocation在后台退出区域时如何重置区域中心
我的想法在理论上很简单,但我很难执行它。我想在用户的位置创建一个地理围栏,当用户退出该区域时,我想在用户的更新位置重新定位该区域。这是流程:
- 使用标准 [CLLocationManager startUpdatingLocation] 检索用户的当前位置
- 在 locationManager:didUpdateLocations: 上,使用 startMonitoringForRegion 在当前位置创建地理围栏,并在后续位置更新时,重新定位该区域
- 在通常从后台调用以唤醒应用程序的 locationManager:didExitRegion: 上,调用 [CLLocationManager startUpdatingLocation] 以检索用户的当前位置以重新定位地理围栏(以不是当前区域中心坐标的下一个更新位置为中心) .
有时这一切都有效,但通常情况下,地理围栏无法正确重新定位。正在发生的事情是该区域重新居中并立即调用 locationManager:didExitRegion: ,这使其进入无限循环,直到应用程序再次终止。由于它在没有有效监控区域的情况下终止,因此应用程序不会被唤醒以进行位置更新。
这是对区域监控的错误使用吗?我正在尝试以不同的方式以电池高效的方式跟踪用户位置(而不是经常使用标准的 startUpdatingLocation)。标志位置变化跟踪和访问监控相结合会更有效吗?
谢谢!
ios - 尝试监视区域时是否有任何未记录的原因可能导致 kCLErrorRegionMonitoringFailure?
当我监控一个区域时,我经常会收到“无法监控区域错误”。我得到这个错误似乎没有任何一致性。我可以重复添加和删除完全相同的区域详细信息,它会看似随机地给我这个错误,一次尝试成功监控该区域,然后下一次失败并出现此错误。
核心位置文档将此错误列为:
kCLErrorRegionMonitoringFailure 无法监控注册区域。如果应用程序超过了它可以同时监控的最大区域数,则监控可能会失败。如果区域的半径距离太大,监控也会失败。
在 iOS 4.0 及更高版本中可用。
我不相信这两个原因中的任何一个都是本案的原因。
当以前没有注册任何区域时,我可以在全新的应用程序安装时收到此错误(因此不应超过我理解的最大值,即 10 或 20,具体取决于我正在阅读的位置)。
对于测试,半径已设置为 100m(显然是最小值),并且由于在反复尝试后,区域通常会使用与先前失败完全相同的位置和半径进行正常注册,因此位置详细信息似乎没有任何问题我正在提供。
是否有其他人遇到任何其他原因或标准会导致这种失败发生?
我已经在 iPhone 4s、5c 和 6 上使用一系列位置在 iOS 7 和 8 上进行了测试,并且经常出现错误,但并非始终如一或具有任何可识别的模式。当一个区域确实注册时,边界跨越事件会按预期触发。
android - Android Estimote 区域监控
我正在尝试将 Estimote SDK 添加到我的 Android 应用程序中。我已经很接近了,但是我在监视某个区域时遇到了一些麻烦。我在https://github.com/Estimote/Android-SDK关注 GitHub 上的 Estimote Android SDK 指南。
出于某种原因,onEnteredRegion 和 onExitedRegion 方法根本没有触发。我希望他们在应用程序看到 Estimote 信标时触发。谢谢!
这是我到目前为止的代码。没什么太复杂的:
ios - 禁用蓝牙时的 iOS 信标区域监控
我了解 iOS 允许基于 iBeacon 进行后台区域监控,但我找不到指示用户是否必须启用蓝牙的文档?
如果从控制中心禁用蓝牙,它仍然有效吗?如果用户禁用了蓝牙,我觉得这几乎没用。
ios - 需要获得 20 多个通知进行区域监控
我正在开发一个用户可以设置多个位置的应用程序。当用户进入或离开特定位置边界时,我成功显示通知。
现在,我需要为所有保存的位置提供监控,它可以是数百个甚至更多。我在 Apple 论坛和许多 iOS 设备只允许 20 个区域监控的地方读过。
我已经开发出我的代码来超越这种情况。我设置了 locationManager.distanceFilter = 200; 当我获得位置更新时。首先,我已经停止了所有区域监控和最近位置的条件,并再次为 20 个保存的位置启动区域监控。
我认为上述解决方案可能会导致在停止并重新启动区域监控时丢失任何已保存的位置。因此,请为我提供任何其他更好的解决方案来解决这 20 条区域监控问题的通知。
祝你今天过得愉快 。!!..
android - Android - 需要添加超过 100 个地理围栏
我正在开发一个用户可以设置多个位置的应用程序。当用户使用GeoFencing进入或离开特定区域时,我成功显示通知。
现在,我需要为所有保存的位置提供监控,它可以是数百个甚至更多。我在给定的链接中阅读了“您可以拥有多个活动的地理围栏,每个设备用户限制为 100 个。”
有没有办法为每个设备用户添加超过 100 个地理围栏?
谢谢!
ios - 为什么我在使用 CLLocationManager 的 startMonitoringForRegion 时没有收到 didEnterRegion 或 didExitRegion 调用
我正在尝试设置客户端的应用程序以在 iOS 设备到达/离开办公室时触发数据库更新。
(这是一个供我客户的销售人员在现场使用的应用程序,其中一些客户站点没有任何网络连接,因此客户希望在销售人员离开办公室/返回办公室时更新数据库。)
我从不接听didEnterRegion
或didExitRegion
打电话。
我有一个RegionsManager
管理位置管理器实例的单例。我正在使用CLLocationManager
和startMonitoringForRegion
方法。
在启动时,我调用RegionsManager
创建位置管理器并将自己设置为位置管理器的委托。
在我的应用程序委托的didFinishLaunchingWithOptions
方法中,我检查了UIApplicationLaunchOptionsLocationKey
,以防我因进入/退出的区域而重新启动,但这永远不会发生。
我NSLocationAlwaysUsageDescription
在 info.plist 中有一个键/值对。
我打电话CLLocationManager.authorizationStatus
以确保该应用程序被授权,如果没有,我打电话给requestAlwaysAuthorization
.
一旦我验证了应用程序已获得授权,我还会检查 isMonitoringAvailableForClass(CLCircularRegion)。
假设监控可用,然后我检查位置管理器的集合是否monitoredRegions
已经包含我将要创建的区域(我只是检查坐标)。如果是这样,我跳过添加区域。
如果位置管理器尚未监控该区域,我将调用添加到startMonitoringForRegion
.
在应用程序的第二次启动时,我在位置管理器的集合中看到了我在上次启动时添加的区域monitoredRegions
,因此我知道它们正在被添加。
设置所有这些的代码非常复杂,因为它被设置为处理添加多个区域,并且还具有维护被监视区域数组的逻辑,以及一个应该在 on a didEnterRegion
ordidExitRegion
消息时调用的块。
这是(相当长的)完整的有问题的方法:
regionsBeingMonitored
我的 RegionsManager 类有一个对象数组RegionEntry
:
这是 RegionEntry 对象:
它还具有状态标志来跟踪位置管理器的设置:
我已经非常仔细地阅读了有关设置区域监控的文档,并且非常有信心我正在做我应该做的所有设置。
我的 didEnterRegion 和 didExitRegion 方法在被调用后立即将消息写入日志文件,因此即使我的将区域与regionsBeingMonitored
数组中的条目匹配的逻辑存在问题,我仍然应该看到日志条目:
你看到我可能做错了什么吗?didEnterRegion
my or的方法签名didExitRegion
看起来是正确的,所以我认为不是这样。
ios - 来自 didEnterRegion 的多个本地通知故障:
我目前正在监视由核心数据支持的几个位置。换句话说,我设置了一个 for 循环,循环遍历核心数据中所有存储的实体,并为所有实体创建一个受监控的区域。
这里的问题是,当进入一个区域时,for 循环会触发多个本地通知。通知的数量几乎直接对应于监控区域的数量。所以我相当有信心这可能是导致错误的原因,但我不是 100% 确定。
我注意到这似乎是区域监控的一个常见问题,但我一直找不到包含 for 循环的示例。
如何在调用 didEnterRegion 时停止触发多个通知?
下面的方法在 viewDidLoad 中被调用。[DataSource sharedInstance].fetchedResultItems 是一个数组,其中填充了来自已获取请求的 fetchedObjects。
这是 didEnterRegion 方法
ios - 仅当用户进入指定区域时触发 localNotification
这是我的didEnterRegion
函数代码。问题是通知在进入和退出时触发。仅当用户输入位置时,我该怎么做才能触发通知?