2016-08-02 157 views
0

我正嘗試構建應用程序,其中一項活動是「無線電」,我有一個流式在線收音機。如果我點擊播放,一切正常,它播放,當我點擊停止,它停止。但問題是,當我改變活動,例如:從「收音機」到「家庭」或「聯繫人」,回到「收音機」,收音機仍然運行,如果我想停止它,不起作用。但如果我打了,音樂重複,因此我有兩次打開同一臺電臺。它看起來應用程序不知道無線電已經運行。我需要一個服務對象,還是什麼?如果我需要服務,有人可以解釋我在代碼中究竟應該在哪裏實現它?這是我的Java代碼:我需要服務嗎?

public class radioActivity extends AppCompatActivity { 


int length; 
Button b1; 
private Button Button1; 
private Button Button2; 
private String STREAM_URL = "http://192.99.35.93:6370/;stream.mp3"; 
private MediaPlayer mPlayer; 
@Override 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_radio); 
    Button button1 = (Button) findViewById(R.id.buttonpredica1); 
    Button button2 = (Button) findViewById(R.id.buttonpredica2); 



    mPlayer = new MediaPlayer(); 

    mPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); 
    WifiManager.WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE)) 
      .createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock"); 

    wifiLock.acquire(); 
    wifiLock.release(); 

    button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
            public void onClick(View v) { 

             try { 
              mPlayer.reset(); 
              mPlayer.setDataSource(STREAM_URL); 
              mPlayer.prepareAsync(); 
              mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
               @Override 
               public void onPrepared(MediaPlayer mPlayer) { 

                mPlayer.start(); 

               } 
              }); 
             } catch (IOException e) { 
              e.printStackTrace(); 
             } 
            } 
           }); 



    button2.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
             mPlayer.stop(); 
             } 


    }); 
+0

你並不需要一個'service'但你需要一個'singleton'(和'service'是一個方便獲得一種方式)。 –

+0

我的例子中有單例嗎? – SamH

回答

2

MediaPlayer被你點擊開始按鈕,每一次的MediaPlayer如此多實例都打Radio

如果你不希望你的MediaPlayer當您切換到運行創建活動可以調用mPlayer.stop();在你Activity

你可以有幾個選擇這裏onPause(),一個是創建你的MediaPlayer對象的Singleton Instance,所以當你去來來回回從您RadioActivity,該MediaPlayer對象的同一個實例被使用,這將幫助你控制MediaPlayer

Singleton design pattern in Java. Singleton Pattern says that just"define a class that has only one instance and provides a global point of access to it". In other words, a class must ensure that only single instance should be created and single object can be used by all other classes.

+0

如何在我的情況下創建單個實例?我做了一些研究,但我有點困惑。 – SamH

+0

https://gist.github.com/Akayh/5566992,這些要點都有一個很好的例子, –

+0

好的,我創建了一個新的單個類,並且我從您發給我的鏈接中的singleton類複製並粘貼了everyhing。現在,就我而言,活動A將是所有活動,而活動B將是radioActivity,對嗎? – SamH

相關問題