2016-08-02 105 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

相关问题