2011-03-30 44 views
0

我正在構建一個使用gps來定位用戶的android應用程序。我有一個名爲LocationService的類,它擴展了Service並實現了LocationListener。在我的活動中,我有以下代碼。當我想打開服務並偵聽位置時,我調用startLocationService()方法。所有這些工作正常。使用標籤時Android位置服務被破壞

然後我把這個活動放在tabhost的tab裏。現在,當我調用startLocationService()時,什麼也沒有發生,甚至不調用LocationService中的onCreate()方法。我檢查了該行中的「this」引用 Intent i = new Intent(this,LocationService.class); 它指的是正確的活動,而不是TabActivity。

我無法解釋爲什麼LocationService未啓動。我會很感激任何人都可以解決這個問題。

感謝, 保羅

private LocationService service = null; 
private ServiceConnection svcConn = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder binder) { 
     service = (LocationService)binder; 
     try { 
      service.registerCallback(cbListener); 
      service.enableProximityPoints(); 

     } catch (Throwable t) { 
      Log.e("MyPath", "Exception in call to registerAccount()", t); 
     } 
    } 
    public void onServiceDisconnected(ComponentName className) { 
     service = null; 
    } 
}; 



private void startLocationService(){ 
    Intent i = new Intent(this, LocationService.class); 
    bindService(i, svcConn, 0); 
    startService(i); 
} 

回答

1

看起來像其他人遇到過類似的問題:http://www.mail-archive.com/[email protected]/msg08047.html

他們用了移動服務連接到TabActivity類解決他們的問題。

+0

這解決了我的問題,非常感謝。 – Paul 2011-03-30 15:34:47

+0

只是注意到我沒有選擇這個作爲正確的答案,現在會這樣做。 – Paul 2014-02-23 06:24:39

0

我檢查在 線意圖 「這個」 引用i =新意圖(此, LocationService.class);它將 指向正確的活動,而不是 TabActivity。

這可能是問題所在 - 我發現活動作爲標籤的內容行爲有點不同於我期望的有時。

在這是 '選項卡內容' 活動試圖定義一個類實例成員的活動......

然後在onCreate() ...

parent = this.getParent(); // Gets the TabActivity context 

然後在startLocationService()使用..

Intent i = new Intent(parent, LocationService.class); 

不知道它是否會工作,但值得一試。我目前正在開發一個基於TabActivity的應用程序,並且我不得不在不同的地方在'tab content'活動中做這樣的事情來讓事情正常工作。

+0

感謝您的回覆,我必須將所有ServiceConnection代碼移動到TabActivity,然後才能正常工作。 (查看其他回覆) – Paul 2011-03-30 15:39:07

+0

@Paul:感謝您的確認(我的意思是它沒有工作)。值得注意的是未來。 – Squonk 2011-03-30 15:51:19