2014-04-07 28 views
7

我正在嘗試使用Google's example: Creating & Monitoring Geofences來測試地理柵欄功能。我已經上傳了code here在Google的Geofencing教程中沒有看到地理柵欄切換

問題是我從來沒有收到進入或退出的通知。我有Wifi,4G和GPS。我試圖用以下方法測試:

  1. 我甚至走出我的房子約50英尺,然後走回去 - 但沒有通知。我可以看到播放服務連接,甚至"GeofenceUtils.ACTION_GEOFENCES_ADDED in MainActivity.java"被觸發,所以我認爲Geofences正在被正確添加。
  2. 在設置中啓用模擬位置,並使用該Fake GPS App和改變的位置 - 從相同的座標作爲Geofence1開始,然後完全超出(在另一個州)設置的東西 - 但我還是沒有得到一個退出通知。

我在做什麼錯? ANYONE成功運行這個Google's example: Creating & Monitoring Geofences。我已經上傳了code here以方便瀏覽。

我只是想學習區域範圍設定 - 檢測進入&退出。 我將標記任何答案作爲我可以用於在我的實際設備上進行接口工作的正確答案

I enter the coordinates and radius below

+1

實際上在android示例代碼中存在一個錯誤。您不應該使用IntentService類來進行通知和轉換。使用BroadCastReceiver替換它。同樣的問題張貼在這裏 - http://stackoverflow.com/questions/19505614/android-geofence-eventually-stop-getting-transition-intents – Pankaj

+0

你能告訴我你是如何解決這個問題的? – Hunt

+0

我沒有,這就是爲什麼我沒有把下面的答案標記爲正確的答案。我需要在某個時候重溫這個......對不起。如果你找到一個方法,如果你可以發佈解決方案,那將是非常棒的。 – user1406716

回答

0

Initally我的代碼正在運行smoothy但在那之後我也搞定這個問題,請通過修改continueAddGeofences geofenceRequester類()函數試試這個。 基本上它是調用通過位置請求方法

private void continueAddGeofences() { 


      // Get a PendingIntent that Location Services issues when a geofence 
      // transition occurs 
      mGeofencePendingIntent = createRequestPendingIntent(); 

      // Send a request to add the current geofences 
      mLocationClient.addGeofences(mCurrentGeofences, mGeofencePendingIntent, 
        this); 
      //mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

      try { 
       LocationRequest locationrequest = LocationRequest.create(); 
       locationrequest.setPriority(locationrequest.PRIORITY_HIGH_ACCURACY); 
       locationrequest.setInterval(3000); 


       mLocationClient.requestLocationUpdates(locationrequest, mGeofencePendingIntent); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
+0

我收到了一次通知,但無法再次獲取。你如何測試你的應用程序?您是使用模擬位置應用還是實際從地理圍欄座標走開?你走多遠? – user1406716

+0

我實際上已經遠離了地理圍欄座標,並且走開了,取決於您給出的半徑,我給出了10米半徑 – Priya

+0

是一個類似於5米或10米的半徑爲您工作的?當你走進去 - 你看到單獨的通知顯示進入和退出? – user1406716

15

我還具有與所述示例代碼問題的接收器。我的主要問題之一是宣佈ReceiveTransitionsIntentService。你並不需要添加一個BroadcastReceiver或請求位置更新,但是你需要改變你的AndroidManifest將導出值設置爲true,像這樣:

<service 
    android:name=".ReceiveTransitionsIntentService" 
    android:exported="true" > 
</service> 

確保路徑服務也是正確的。

我顯著簡化了谷歌例子,你可以找到的代碼和解釋here。我已經刪除了UI組件和持久Geofence存儲,所以這個例子應該更容易遵循。希望這可以幫助!

+0

嘿你的博客真的很有幫助,謝謝。然而,我認爲在那裏有一個錯誤 - 在清單部分列出了 ..'android:exported =「false」'。我認爲你的意思是'真的'。謝謝! – Steven

+0

非常感謝您的博客文章! –

+0

@mari我不明白這可能有什麼不同?我的意思是,我試過了,沒有骰子。 –

-4

如您所見,Google重寫了位置邏輯,這是新的API。看起來它是作爲「共享」位置提供者工作的(LocationRequest#setFastestInterval可以爲您提供座標,如果有其他應用程序請求它,或者您可以使用PRIORITY_NO_POWER flag接收座標)。

Geofence API就像helper方法,你不需要自己開發類似的邏輯(計算半徑等)。但是,Geofence本身不請求座標,它只是使用接收到的座標(即來自其他應用程序)。方法命名是不言自明的:LocationServices.GeofencingApi.addGeofences; =>addGeofences,而不是requestGeofences

所以,你應該使用要求座標:

LocationServices.FusedLocationApi.requestLocationUpdates 
+1

這是不正確的,你*不*必須請求LocationUpdates爲系統發送geofence意圖。 – akent

+0

@akent如果我不請求位置更新我沒有從系統接收地理圍欄意圖,但如果我打開任何請求位置的應用程序(如地圖),或者我只是從我的應用程序打開位置更新,它會開始觸發。你確定你說過嗎?你是如何使它工作的? – Juancho

0

我也有與地理柵欄API同樣的問題。最後,我使用了LocationManager的addProximityAlert。它確實工作得很好!