重新创建 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 教程,我成功地构建了一个服务来处理我可以随时控制的媒体播放器。
在我的项目中,我试图制作一个播放广播流的媒体播放器。一切似乎都运行良好,直到我按下设备上的后退按钮,我认为这会停止 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 教程,我成功地构建了一个服务来处理我可以随时控制的媒体播放器。