使用Google Play Services 6.5。+测试地理围栏

问题描述 投票:22回答:6

我一直在测试最新Google Play服务中提供的地理围栏api,使用此处提供的官方样本:https://github.com/googlesamples/android-Geofencing/当然,遵循培训课程:http://developer.android.com/training/location/geofencing.html

当您在旧金山附近的两座Google建筑物时,样本会显示通知,因此我将其调整为在我靠近家或工作地点时触发。

如果我使用真实的设备,它的工作原理。通知被正确触发。但是,当我使用模拟器,并使用telnet或ddms更改位置时,没有任何反应。我也尝试使用Genymotion,安装了Gapps,同样的东西:没什么。

有没有人有任何关于如何测试地理围栏的指针,而不是实际移动我的屁股?因为在街上,没有办法调试代码......

android google-play-services geofencing
6个回答
8
投票

这是你需要做的:

  1. 设置 - >开发人员选项 - >允许模拟位置
  2. 添加以下权限:

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

  1. 确保您的GPS定位服务开启(高精度)而非网络位置
  2. 从应用程序商店下载一个名为Fake GPS的应用程序(它有一个黄色的快乐事实,持有一个遥控器)。您可以使用该应用设置假GPS

希望这能回答你的问题:)


8
投票

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

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

而且你还必须在清单中添加它:

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

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


4
投票

应用程序Lockito有助于模拟测试Geofencing的路线。 https://play.google.com/store/apps/details?id=fr.dvilleneuve.lockito

您需要转动允许模拟位置设置 - >开发人员选项 - >允许模拟位置

我发现你可以设置沿着路线的平均速度来加速模拟,但是如果速度太快,那么Geofencing进入和退出可能不会被触发或被触发的时间远远超过他们应该的。我还设置了至少40米的地理围栏半径,以确保触发器发生。

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


2
投票

我已经2天试图弄清楚如何在Android Studio Emulator上测试我的地理围栏应用程序并最终做到了。该设备具有默认播放服务(我的意思是我用它创建了虚拟设备)。

我解决了它进入“Google设置”>位置>模式

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

这样我的应用终于工作了。希望能帮助到你。


2
投票

我差点放弃测试地理围栏......

没有真正移动我的屁股

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

与常规位置更新相比,地理围栏的问题是地理围栏需要一点“戳”才能工作。

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

所以有两种解决方案:

  • 在调试期间主动请求位置更新
  • 在多窗口模式下打开谷歌地图,并在输入Lat / Long后单击“我的位置按钮”并单击模拟器设置中的发送

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

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


2
投票

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

在使用基于位置的功能测试应用时,我使用Fake GPS location

你可以从镜像下载apk(在谷歌搜索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);

有一个很好的测试!

马蒂亚

© www.soinside.com 2019 - 2024. All rights reserved.