2010-10-31 56 views
1

我有一個android應用程序,可以使用或不使用位置。在一個活動中處理這種情況很簡單:我設置了一個位置監聽器,並等待一個進度對話框,但允許用戶中止等待(這恰好如果位置提供程序被禁用,沒有特殊的錯誤就是從不返回的位置...很好)。android:處理可選位置

但是,我也有一個服務,需要的位置。該服務可能在活動之前運行,所以我不能依賴活動來獲取位置(或不)。

問題是如何在服務中處理這種情況。我可以等待位置,但由於我不能依賴用戶中止,我如何知道什麼時候停止等待,並且假定沒有位置可用?看來我可以做這樣的事情,

  1. 時間表服務與行動「得到位置」,其中規定位置監聽,等待更新,進度相同的服務說用行動3分鐘後「刷新」
  2. 在服務行動「刷新」,獲取最後一個已知的位置,並對此感到滿意。它是要麼沒有得到。如果它是空的,我們知道我們沒有位置,我們盡力而爲。

好像這會工作,但它變得複雜,因爲我已經不能用簡單的目的服務(我認爲),因爲如果意圖服務onHandleIntent(),然後在位置改變事件後停止本身將不會被收到。

無論如何,這是越來越有點複雜,所以我想知道如果有一個更簡單的方法。

回答

0

回答我的問題......這裏就是我最終解決這個,

UpdateService - 意圖服務實際執行的更新工作。這個只是調用getLastKnownLocation()來獲取位置。

LocationService - 定期服務,註冊位置更新,並設置一個定時器在2分鐘內喚醒。要麼我們得到位置更新,要麼定時器關閉。如果我們得到位置更新,我們取消定時器。在這兩種情況下,我們取消註冊位置更新,並啓動UpdateService以完成實際工作,然後停止我們自己。

我們安排LocationService作爲重複報警,成爲我們的「後臺」過程。

活動處理事情的方式不同。它請求位置更新,並提出一個對話框。我們要麼獲取位置更新,要麼用戶取消對話框。無論哪種方式,我們取消註冊位置更新,然後直接啓動UpdateService(不是LocationService,我們已經在這裏獲得位置)。

+0

有關更多詳細信息,請訪問http://code.google.com/p/quakealert。 – 2010-12-24 20:38:53