Медиаплеер останавливается после воспроизведения Android звука щелчка по умолчанию

#java #android #audio #android-mediaplayer

#java #Android #Аудио #android-медиаплеер

Вопрос:

Я реализовал простой MediaPlayer механизм воспроизведения в своем приложении. Я не уверен, может ли это быть причиной проблемы, но все, казалось, работало хорошо до того момента, когда я обновил project до новейшего API (в настоящее время 19). Итак: воспроизведение из файла начинается нормально и внезапно останавливается, когда я нажимаю кнопку в своем приложении (что приводит к воспроизведению стандартного «звука щелчка»). Я установил OnCompletionListener для своего медиаплеера, и он запускается после звука щелчка, с моим медиаплеером в качестве аргумента.

 private void startNewTrack(int which){
        stopTrack();
        try {
            if (mp == null) {
                mp = new MediaPlayer();
                //mp.setOnCompletionListener(this);
                mp.setOnErrorListener(this);
            }
            MediaMetadataRetriever meta = new MediaMetadataRetriever();
            meta.setDataSource(playlist[which].getPath());
            String titleString = meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
            if (titleString == null)
                titleString = playlist[which].getName();
            title.setText(titleString);
            album.setText(meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
            artist.setText(meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
            try {
                byte[] pic = meta.getEmbeddedPicture();
                if (pic == null)
                    cover.setImageResource(R.drawable.albumart_mp_unknown);
                else
                    cover.setImageBitmap(BitmapFactory.decodeByteArray(pic, 0, pic.length));
            } catch (Exception e) {
                cover.setImageResource(R.drawable.albumart_mp_unknown);
            }
            mp.setDataSource(playlist[which].getPath());
            mp.prepare();
            seek.setMax(mp.getDuration() / 1000);
            mp.start();
            while (playerThread != null)
                Thread.sleep(5);
            playerThread = new Thread(new Runnable() {
                @Override
                public void run(){
                    while (mp != null amp;amp; !isInErrorState) {
                        try {
                            if (!isSeeking amp;amp; mp.isPlaying()) {
                                final int pos = getCurrentPosition() / 1000;
                                MusicPlayback.this.post(new Runnable() {
                                    @Override
                                    public void run(){
                                        seek.setProgress(pos);
                                    }
                                });
                            }
                            Thread.sleep(500);
                        } catch (Exception e) {
                        }
                    }
                }
            });
            playerThread.start();
            play.setImageResource(R.drawable.pause);
        } catch (Exception e) {
            errorMessage();
        }
    }
  

Мой метод onCompletion вызывает release() MediaPlayer . Я временно прокомментировал это, но это ничего не изменило.

Итак, вопрос: почему мои MediaPlayer остановки, когда другой звук завершает воспроизведение? Иногда даже зависает все приложение.

Комментарии:

1. Вы проверяете MediaPlayer аргумент для вашего onCompletion обратного вызова, чтобы убедиться, что он ваш MediaPlayer ? Если нет, это то, что вы могли бы попробовать.

2. ДА. Я уже делаю это, и я получаю свой собственный медиаплеер, когда звук щелчка завершается. Звук и музыка заканчиваются одновременно.