MP3 не воспроизводится, когда я нажимаю поток - PullRequest
0 голосов
/ 24 февраля 2012

Я пытаюсь воспроизвести MP3 из потока, но проблема заключается в том, что после нажатия кнопки воспроизведения он будет воспроизводиться автоматически. Также кнопка воспроизведения не воспроизводит звук, она просто устанавливает его для потоковой передачи. Как сделать так, чтобы мой MP3 автоматически воспроизводился?

    play.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            if (!mediaPlayer.isPlaying()) {
                try {
                    mediaPlayer.setDataSource(url); 
                    mediaPlayer.prepareAsync(); 
                } catch (Exception e) {
                    e.printStackTrace();
                }

                mediaFileLengthInMilliseconds = mediaPlayer.getDuration();

                if(!mediaPlayer.isPlaying()){
                    mediaPlayer.start();
                    play.setImageResource(R.drawable.ic_media_pause);
                }else {
                    mediaPlayer.pause();
                    play.setImageResource(R.drawable.ic_media_play);
                }

                primarySeekBarProgressUpdater();
            }
    }});

    sb.setMax(99);
    sb.setOnTouchListener(this);

    mediaPlayer = new MediaPlayer();
    mediaPlayer.setOnBufferingUpdateListener(this);
    mediaPlayer.setOnCompletionListener(this);
}

private void primarySeekBarProgressUpdater() {
    sb.setProgress((int)(((float)mediaPlayer.getCurrentPosition()/mediaFileLengthInMilliseconds)*100));
    if (mediaPlayer.isPlaying()) {
        notification = new Runnable() {
            public void run() {
                primarySeekBarProgressUpdater();
            }
        };
        handler.postDelayed(notification,1000);
    }
}

public boolean onTouch(View v, MotionEvent event) {
    if(v.getId() == R.id.progress_bar){
        /** Seekbar onTouch event handler. Method which seeks MediaPlayer to seekBar primary progress position*/
        if(mediaPlayer.isPlaying()){
            SeekBar sb = (SeekBar)v;
            int playPositionInMillisecconds = (mediaFileLengthInMilliseconds / 100) * sb.getProgress();
            mediaPlayer.seekTo(playPositionInMillisecconds);
        }
    }
    return false;
}

public void onCompletion(MediaPlayer mp) {
    play.setImageResource(R.drawable.ic_media_play);

    mediaPlayer.stop();
}

public void onBufferingUpdate(MediaPlayer mp, int percent) {
    sb.setSecondaryProgress(percent);
}
   }

Я что-то не так делаю? Я нажимаю кнопку воспроизведения и вижу, что моя панель поиска заполняется, но она не воспроизводится.

Я также получаю это сообщение:

E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)
E/MediaPlayer(28985): stop called in state 0 E/MediaPlayer(28985):
error (-38, 0) E/MediaPlayer(28985): Error (-38,0)

1 Ответ

0 голосов
/ 24 февраля 2012

Похоже, вам нужно реализовать MediaPlayer.OnPreparedListener.Поскольку вы используете prepareAsync(), вам нужно подождать, пока MediaPlayer подготовится, прежде чем вы сможете вызвать start().Когда вы получаете обратный вызов onPrepared(), тогда безопасно вызывать метод start().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...