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
中声明的,MyMediaController.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来尝试你的其他方法?