Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MediaController seekbar未刷新_Android_Refresh_Progress_Seekbar_Mediacontroller - Fatal编程技术网

Android MediaController seekbar未刷新

Android MediaController seekbar未刷新,android,refresh,progress,seekbar,mediacontroller,Android,Refresh,Progress,Seekbar,Mediacontroller,我正在使用MediaController和MediaPlayer在Android中创建一个简单的音频播放器,这是我在这个网站上找到的一个例子 然而,经过多次搜索,我找不到解决问题的方法:播放音乐时,进度/搜索栏不会刷新。当按下MediaController上的某个按钮(播放/暂停、前进等)时,它会自动更新 有没有什么我没有得到的简单解决办法 注意:MyMediaController是在XML中声明的,MyMediaController.MediaPlayerControl方法只使用了MediaP

我正在使用
MediaController
MediaPlayer
在Android中创建一个简单的音频播放器,这是我在这个网站上找到的一个例子

然而,经过多次搜索,我找不到解决问题的方法:播放音乐时,进度/搜索栏不会刷新。当按下
MediaController
上的某个按钮(播放/暂停、前进等)时,它会自动更新

有没有什么我没有得到的简单解决办法


注意:My
MediaController
是在
XML
中声明的,My
MediaController.MediaPlayerControl
方法只使用了
MediaPlayer
类。

MediaPlayer
提供了一个方法
getCurrentPosition()
您可以将其放在一个线程中以不断更新进度条

    public int getCurrentPositionInt(){
        if (player != null)
            return player.getCurrentPosition();
        else
            return 0;
    }
创建或以持续更新seekbar:

seekBar.setMax((getCurrentPositionInt() / 1000));


Mediaplayer
提供了一种方法
getCurrentPosition()
您可以将其放在一个线程中,以不断更新进度条

    public int getCurrentPositionInt(){
        if (player != null)
            return player.getCurrentPosition();
        else
            return 0;
    }
创建或以持续更新seekbar:

seekBar.setMax((getCurrentPositionInt() / 1000));


我为我的英语感到抱歉

在音乐播放器准备就绪之前,您正在显示控制器。 当活动准备就绪时,您需要从控制器通知活动

public void onPrepared(MediaPlayer mp) {
                    mp.start();
                    Intent onPreparedIntent = new Intent("MP_READY");
                    LocalBroadcastManager.getInstance(activity).sendBroadcast(onPreparedIntent);
                }
然后,您需要在活动中创建一个BroadcastReceiver,并重写其onReceive方法以显示控制器

private BroadcastReceiver mpReadyReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context c, Intent i) {            
        controller.show(0);
    }
};
您还需要在活动的onResume()中注册接收者

现在尝试仅在必要时调用controller.show


小心不要创建多个控制器实例

对不起,我的英语太差了

在音乐播放器准备就绪之前,您正在显示控制器。 当活动准备就绪时,您需要从控制器通知活动

public void onPrepared(MediaPlayer mp) {
                    mp.start();
                    Intent onPreparedIntent = new Intent("MP_READY");
                    LocalBroadcastManager.getInstance(activity).sendBroadcast(onPreparedIntent);
                }
然后,您需要在活动中创建一个BroadcastReceiver,并重写其onReceive方法以显示控制器

private BroadcastReceiver mpReadyReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context c, Intent i) {            
        controller.show(0);
    }
};
您还需要在活动的onResume()中注册接收者

现在尝试仅在必要时调用controller.show


小心不要创建多个控制器实例

seekbar应该自动刷新(通过MediaController/MediaPlayer API)还是应该使用代码进行更新?我希望它自动刷新,因为:MediaController.setMediaPlayer(MediaPlayer)已经完成。不幸的是,它只在按下MediaController的任何按钮时更新(没有我的代码)。seekbar应该自动刷新(通过MediaController/MediaPlayer API)还是应该使用代码更新?我希望它自动刷新,因为:MediaController.setMediaPlayer(MediaPlayer)已经完成。不幸的是,它只在按下MediaController的任何按钮时更新(没有我的代码)。谢谢。遗憾的是,它不会从连接的MediaPlayer更新自身。还有一件事:如何从我的MediaController中获取SeekBar?我没有使用过
MediaController
,但文档中说它负责将控件与MediaPlayer的状态同步。我认为可以使用MediaController.MediaPlayerControl.seekTo((getCurrentPositionInt()/1000))方法来实现这一点。是的,它确实很好地同步,但奇怪的是,它只有在按下某个按钮时才会刷新。seekTo不起作用,已经试过了:(@Sayyam seekTo方法不起作用,可悲的是-视频被卡住了。我如何抓住seekBar来尝试你的其他方法?谢谢。可悲的是,它不会从附带的MediaPlayer中自动更新。还有一件事:我如何从我的MediaController中获取seekBar?我没有使用过
MediaController
,但文档中说它负责将控件与MediaPlayer的状态同步。我认为您可以使用MediaController.MediaPlayerControl.seekTo((getCurrentPositionInt()/1000))方法。而不是获取seekBar。是的,它确实很好地同步,但奇怪的是,它只有在按下某个按钮时才会刷新。seekTo不起作用,已经尝试过了:(@Sayyam seekTo方法不起作用,很遗憾,视频卡住了。我如何获取seekBar来尝试你的其他方法?