当我按流时 MP3 不播放
我正在尝试从流中播放 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)
I am trying to play a MP3 from a stream but the issue is after I press play it would automatically play. Also the play button doesn't play the audio it just sets it to stream. How can I make my MP3 automatically play?
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);
}
}
Am I doing anything wrong? I click play and I see my seekbar filling up but it wont play.
I also get this message:
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
看起来您需要实现
MediaPlayer.OnPreparedListener
。由于您使用的是prepareAsync()
,因此您需要等到 MediaPlayer 准备好后才能调用start()
。当您收到onPrepared()
回调时,就可以安全地调用start()
方法。Looks like you need to implement
MediaPlayer.OnPreparedListener
. Since you are usingprepareAsync()
, you need to wait until the MediaPlayer is prepared before you can callstart()
. When you get theonPrepared()
callback, at that point it's safe to call thestart()
method.