我使用此处提供的官方示例测试了最新Google Play服务中提供的地理围栏api:https://github.com/googlesamples/android-Geofencing/ 当然,遵循培训课程:http://developer.android.com/training/location/geofencing.html
当您在San Fransisco附近的两座Google建筑物时,样本会显示通知,因此我将其调整为在我家附近或工作地点时触发。
如果我使用的是真正的设备,它会起作用。通知被正确触发。但是,当我使用模拟器,并使用telnet或ddms更改位置时,没有任何反应。我也尝试使用Genymotion,安装了Gapps,同样的东西:没什么。
有没有人有关于如何测试地理围栏的指针,而不是实际移动我的屁股?因为在街上,没有办法调试代码......
答案 0 :(得分:8)
我遇到了同样的问题,如果您有设备,可以通过在设置中启用模拟位置轻松伪造位置
设置>开发者选项 - >允许模拟位置
你还必须在清单中添加它:
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
我从未尝试过模拟器,但尝试打开模拟器并执行相同的操作(转到设置并启用模拟位置),祝你好运!
答案 1 :(得分:7)
以下是您需要做的事情:
设置 - &gt;开发者选项 - &gt;允许模拟位置
添加以下权限:
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
确保您的GPS定位服务处于开启状态(高精度),而非网络位置
从应用程序商店下载名为Fake GPS的应用程序(它有一个黄色的快乐事实,持有遥控器)。您可以使用该应用设置伪造的GPS
希望这能回答你的问题:)
答案 2 :(得分:4)
应用Lockito
有助于模拟测试Geofencing
的路线。 https://play.google.com/store/apps/details?id=fr.dvilleneuve.lockito
您需要转动允许模拟位置 设置 - &GT;开发者选项 - &gt;允许模拟位置
我发现你可以设定沿路线的平均速度来加速模拟,但是如果速度太快,那么Geofencing
进入和退出可能不会被触发或被触发的时间要晚得多。我还设置了至少40米的地理围栏半径,以确保触发器发生。
使用Lockito如果设置的速度太快,则当前位置(地图上的蓝点)将无法足够快地更新。因此,首先将其设置为较低的速度然后运行,然后提高速度并运行。
答案 3 :(得分:2)
我发现在Android模拟器上设置模拟位置的最简单方法是使用专为此目的设计的小应用程序。
在使用基于位置的功能测试应用时,我使用Fake GPS location。
您可以从镜像下载 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);
进行一次不错的测试!
马蒂亚
答案 4 :(得分:2)
我已经花了两天的时间试图弄清楚如何在Android Studio Emulator上测试我的地理围栏应用程序并最终做到了。 该设备具有默认播放服务(我的意思是我用它创建了虚拟设备)。
我解决了&#34; Google Settings&#34; &GT;位置&gt;模式
从&#34;仅限设备&#34;更改它&#34;高准确度&#34;。
这样我的应用程序终于奏效了。 希望它有所帮助。
答案 5 :(得分:2)
我几乎放弃了测试地理围栏...
没有实际移动我的屁股
...但是通过深入研究我找到了一个解决方案(虽然它不是最佳的)。
与常规位置更新相比,地理围栏的问题是地理围栏需要一点“戳”才能工作。
Geofences依赖于其他应用和操作系统。如果没有主动请求位置更新的应用程序,并且android系统“认为”它位于同一位置(仿真器总是如此),则不会触发围栏。
所以有两种解决方案:
在调试期间主动请求位置更新
在多窗口模式下打开谷歌地图,并在输入Lat / Long后单击“我的位置按钮”,然后单击模拟器设置中的发送
当然,其他答案中提到的内容是必需的(高准确度)。
我希望这个答案能为其他开发者节省一些时间:)