我需要根据用户与特定位置的接近程度以及其他一些规则(如果该区域有任何特定消息)向用户发送特定消息。例如,用户上车并开始工作。当他到达工作岗位的那一刻,他会得到某种消息,如果有消息要传递的话。这就是我的想法(当我在我的应用程序的其他部分工作时,没有代码只是试图设计流程)
收听重要的位置更改,每次发生这种情况时,都会将用户的地理位置发送到服务器,以查看是否有任何消息要在该位置附近发送。不行。由于过度使用收音机,这会耗尽电池电量。
每天保存邮件区域,并在每个重要位置更改对本地存储的数据进行测试。如果有任何匹配那么联系服务器。理论上听起来更好。
问题:
答案 0 :(得分:27)
我已经尝试过类似的过程,并使用重要的位置更改和区域监控来实现如下最佳用途。经过多次迭代后,我目前对电池寿命和相当可靠的处理几乎没有影响。
我使用重要的位置更改来触发过滤通知的方法,仅为当前位置的有限半径范围内的区域设置区域。
根据我的经验,预计相隔3-4英里可能会发生重大的位置变化。这可能会有很大的不同,但我不记得看到的远不止于此。这使得在城镇周围进行非常罕见的处理,当用户上高速公路时可以预测。我尝试了很多区域大小,刷新半径和位置服务灵敏度设置的变化。
请注意,您注册的地区数量有限。我没有在任何地方找到这个限制的确切内容,但有些用户表示任何一个应用程序都不应该期望注册更多的10个区域。我自己没有找到任何证实这个数字的参考,我有时会注册超过10个。
当看到设备以高速公路速度行驶相当长的时间时,我已经玩过增加半径和最小刷新距离。在这种情况下,我觉得我可能会浪费不必要的处理周期。在实际使用中,它似乎不是一个问题,但我一直在努力使效率最大化。
我的经验与您的具体问题有关;
1-对于您的情况,它取决于您打算考虑触发器通知的位置的距离。如果您在用户进入几英里或用户到达城镇时通知,这可能实际上是可行的。如果您想在用户进入某个位置的几米范围内时触发,则不适合您。根据我的经验,倾听重要的位置变化通常不会对电池寿命造成太大影响。当然,接收事件时您正在进行的处理和网络活动是另一个因素。我检查设备移动了多远,接受上一个位置的时间。在我的情况下,没有必要每次刷新所有内容,因此我限制了我的反应。
2-我对重要位置变化的经验如上所述,但所有文档都清楚地表明,设置距离与使用各种信号的条件和可用性无关。我想象在城市环境中,它更容易预测,而且在广阔的空间中更少。我的大多数经验都是前者。
3-从广泛的谷歌搜索,通过文档和大量知情推测我得出结论,重要的位置变化是由该单位可用的所有信号的神奇组合决定的。有wifi信号以不同程度的准确度广播它们的位置,并且蜂窝塔通常知道它们在哪里。定位服务正在利用所有这些以及各自的信号强度来决定设备何时已经走了很长的距离"。我认为很明显,计算会随着条件而变化,并且随着它们继续改善准确性和功率使用之间的平衡而变化,因此模糊的规格。
4-如问题1所示,有些因素需要考虑,可能会确定您可以单独使用重要的位置更改,但我认为区域监控在任何情况下都最适合您的目的。可能两者的组合是有序的。我对自己的应用非常满意。
5-重要的位置更改将唤醒您的应用。您必须遵循旨在在后台运行的方法中的一些准则,并了解这些限制。将您的背景方法包装在beginBackgroundTaskWithExpirationHandler和UIBackgroundTaskInvalid调用中。注意线程阻塞。完整阅读文档和位置处理指南。
6-我的建议如上。其他考虑因素一般是您使用位置服务。您需要制作各种自定义处理程序。即使您使用该服务,也不希望对收到的每条消息做出反应。您必须经常检查更改,准确性,新近度和所有爵士乐响应。我发现这一系列帖子在获取基础知识方面非常宝贵:Part 1 of 3 from the Long Weekend Website
7-如上所述,我的理解是可以注册的区域数量存在系统范围的限制。我认为,由于他们没有准确地告诉您这个号码是什么,它可能会或多或少地取决于其他应用程序设置的其他应用程序。根据我的经验,我经常在我的设定范围内注册并删除10到15个区域。我按照从最近到最远的顺序设置它们,因为我认为最后一个将被删除或拒绝。 其他注意事项 - 区域标识符是全局的,因此,如果您的标识符不唯一,则它将替换具有相同名称的先前区域。 - 区域大小和边距是您需要尝试的设置,以便最好地满足您的特定需求。
答案 1 :(得分:3)
答案 2 :(得分:0)
对于#3:
我已经使用WiFi OFF测试了Android 4.3 Geofencing,发现它运行正常!
新增的硬件地理围栏和Wi-Fi仅扫描模式有助于此。
参见: http://developer.android.com/about/versions/jelly-bean.html#43-optimized-location