2015-03-13 18 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系統「認爲」它位於同一位置(仿真器始終如此),則防護欄不會觸發。

    因此,有兩種解決方案:

    • 在多窗口模式下進行調試

    • 打開谷歌地圖時,主動請求位置更新,然後單擊「我的位置按鈕」您輸入後緯度/長度和點擊發送模擬器設置

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

    我希望這個答案可以爲其他開發者節省一些時間:)