我对Android的编程方法有疑问 - 无论它是否高效。只是为了让你知道我想要完成的事情:
地图上有多个兴趣点。如果用户更接近PIT,则会出现有关距离的通知。让我们说3个通知:距离1英里,0.5英里和0.1英里。当用户或多或少准确地在PIT时,不再显示通知。用户应该驾驶汽车或其他车辆。
我目前正在使用Geofences来检测用户是否输入了1英里的半径。如果是这样,我检查他当前位置到PIT的距离。如果距离大约0.5或0.1英里,则会发出通知。因此,我经常检查当前位置(现在每10秒)。如果用户在PIT或非常接近,则退出并完成Geofence。
代码工作正常,这种方法是我在阅读Android开发人员教程等时首先想到的。但是,还有另一种方法更有效吗?
虽然这(目前)满足了我的需求,但我有两个主要问题:
这似乎耗尽了很多电池。由于用户最有可能在汽车中可以在使用期间为手机充电,因此这可能不是问题。
我从SD卡上的文件中读取了PIT的数量。在我的例子中,我只有几个PIT。但是用户能够修改源数据,以便他可以添加他想要的数量。 Google表示每个用户只支持100个有效的Geofences。但是,如果我的用户有超过100个PIT怎么办?由于我使用Geofence来感知是否必须发出第一个通知 - 这是一个严重的问题。那还有其他选择吗?
答案 0 :(得分:0)
我有一些建议:
1)要降低gps修复量,可以计算睡眠时间。我们的想法是在靠近边界时进行频繁的GPS修复。很远的地方很少。通过考虑GPS返回的速度参数可以进一步增强这一点。 例如,如果用户距离最近的边界20英里,同时行驶20英里每小时,您可以轻松等待30分钟,然后再次打开GPS,只是举个简单的例子。
2)我遇到了同样的问题。我的解决方案只是选择X英里内的POI。这样可以确保不会冒险达到100的限制。当用户从其初始位置移动(X-1)英里时,使用新位置重建地理围栏。 如果您认为存在如此高密度点的风险,上述策略仍然可能会下降,我会考虑完全基于gps而不是地理围栏进行自己的接近检查。