媒体播放器问题在大多数安卓 6.0 设备在流媒体中



在安卓 6.0 设备(不是模拟器 api 23)中,我收到了奇怪的问题。玩家开始播放歌曲,但 1 或 2 秒后,在此过渡期间,玩家跳过过渡所需的时间并从该位置开始播放,例如(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 操作系统的 Android 设备和模拟器(运行 6.0)以正常方式播放歌曲。如果需要更多代码,我将编辑帖子,如果需要,请提出建议。提前感谢!!

从底部删除以下代码的代码

player.start();

并替换以下内容

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

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

试试这个。它对我有用。

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

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

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

最新更新