MediaPlayer在大多数Android 6.0设备中发布流媒体

时间:2016-03-09 11:21:05

标签: android media-player android-mediaplayer

在android 6.0设备(不是模拟器api 23)中我收到了奇怪的问题。播放器开始播放歌曲但是在1或2秒后它再次转到00:00,在此转换过程中,播放器跳过转换所需的时间并从该地点开始播放,例如(00:07)。

但是在20多秒后,歌曲开始正常播放约5到10秒,然后播放器因歌曲完成而停止播放。这个过程的总时间是歌曲持续时间的一半。

我认为准备音乐一定有问题,但我不确定是什么问题。

这是我到目前为止所写的代码

 public static MediaPlayer player = null;
 // above line is declared at start of class

// below code is written in a async task doInBackground
 if (player != null) {
        player.release();
        player = null;
    }
    durationOfSong = 0;
    String streamUrl = getSongsList.getStreamUrl(position);
    player = MediaPlayer.create(context, Uri.parse(streamUrl));
    try {
        Log.d(LOG_TAG, "end time: " + player.getDuration());
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mHandler.postDelayed(UpdateSong, 100);
        player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                loadingSongProgress.setMessage("Buffering song...");
            }
        });
        Manipulate manipulate = new Manipulate();
        endTimingOfSong = manipulate.MillisecondsToFormat(player.getDuration());

    } catch (NullPointerException e) {
        Log.e(LOG_TAG, "NP: error: " + e.toString());
        DialogWithNoSongError(view);
    }

 // and in post execute method
 loadingSongProgress.dismiss();
 player.start();
 createMediaDialog(view,position);
 // create media dialog is used to show image, song name and running time

运行< 6.0 OS和模拟器(运行6.0)的Android设备以正常方式播放歌曲。 如果需要更多代码我将编辑帖子,如果需要请建议。 在此先感谢!!

2 个答案:

答案 0 :(得分:1)

从底部删除代码以下代码

  

player.start();

并替换以下

    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    loadingSongProgress.setMessage("Buffering song...");
                      mHandler.postDelayed(UpdateSong, 100)
                }
            });
player.prepareAsync();

尝试运行它可能对您有所帮助

答案 1 :(得分:0)

试试这个。它对我有用。

player.setDataSource(getSongsList.getStreamUrl(position)); 
player.prepareAsync();

注意:有两种方法可以准备媒体播放器: 1. player.prepare();这个在完成准备操作后返回,因此导致UI线程延迟。

  1. prepare.prepareAsync();这个可以完成所有异步工作。因此不会导致UI线程出现任何延迟。