Медиаплеер продолжает играть - PullRequest
1 голос
/ 25 ноября 2011

У меня есть медиаплеер, и каждый раз, когда это действие вызывается, если проигрыватель мультимедиа воспроизводится, я хочу, чтобы он останавливался и начинал воспроизводиться новый медиаплеер ... Это мой метод аудиопроигрывателя

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();

}

Каждый раз, когда создается этот класс, он создает новый медиаплеер, не останавливает другой и просто воспроизводит оба одновременно.

1 Ответ

2 голосов
/ 25 ноября 2011

Возможно, вы захотите заглянуть в 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.

...