我有一个媒体播放器,每次调用此活动时如果有媒体播放器播放我想让它停止并且新媒体播放器开始播放...这是我的音频播放器方法
private void playAudio(String url) throws Exception{
mediaplayer.release();
mediaplayer.setDataSource(url);
mediaplayer.prepare();
mediaplayer.start();
}
我在课程开头初始化媒体播放器
private MediaPlayer mediaplayer = new MediaPlayer();
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.songplaying);
// Getting Our Extras From Intent
Bundle names = getIntent().getExtras();
// Getting Specific Data
path = names.getString("pathkeyword");
//Start Player
try {
playAudio(path);
} catch (Exception e) {
e.printStackTrace();
}
每次创建类时,它都会创建一个新的媒体播放器,不会停止另一个播放器,只是同时播放它们。
答案 0 :(得分:2)
您可能希望查看onPause
然后杀死媒体播放器。问题是,一旦第二次进入媒体播放器,就没有参考。因此,您启动活动,播放音乐,但退出时(例如按HOME按钮),媒体播放器未被告知停止(它作为单独的线程运行)。当你重新打开它时,它将在新线程上启动一个新的媒体播放器,产生两个声音。
要解决此问题,请在退出时正确杀死媒体播放器。当您退出活动时,这将正确杀死媒体播放器:
@Override
protected void onPause(){
super.onPause();
if(mediaplayer.isPlaying()){
try{
mediaplayer.stop();
}
catch(IllegalStateException){
Log.d("mediaplayer","Media player was stopped in an illegal state.");
}
}
}
如果您希望在活动不在前台时继续播放音乐,则需要使用Service
。