Android 使用Google Play Services 6.5和#x2B测试地理围栏;

Android 使用Google Play Services 6.5和#x2B测试地理围栏;,android,google-play-services,geofencing,Android,Google Play Services,Geofencing,我一直在测试最新Google Play服务中提供的GeoFerning api,使用的官方示例如下: 当然,在培训课程之后: 当你靠近旧金山的两栋谷歌大楼时,这个示例会显示一个通知,所以我对它进行了调整,使其在我靠近家或工作地点时触发 如果我使用真正的设备,它会工作。通知被正确触发。但当我使用模拟器,并用telnet或ddms更改位置时,什么都不会发生。我还尝试了Genymotion,安装了Gapps,还有同样的东西:什么都没有 有没有人知道如何在不动我屁股的情况下测试geofence?因为在街

我一直在测试最新Google Play服务中提供的GeoFerning api,使用的官方示例如下: 当然,在培训课程之后:

当你靠近旧金山的两栋谷歌大楼时,这个示例会显示一个通知,所以我对它进行了调整,使其在我靠近家或工作地点时触发

如果我使用真正的设备,它会工作。通知被正确触发。但当我使用模拟器,并用telnet或ddms更改位置时,什么都不会发生。我还尝试了Genymotion,安装了Gapps,还有同样的东西:什么都没有


有没有人知道如何在不动我屁股的情况下测试geofence?因为在街上,没有办法调试代码…

我也有同样的问题,如果你有一台设备,你可以通过在设置中启用模拟位置来轻松伪造位置

设置->开发人员选项->允许模拟位置

您还必须在清单中添加以下内容:

 <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 


我从未在模拟器上尝试过,但尝试打开模拟器并执行相同的操作(转到设置并启用模拟位置),祝你好运

应用程序
Lockito
有助于模拟测试
地理围栏的路线

您需要启用“允许模拟位置” 设置->开发人员选项->允许模拟位置

我发现,您可以设置沿途的平均速度以加快模拟速度,但是如果速度太快,则
地理围栏
进入和退出可能不会触发,或者触发时间可能比应该的要晚得多。我还设置了一个至少40米的地理围栏半径,以确保触发


使用Lockito时,如果设置的速度太快,则当前位置(地图上的蓝点)更新速度不够快。因此,首先将其设置为较低的速度,然后运行,然后提高速度并运行。

我发现在Android emulator上设置模拟位置的最简单方法是使用为此目的设计的小型应用程序

当使用我使用的基于位置的功能测试应用程序时

您可以从镜像下载apk(在google中搜索com.lexa.fakegps.apk),然后使用以下工具将其安装到模拟器上:

adb install com.lexa.fakegps.apk
它就像一个符咒。 从未遇到过像telnet或DDMS那样设置假位置的问题,而且因为您可以使用简单的GUI而不是终端命令,所以设置假位置要容易得多

编辑: 如果需要在单元测试中自动设置位置,可以使用以下意图:

Intent startIntent = new Intent();
startIntent.setAction("com.lexa.fakegps.START");
startIntent.putExtra("lat", 56.1234);
startIntent.putExtra("long", 44.0011);
startService(startIntent);

Intent stopIntent = new Intent();
stopIntent.setAction("com.lexa.fakegps.STOP");
startService(stopIntent);
祝你考试愉快


Mattia

以下是您需要做的事情:

  • 设置->开发人员选项->允许模拟位置

  • 添加以下权限:

  • 确保您的GPS定位服务开启(高精度),而不是网络定位

  • 从app store下载一个名为Fake GPS的应用程序(它有一个黄色的手持遥控器的快乐事实)。你可以使用该应用程序设置你的假GPS


  • 希望这能回答您的问题:)

    我花了两天的时间试图找出如何在Android Studio Emulator上测试我的geofence应用程序,最后终于做到了。 这个设备有默认的播放服务(我的意思是我用它创建了虚拟设备)

    我在“谷歌设置”>位置>模式下解决了这个问题

    并将其从“仅限设备”更改为“高精度”。

    这样,我的应用程序终于工作了。
    希望有帮助。

    我差点放弃测试地球围栏

    不动我的屁股

    。。。但经过深入研究,我找到了一个解决方案(虽然不是最优的)

    与常规位置更新相比,GeoFence的问题在于GeoFence需要一点“戳”才能工作

    GeoFence依赖于其他应用程序和操作系统。如果没有主动请求位置更新的应用程序,而android系统“认为”它位于同一位置(仿真器总是这样),那么围栏就不会触发

    因此有两种解决方案:

    • 在调试期间主动请求位置更新

    • 在多窗口模式下打开谷歌地图,在输入Lat/Long并单击emulator设置中的send后单击“我的位置按钮”

    当然,其他答案中提到的内容是必需的(高精度)


    我希望这个答案能为其他开发者节省一些时间:)

    Lol在“不动我的屁股?”你试过嘲笑你的位置吗?我推荐两个应用程序:和(第二个可以与Google Play服务配合使用)。好吧,使用假GPS定位或另一个“mocker”定位并不能帮助我测试所有东西,因为即使它工作正常(必须继续尝试),也需要切换应用程序,这意味着我无法在前台测试我的应用程序会发生什么。@Redwarp检查我的答案,并请将其标记为答案,以便其他人有相同的问题时可以看到it@Assa我不认为你的答案是我寻求的答案,我也不认为toobsco42会高兴,如果我给你400分的悬赏,这么简单的答案。模拟位置似乎有效。但它不会触发GeoFence,所以我知道您可以在开发者选项中允许模拟位置,但如何在设备上模拟gpx路由?如何在剂量模式下测试?添加模拟位置权限时,我收到以下错误:权限仅授予系统应用。@规则您应该覆盖调试或测试文件夹中的清单,并将权限包含在该生成变量的清单中。来自Android Studio:“模拟位置应仅在测试或调试特定清单文件(通常为src/debug/AndroidManifest.xml)中请求)”我在使用外部应用程序时看到的唯一问题是,当应用程序位于前台时,无法测试其行为。因为你需要在前景中放置假GPS位置才能改变