2014-02-24 54 views
0

我有一個IntentService應該得到用戶的位置,並根據它,從互聯網上下載一些數據。而我所面臨的問題是很多次,在onConnected()方法被調用之前,服務已經完成。所以位置爲空。它並不總是發生,但經常發生。安卓,從IntentService的getLastLocation()

我可以做一些不同的事(比如asynctask),但IntentService可以從活動(當用戶按下按鈕時)或者用AlarmManager(定期)調用。所以我不知道另一種方式來做到這一點。那麼,我可以創建一個首先獲取位置的asynctask,然後啓動IntentService。當從AlarmManager調用服務時做一些不同的事情。但是,我不得不創建不同的代碼,最後,做同樣的事情。

所以我的問題是,有沒有什麼辦法將它排除,保持IntentService?還是有另一種更好的方法來做到這一點?

謝謝你。

PS:伊夫隨後從Android開發者指南:

https://developer.android.com/intl/es/training/location/retrieve-current.html

回答

0

不要使用IntentService - 使用常規Service和:

  1. 開始監聽位置時,您的服務已啓動
  2. 當你得到一個位置時,開始一個後臺線程下載數據(和停止位置更新,如果你只想要一個位置)
  3. 呼叫stopSelf一旦下載完成後停止服務
+0

所以,如果我理解正確,我會創建一個服務,這是最好的地方聽。所以這個服務應該擁有一個有效的(非空)位置。然後,我會保持我的IntentService,但有一個有效的位置對象已經準備好,當它啓動。這是對的嗎?順便說一下,它會耗盡電池嗎? – Duqe

+0

所有IntentService都可以(如果您查看[源代碼](https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/app/IntentService。 java))創建一個單獨的處理線程,並在該線程完成時停止該服務。我的建議是自己控制生命週期 - 在開始處理線程之前一直等到您有位置,並在完成時停止服務。您仍然不希望始終收聽位置更新(因爲這會消耗電池電量)。 – ianhanniballake

+0

我如何控制自己的生命週期? – Duqe

0

你好我建議你的情況......是創建將更新當前位置的服務...你充電與座標您var's ......讓我告訴你一個例子

你首先聲明變量

public class MyService extends Service{ 
private LocationManager mLocationManager = null; 
private static final int LOCATION_INTERVAL = 1000; 
private static final float LOCATION_DISTANCE = 10f; 
String sLat; 
String sLong; 

和TH帶您上locationChange方法你負責板條和SLONG

public void onLocationChanged(Location location) 
    { 
     sLat = Double.toString(location.getLatitude()); 
     sLong = Double.toString(location.getLongitude()); 

所以板條和SLONG他們將不得不位置,他們將可每當你想要的......

問候...