重新创建 activity 时失去对媒体播放器的控制

Losing the control of the mediaplayer when the activity is recreated

在我的项目中,我试图制作一个播放广播流的媒体播放器。一切似乎都运行良好,直到我按下设备上的后退按钮,我认为这会停止 activity 并导致设备在再次启动时重新创建 activity。问题是,当重新创建 activity 时,我失去了对媒体播放器的控制并创建了一个新的媒体播放器。

那时我需要能够重新获得媒体播放器的控制权。怎么可能?

这部分代码属于onCreate

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button) findViewById(R.id.button);
    if (mediaPlayer == null){
        mediaPlayer = new MediaPlayer();
    try {
        mediaPlayer.setDataSource(getString(R.string.yayin));
    } catch (Exception e) {
        e.printStackTrace();
    }
    mediaPlayer.prepareAsync();
    }

    if(!isPlaying){

        btn.setBackgroundResource(R.drawable.oynat);

    }
    else{

        btn.setBackgroundResource(R.drawable.durdur);

    }
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(!isPlaying){

                playOnReady();
                isPlaying = true;
                btn.setBackgroundResource(R.drawable.durdur);

            }
            else{

                mediaPlayer.reset();
                isPlaying = false;
                btn.setBackgroundResource(R.drawable.oynat);

            }
        }
    });

这部分代码属于函数playOnReady()

 private void playOnReady(){

    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();

        }
    });

}

看看 Android Activity 生命周期流程图:https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

您需要考虑离开Activity时调用onPause的路径,然后再次进入时调用onResume的路径。您的解决方案可能很简单,只需将代码的 some/all 从 onCreate 移动到 onResume。

使用 this 教程,我成功地构建了一个服务来处理我可以随时控制的媒体播放器。