我需要服务吗?

时间:2016-08-02 03:55:25

标签: java android android-layout android-studio

我正在尝试构建一个应用程序,一个活动是“Radio”,我有一个流媒体在线广播。如果我点击播放,一切正常,它播放,当我点击停止,它停止。但问题是当我改变活动时,ex:从“Radio”到“Home”,或“Contact”并回到“Radio”,收音机仍在运行,如果我想停止它,则不起作用。但如果我点击播放,音乐会重复,因此我会打开相同的电台两次。看起来该应用程序不知道Radio已经运行。我需要服务对象,还是什么?如果我需要一个服务,有人可以解释我应该在代码中确切实现它吗?这是我的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();
                                       }


    });

1 个答案:

答案 0 :(得分:2)

每次点击开始按钮时都会创建MediaPlayer,因此MediaPlayer的多个实例正在播放Radio

如果您在切换活动时不希望自己MediaPlayer正在投放,可以在mPlayer.stop();的{​​{1}}中致电onPause()

您可以在此处选择一些选项,一种是创建MediaPlayer对象的Activity,以便当您从Singleton Instance来回移动时,{{1}的同一个实例正在使用的对象将帮助您控制RadioActivity

  

Java中的Singleton设计模式。 Singleton Pattern表示只需定义一个只有一个实例并提供全局访问权限的类"。换句话说,类必须确保只创建单个实例,并且所有其他类都可以使用单个对象。