Android MediaController播放/暂停按钮和Seekbar不刷新

use*_*458 4 android android-music-player mediacontroller

我正在使用MediaController.MediaPlayerControl以在我的自定义视图底部显示MediaController,但我无法让它正常工作.当我第一次播放音乐时,应该有暂停按钮可见,但是有播放,当我按下那个按钮时,音乐正确暂停,状态保持不变,之后它正常工作.此外,当我播放下一首歌曲时,旧的MediaController小部件与新的小部件重叠.有时,在播放音乐时,进度/搜索栏不会刷新.它只是在按下MediaController上的某些内容时自动更新(播放/暂停,转发等).

我发现这些问题与我的相似,但我认为他们得到的答案不会解决我的问题.

  1. Android mediacontroller Play Pause控件无法正常刷新
  2. Android MediaController搜索栏不令人耳目一新
  3. 即使文件已经播放,Android VideoView播放控件最初显示"播放"而不是"暂停"

这是我初始化控制器的方式:

private void setController()
{
    controller = new MusicController(this);

    controller.setPrevNextListeners(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            playNext();
          }
        }, new View.OnClickListener() {
          @Override
          public void onClick(View v) {
            playPrev();
          }
        });

    controller.setMediaPlayer(this);
    controller.setAnchorView(findViewById(R.id.song_list));
    controller.setEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)

这是我显示控制器的方式:

public void playMusic()
{
        musicSrv.playSong(); //Play song in a service
        setController();
        controller.show(0);
        controller.requestFocus();
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lec 11

我有这个问题.不知道你是否还需要帮助,但我还以为我会发帖.对于后代,您是否关注本教程

首先,一个简单的问题:由于重复调用,您将获得多个控件实例setController().将函数的第一行更改为:

if (controller == null) controller = new MusicController(this);
Run Code Online (Sandbox Code Playgroud)

关于播放按钮故障,我相信这是因为你在音乐播放器准备好之前就已经展示了它(免责声明:我自己是Android的新手,以下是我发现的有用的东西) .

  1. 从音乐播放服务设置广播,以便在准备好音乐播放器时通知您的音乐控制活动.在音乐播放服务中附加以下功能以广播意图:

    @Override
    public void onPrepared(MusicPlayer player) {
        // Do some other stuff...
    
        // Broadcast intent to activity to let it know the media player has been prepared
        Intent onPreparedIntent = new Intent("MEDIA_PLAYER_PREPARED");
        LocalBroadcastManager.getInstance(this).sendBroadcast(onPreparedIntent);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在您的音乐控制活动中设置广播接收器,以接收您的服务广播的意图.将以下类添加到您的活动中:

    // Broadcast receiver to determine when music player has been prepared
    private BroadcastReceiver onPrepareReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context c, Intent i) {
        // When music player has been prepared, show controller
        controller.show(0);
        }
    };
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在您的活动onResume()方法中注册您的接收者:

    // Set up receiver for media player onPrepared broadcast
    LocalBroadcastManager.getInstance(this).registerReceiver(onPrepareReceiver,
            new IntentFilter("MEDIA_PLAYER_PREPARED"));
    
    Run Code Online (Sandbox Code Playgroud)
  4. 根据代码的结构,你必须做一些一般的整理.在我的代码中,我只调用了setController()两次:来自我的活动中的onCreate()onResume()方法.我也只能controller.show(0)从我的广播接收器和我的onResume()方法拨打电话.


归档时间:

查看次数:

5220 次

最近记录:

10 年,9 月 前