2015-03-13 19 views
17

我一直在测试中最新的谷歌游戏服务提供的地理范围的API,在这里可以使用官方样片:https://github.com/googlesamples/android-Geofencing/ 当然,下面的培训课程:http://developer.android.com/training/location/geofencing.html测试地理界线与谷歌Play服务6.5 +

当您在San Fransisco的两栋Google建筑物附近时,示例会显示一条通知,所以我调整了它以在我靠近我的家或我的工作场所时触发。

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

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

+10

Lol在“没有实际移动我的屁股? – Jakar 2015-03-27 00:18:27

+0

你试过嘲笑你的位置吗?我推荐两个应用程序:[假GPS位置](https://play.google.com/store/apps/details?id=com.lexa.fakegps)和[假地点欺骗免费](https://play.google .com/store/apps/details?id = com.incorporateapps.fakegps.fre)(第二个与Google Play Services工作正常)。 – Ziem 2015-03-29 19:14:24

+0

那么,使用假GPS位置或其他位置“嘲笑者”不会帮助我测试一切,因为即使它正在工作(必须尝试它stil)它需要切换应用程序,这意味着我不能真正测试会发生什么与我的应用程序在前台。 – Redwarp 2015-03-30 08:56:01

回答

6

我有同样的问题,如果你必须在设置中启用嘲讽位置的设备,你可以很容易地伪造位置

设置 - >开发者选项 - >允许模拟地点

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

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

我从来没有在模拟器上试过,但尝试打开模拟器和相同的东西(去设置和启用模拟位置),祝你好运!

+1

所以我理解你可以在开发人员选项中允许模拟位置,但是如何在设备上模拟gpx路由之类的东西? – toobsco42 2015-03-30 17:50:06

3

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

您需要打开允许模拟地点 设置 - >开发者选项 - >允许模拟地点

我发现,你可以沿途设置的平均速度加快模拟,但是如果速度太快,那么Geofencing进入和退出可能不会被触发或被触发得比他们应该的时间晚得多。我还设置了至少40米的地理栅栏半径以确保触发事件发生。

如果您设置的速度太快,那么当前位置(地图上的蓝点)将不会足够快地更新。所以首先将它设置为较低的速度然后运行,然后提高速度并运行。

+2

Lockito打破了Google Play最新版本的地理限制 – desgraci 2016-11-25 02:02:26

+0

@desgraci这是真的,当我点击Play行程时,我的地理围栏被删除,我得到一个GEOFENCE_NOT_AVAILABLE呼叫。我不得不转移到另一个假GPS应用程序(https://play.google.com/store/apps/details?id=com.lexa.fakegps) – 2016-12-01 18:46:50

+0

@MateusGondim它不适合我,因为它需要切换应用程序,我需要在前台进行测试,但是谢谢:) – desgraci 2016-12-02 00:12:34

2

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

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

您可以从镜像(在谷歌搜索com.lexa.fakegps.apk)下载APK,然后用在模拟器上安装它:

abd 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); 

有一个很好的测试!

马蒂亚

+0

我只看到使用外部应用程序的问题,就是无法测试应用程序在前台运行时的行为。因为您需要在前台放置假GPS位置以更改位置... – Redwarp 2015-04-02 12:49:57

+0

@Redwarp您可以使用以下两个命令自动执行测试: 'am startservice -a com.lexa.fakegps.START -e lat 56.1234 - e long 44.0011' 'am startservice -a com.lexa.fakegps.STOP' [link](http://droid-developer.blogspot.it/2012/09/fake-gps-faq-ive-got -lot-of-messages.html) – araks 2015-04-02 12:52:43

+0

@Redwarp回答编辑,以满足您的要求! – araks 2015-04-02 13:04:07

6

以下是你需要做的:

  1. 设置 - >开发者选项 - >允许模拟地点

  2. ,添加以下权限:

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

  • 确保GPS位置的服务是ON(高准确度)不网络位置

  • 下载一个应用程序称为假GPS(它具有黄色快乐事实拿着遥控器)从应用商店。您可以使用该应用

  • 希望设置你的假GPS这个回答你的问题:)

    +0

    你的答案与@araks中的答案基本相同,并且他提供了更多详细信息^ _ ^无论如何。 – Redwarp 2015-04-02 14:25:02

    +0

    他只通过adb提到了第4点。我想确保你有一切设置,不必通过adb ...我想你没有尝试我的答案或找到有用的东西。好的 – Snake 2015-04-02 14:56:18

    +0

    哦,对不起,我不是故意听起来苛刻或任何事情,真的,任何帮助表示赞赏,真的。只是想解释为什么我不会“挑”你的答案为“一个”。 – Redwarp 2015-04-03 12:03:12

    1

    我过2次天尝试找出如何测试在Android模拟器工作室我地理围栏应用程序,并终于做到了它。 该设备有默认的播放服务(我的意思是我用它创建了虚拟设备)。

    我解决了它要“谷歌设置” - >位置信息>模式

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

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

    +0

    完全一样,它已经设置为高精度,但无济于事。 – 2017-01-10 01:08:05

    0

    我几乎放弃了对测试的地理围栏...

    无需实际移动我的屁股

    ...但深入研究我发现了一个解决方案(这不是最优的)。

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

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

    因此,有两种解决方案:

    • 在多窗口模式下进行调试

    • 打开谷歌地图时,主动请求位置更新,然后单击“我的位置按钮”您输入后纬度/长度和点击发送模拟器设置

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

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