4

我正在制作一个应用程序,计算您在地理围栏内停留的时间。检测到进入事件时获取时间戳,并将其与接收到退出事件时获取的时间戳进行比较。

在夏天,这在我的 Galaxy Nexus 上运行良好,但从 11 月(2013 年)开始,我注意到开始出现一些奇怪的行为。我刚刚开始使用新的 Nexus 5 作为我的测试设备,现在我发现退出事件正在发送,而我仍在地理围栏内。地理围栏是 1500m,当退出事件发生时,我记录了我的最后一个已知位置,并且它正好在退出区域内。

这些事件似乎与我的设备睡着并重新打开有关,但我无法真正证明为什么会发生这种情况。我的理论是,位置的准确性可能会降低,因此 Play Services 无法确认我是否在该区域内并触发退出事件。当我的设备重新打开并使用网络/wifi/gps 更新其位置时,它会触发一个新的进入事件。还应该注意的是,当我在某些会议室时,当我的手机放在口袋里时,我有时会在办公室失去手机信号。

我测试了当最后一个已知位置在地理围栏内时忽略退出事件的想法,但我发现这会导致许多正确的退出事件无法正常工作。请求位置更新通常会失败,因为我在里面并且更新通常会超时(尝试大约 2 到 4 分钟)。此外,一旦发送了退出事件,我会在稍后的某个随机时间收到一个新的进入事件,因为 Google Play 已确定我在该区域之外,现在又回到了里面。

有没有人看到过类似的行为或解释了为什么会发生这种情况?由于地理围栏已添加并正常工作,因此我似乎无能为力,但我不能相信退出事件始终是合法的,这让我的时间测量受到质疑。

4

2 回答 2

0

首先,我不是开发人员。我在运行 Android 4.3 的 Nexus 4 上使用了 AutoLocation + Tasker,满意度为 100%。即时、准确和可重复。我在 2013 年 11 月买了一个新的 Nexus 5,但根本无法使用这个应用程序。我经历了确切的症状以及更多。我必须在地理围栏内停留 15 到 20 分钟,然后它才能识别出我在里面,而且白天很多时候,当我在里面时,它会触发退出。

我等待 Android 更新 4.4.1 然后 4.4.2。我等 Google Play Service 4.1 现在 4.2。没有任何效果。我尝试了另一个名为 Geofence Memo 的地理围栏应用程序,它使用相同的 API 和相同的问题。

我什至买了一个新的 Red Nexus 5,它带有最新的软件和同样的问题。

我应该提一下,我的旧 Nexus 4 现在运行的是 Android 4.4,这个 AutoLocation + Tasker 就像一个魅力。

当我还在 4.3 上使用我的 Nexus 4 时,我运行了一个启用 LTE 的混合调制解调器,并且这个应用程序组合停止工作,直到我重新刷新了工厂调制解调器 zip。

我认为这与基带错误有关,而不是 Android 错误,但我可能是错的。

我的 2 Nexus 5 运行 100% 库存 ROM,无需生根。

此外,我在进入并存在地理围栏时打开了手机屏幕,认为这可能是后台进程问题,但它完全错过了它。我什至尝试通过地理围栏运行 GPS 导航,但它仍然不知道我在哪里。

于 2014-02-14T13:59:04.607 回答
0

正如 TonyC & Gabor 在评论中提到的那样

我认为这与手机暂时失去wifi有关。– 托尼C

我也遇到了类似的问题,据观察,这与网络问题有关。

所以解决方案是在我们使用的任何地方GeofencingEvent都有一些与地理围栏的退出和进入相关的代码,只需检查网络可用性。

GeofencingEvent geoFenceEvent = GeofencingEvent.fromIntent(intent);
    boolean isNetworkAvailable = CommonUtils.isNetworkAvailable(getApplicationContext());
    if (geoFenceEvent.hasError() || !isNetworkAvailable) {
        int errorCode = geoFenceEvent.getErrorCode();
        Log.e(TAG, "Location Services error: " + errorCode);
    } else{ // your code here}
于 2017-06-09T11:52:24.130 回答