如何正确停止MediaPlayer?
问题描述:
我可以停止音频,但如果我检查我的Android Studio调试窗口,我看到MediaPlayer在后台工作!如何正确停止MediaPlayer?
我弹奏的声音那样:
try {
myMediaPlayer1 = new MediaPlayer();
myMediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC);
myMediaPlayer1.setDataSource("http://myweb.com/audios/1.mp3");
myMediaPlayer1.prepare();
myMediaPlayer1.start();
} catch (Exception e) {
// TODO: handle exception
}
我通过按钮或OnDestry那样的点击停止MediaPlayer的:
@Override
protected void onDestroy() {
super.onDestroy();
myMediaPlayer1.stop();
}
答
您需要使用mediaPlayer.release()
发布媒体播放器。如果MediaPlayer
未播放任何歌曲/音频,则不应停止MediaPlayer
。请参阅下面的代码获取更多帮助
private void releaseMediaPlayer() {
try {
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying())
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
答
有一个问题:
我可以运行音频只有一次!
所以我必须在每次点击按钮时创建新的MediaPlayer。它可以工作,但是当音频播放结束时MediaPlayer不会停留在BG中!只有当我把这个方法;
myMediaPlayer1.setOnCompletionListener
再次点击梅索德象下面这样:
MediaPlayer myMediaPlayer1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myMediaPlayer1 = new MediaPlayer();
myMediaPlayer1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer myMediaPlayer1) {
releaseMediaPlayer();
}
});
}
public void Play_Audio(View view) {
try {
releaseMediaPlayer();
myMediaPlayer1=null;
myMediaPlayer1 = new MediaPlayer();
player.setDataSource("http://myweb.com/audios/1.mp3");
myMediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC);
myMediaPlayer1.prepare();
myMediaPlayer1.start();
} catch (Exception e) {
// TODO: handle exception
}
myMediaPlayer1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer myMediaPlayer1) {
releaseMediaPlayer();
}
});
}
private void releaseMediaPlayer() {
try {
if (myMediaPlayer1 != null) {
if (myMediaPlayer1.isPlaying())
myMediaPlayer1.stop();
myMediaPlayer1.release();
myMediaPlayer1= null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
我现在的问题是:
为什么OnComplet ...在OnCreate中,不能正常工作?
它会被销毁,当我们使MediaPlayer为空时,也许。所以我要创建梅索德.setOnCompet ...通过点击每次
感谢,它的工作原理: 'myMediaPlayer1.setOnCompletionListener(新MediaPlayer.OnCompletionListener(){ @覆盖 公共无效onCompletion(MediaPlayer的myMediaPlayer1) { releaseMediaPlayer(); } });'' – Json