2014-02-10 76 views
0

我正在嘗試製作音樂播放器。爲此,我創建了一個管理MediaPlayer對象並播放歌曲的服務。但每次我重新打開音樂應用程序時,它都會啓動一個新的服務並同時繼續播放兩首歌曲。我如何讓我的活動綁定到已經運行的服務?我需要在活動停止時解除綁定服務?

我注意到,當我不在OnStop()方法中調用unbindService(...)時,我的應用程序運行正常。但我不知道在活動停止時是否有權解除綁定。

我結合這樣的:

@Override 
protected void onStart() { 
    super.onStart(); 

    Intent service = new Intent(this,MyService.class); 

    bindService(service, mConnection, Context.BIND_AUTO_CREATE); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 

    if(mBound) { 
     unbindService(mConnection); 

     mBound = false; 
    } 
} 
+0

你爲什麼不使用intentservice呢? – youssefhassan

+0

音樂播放器不是IntentService太簡單嗎?當音樂播放時,我需要與MediaPlayer對象進行交互,例如更改音樂中的音樂或seekto。 IntentService不僅僅適用於簡單的長時間後臺運行操作嗎? – ferrazrafael

+0

我試圖按照這個文檔中的例子http://developer.android.com/guide/components/bound-services.html – ferrazrafael

回答

1

您需要檢查在onStart()也就是服務的情況。如果服務已經運行,那麼你只需要綁定它。但是在你現在的代碼中,你每次都在創建服務。

您應該嘗試使用Service.START_STICKY檢查服務是否已在運行。你可以看到: Servicestart Sticky or start not sticky

我認爲這將幫助你更新你的服務類。

0

我可以修復它添加startService(...)到OnStart()方法。我不明白爲什麼這個固定的,但似乎我需要這樣做。如果有人知道爲什麼請添加。感謝大家的幫助。

這是多麼的OnStart有:

@Override 
protected void onStart() { 
    super.onStart(); 

    Intent service = new Intent(this,MyService.class); 

    bindService(service, mConnection, Context.BIND_AUTO_CREATE); 

    startService(service); 
}