2013-07-09 80 views
3

我有一個服務,在Android中開始播放背景中的MP3流。有一個菜單活動,包括頻道選擇和播放器活動,播放器會開始播放通過按鈕點擊選擇的MP3。 它使用MediaPlayer類。這是URL的開始方式。在Android的MP3服務中更改URL MediaPlayer

mp3Service.playSong(getBaseContext(),url); 

現在,當回到帶有URL的菜單時,我想更改URL播放。我不想停止服務,只改變它的URL。可能嗎?我已經閱讀了MediaPlayer的文檔,但不知道該怎麼做,嘗試了一些變體。

如何切換到另一個URL? mp3Service.pauseSong(getBaseContext());

然後停止,並mp3Service.playSong(getBaseContext(),newurl)?

////////////////////////////// PART OF THE CLASS 

public String currenturl=""; 

public void playSong(Context c, String url) { 
     if (currenturl.equals("")) 
     { 
     if(!created){ 
      this.mplayer = MediaPlayer.create(c, Uri.parse(url)); 
      created = true; 
      currenturl=url; 
     } 
      this.mplayer.start(); 
     } 
     else 
      { 
      if (!currenturl.equals(url)) 
      { 

       if(!created){ 
        this.mplayer.stop(); 
        this.mplayer = MediaPlayer.create(c, Uri.parse(url)); 
        created = true; 
        currenturl=url; 
       } 
        this.mplayer.start(); 


      } 

      }; 
    } 

public void pauseSong(Context c) { 
     this.mplayer.pause(); 
    } 

    // 
    public void stopSong(Context c) { 
     this.mplayer.stop(); 
    } 

沒那麼容易......

+0

對我來說這似乎很好,儘管你也可以在不調用暫停的情況下調用stop。您是否遇到這種方法的任何問題?你絕對不需要停止服務。您也可以使用'setDataSource()' –

+0

重複使用MediaPlayer對象我之前的所有嘗試(不同)都不成功。現在我正在努力做準確。問題也在於確定點擊的網址是否是新的。如果否,我們繼續玩,如果是的話,玩家必須停止。現在這個劇本在clicklistener上,但我希望它能夠在創建時開始活動。將嘗試... – Tramway11

+0

好的,這不是你的問題。我會將當前播放的URL作爲String存儲在我的服務中,然後我可以輕鬆地檢查是否有新的'.equals()'當前的URL。 –

回答

0

關於你的評論,這是因爲created是第一次玩後true,所以你永遠不執行你else邏輯。以下是我的做法,我不認爲有必要存儲單獨的價值created

public String currenturl = ""; 

public void playSong(Context c, String url) { 
    if (currenturl.equals(url)) { 
     // it's the same 
    } 
    else { 
     // it's not the same 
     currenturl = url; 
    } 
} 
+0

我也檢查了一些情況,當玩家還沒有開始時。然後我們不必在交換機上停止它(如果我們有currenturl的話)。將更多地思考 - 可惜的是,調用新的url需要很長時間。那麼,答案是好的。謝謝! – Tramway11