2013-07-03 37 views
6

我有一個應用程序,幾乎不需要用戶交互,但需要Geofences。我可以在後臺服務中完全運行它嗎?我可以在後臺服務中完全運行Android GeoFencing嗎?

服務第一次運行時將會有一個活動。此活動將啓動服務併爲BOOT_COMPLETED註冊BroadcastReceiver,以便服務在啓動時啓動。這個活動不可能再次運行。

該服務將設置警報定期關閉,這將導致IntentService從網絡下載位置列表。然後,這個IntentService將在這些位置周圍設置Geofences,並創建PendingIntents,這些PendingIntents將在接近位置時觸發。反過來,這些PendingIntents將導致另一個IntentService採取一些行動。

所有這些都需要在後臺進行,除了安裝後第一次啓動Activity之外,沒有用戶交互。因此,Activity不會與LocationClient或任何位置服務交互。

我實際上已經設置了proximityAlerts,但希望移至新的Geofencing API以滿足電池壽命的原因。但是,我聽說從服務中使用LocationClient可能會遇到一些問題。具體來說,我聽說(對不起,沒有提及,只是道聽途說索賠):

  • 位置客戶依賴於用戶界面的可用性錯誤處理
  • 從後臺線程調用時,LocationClient.connect()假定它從主UI線程(或其他線程與事件活套)調用,所以連接回調永遠不會被調用,如果我們稱這種方法從服務運行在後臺線程

當我調查,我看不到任何理由爲什麼會這樣,或爲什麼它會阻止我做我想做的事情。我希望它幾乎可以作爲proximityAlerts的替代品...

任何人都可以在這裏瞭解一些事情嗎?

回答

2

最好的事情就是試試看吧?你的策略聽起來很合理

when called from background thread, LocationClient.connect() assumes that it is called from main ui thread (or other thread with event looper), so connection callback is never called, if we call this method from service running in background thread. 

我知道這是不正確的。我有一個從Activity開始的服務,並且調用了連接回調。

我不知道接近警報;但我似乎找不到一個API來列出我的GeoFences。我擔心我的數據庫(sqlite)和實際的防護可能不同步。我認爲這是一個設計缺陷。

LocationClient需要用戶界面的原因是設備可能沒有安裝Google Play服務。 Google已經設計了一個狡猾而複雜的機制,允許您的應用程序提示用戶下載它。整個事情在我看來是可怕的和可怕的。它的全部「假設假設」編程。

(他們爲谷歌IO 2013衝出了很多東西。並不是所有的東西都有很好的文檔記錄,有些看起來有點「粗糙」)。

+0

我找不到和API列出地理柵欄,我也很想有一個。我也擔心我的sqlite數據庫和實際的註冊防護列表不同步... –

相關問題