2016-12-06 27 views
0

我與MediaPlayer的android上的問題時不打,即時通訊開始使用自定義的執行者,我有所有的方法來使用媒體播放器,暫停,播放服務等的Android的MediaPlayer從活動切換到碎片

播放器在活動中工作正常,但它有一個按鈕可以最大限度地減少它,因爲您可以在每個活動中持續監聽音頻,因此我必須在BaseActivity上創建的BaseFragment上啓動或恢復音頻,但不會恢復音頻。

當我關閉媒體播放器的活動我暫停的球員,我註銷喜歡這個

AudioPlayerService.unRegister(this); 

這是玩家服務如何在BaseFragment連接到服務

//Connection with a service 
private ServiceConnection mConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 

     Log.d(">>>>>", "Service starts on fragment"); 
     AudioPlayerService.LocalBinder mLocalBinder = (AudioPlayerService.LocalBinder) service; 
     audioServiceObject = mLocalBinder.getService(); 
     mBounded = true; 

     if (audioServiceObject != null) { 
      audioServiceObject.startAudioPlayer(audio_path, media_length); 
      AudioPlayerService.register(this); 
      audioServiceObject.pauseAudioPlayer(); 
     } 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     Log.d(">>>>>", "Service end"); 
     mBounded = false; 
     audioServiceObject = null; 
    } 
}; 

IM我打電話給BaseActivity上的底層播放器

PlayerBottom newAudioPlayer = new PlayerBottom(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.add(R.id.audioPlayerFrame, newAudioPlayer); 
    transaction.commit(); 

im即時發送底層球員是活動最小時剩下的位置,所以我打電話給MediaPlayer.seekto並通過其剩下的位置,以便從那裏開始。

回答

1

不知道你如何開始你的服務,但我認爲你是通過將它綁定到你的活動開始它。 當你刪除你的活動時,它從服務中解除綁定,從而終止它。

您可能需要撥打startService()而不是bindService()來啓動服務。

如果是這樣的話,你可能想了解更多關於這裏的服務:Services Documentation

良好的視頻解釋的區別:Perf matters video

+0

即時通訊開始與bindService(),所以我必須用startService啓動並綁定到它? –

+0

是的。如視頻中所述,如果您關心在某個時刻停止服務,請確保尊重您的'startService()','bindService()','unbindService()','stopService()'的順序。 – Distwo

+0

我在一個活動上使用startService(),後來我必須在一個片段中綁定它,我如何獲得該片段上該服務的引用? –