当前位置: 首页 > 知识库问答 >
问题:

播放歌曲时MediaController播放按钮未更新

田骁
2023-03-14

我正在尝试使用mediacontroller播放音频。我可以让音频正常工作,但当歌曲开始播放时,我的mediacontroller上的播放按钮不会更新。如果按下mediacontroller上的播放按钮,它会暂停歌曲并查找进度条。然后,如果我按pause,它会再次播放歌曲。我在打电话

mp.start() 

这不会更新播放按钮。当我调用start时,如何使按钮变为pause按钮?

public class QuickMusicPlayer implements MediaController.MediaPlayerControl {

private final MediaPlayer mMediaPlayer;
private final MediaController mMediaController;
private Activity mActivity;

public QuickMusicPlayer(View anchorView, Activity activity) {
    mActivity = activity;
    mMediaPlayer = new MediaPlayer();
    mMediaController = new MediaController(activity);
    mMediaController.setMediaPlayer(this);
    mMediaController.setAnchorView(anchorView);
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });
}

public void setUrl(String url) {
    mMediaPlayer.reset();
    if (TextUtils.isEmpty(url)) {
        ViewUtil.showCroutonAlert(mActivity, R.string.cant_play_music);
    } else {
        try {

            mMediaPlayer.setDataSource(url);
            mMediaPlayer.prepareAsync();
            mMediaController.setEnabled(true);
            mMediaController.show(0);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

@Override
public void start() {
    mMediaPlayer.start();
}

@Override
public void pause() {
    mMediaPlayer.pause();
}

@Override
public int getDuration() {
    return mMediaPlayer.getDuration();
}

@Override
public int getCurrentPosition() {
    return mMediaPlayer.getCurrentPosition();
}

@Override
public void seekTo(int pos) {
    mMediaPlayer.seekTo(pos);
}

@Override
public boolean isPlaying() {
    return mMediaPlayer.isPlaying();
}

@Override
public int getBufferPercentage() {
    return 0;
}

@Override
public boolean canPause() {
    return true;
}

@Override
public boolean canSeekBackward() {
    return true;
}

@Override
public boolean canSeekForward() {
    return true;
}

@Override
public int getAudioSessionId() {
    return 0;
}

}

共有1个答案

毋修为
2023-03-14

找到了答案。我需要在开始更新按钮后再次调用show

mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.start();
        mMediaController.show(0);
    }
});
 类似资料:
  • 我正在制作音频播放器(android)。问题是我什么时候启动我的应用程序

  • 我正在开发一个移动应用程序,可以检测iPhone和Android上各种媒体播放器播放的歌曲。我们目前支持多个应用程序在这两个平台。我们的应用程序的工作方式与Last.fm检测和自动删除播放的方式类似。 假设我对要收集其历史记录的每个用户都有spotify凭据。 谢谢

  • 我正在使用MediaController.MediaPlayerControl以便在自定义视图的底部显示MediaController,但无法使其正常工作。当我第一次播放音乐时,应该有暂停按钮可见,但相反,有播放,当我按下那个按钮时,音乐被正确暂停,状态保持不变,之后它正常工作。此外,当我播放下一首歌曲时,旧的MediaController小部件与新的小部件重叠。有时,当音乐播放时,进度/搜索栏不

  • 所以我用javafx制作了一个mp3播放器,它有一个,在这里我拖放歌曲,然后选择一首歌曲并按play播放,你就明白了。问题是,用我当前的代码,我不能播放两首以上歌曲的序列:/(播放选定的歌曲,播放它旁边的歌曲,然后停止)。代码如下:

  • 我正在编写一个,其中我提供了功能,几乎满足了我的需求,但面临一些小问题。 我是如何实现我的音乐播放器的: 正在列出SD卡中可用的音频歌曲(路径类似:) 一旦用户点击任何音频,然后启动媒体播放器 在媒体播放器屏幕中,我为用户提供了返回音频列表的导航 用户返回,现在选择了一些其他歌曲来听(这里我面临的问题是,用户将可以播放新选择的歌曲,但也会播放旧歌曲,而一次只能播放上一次选择的歌曲,但在我的情况下,

  • 尝试使用mediacontroller通过url播放音频文件 但我有一个错误: 09-11 10:28:23.970:E/MediaPlayer(912):尝试在没有有效MediaPlayer的情况下调用getDuration 09-11 10:28:23.970:E/MediaPlayer(912):错误(-38,0)09-11 10:28:23.990:E/MediaPlayer(912):尝