我在 Service 类中实现了一个 MediaPlayer,以便可以从任何活动中访问播放器。因为我可以在任何活动中使用 MediaPlayer,所以在从一个活动切换到另一个活动时显示缓冲区更新很重要。
为了检测缓冲区更新,我在服务类中使用了 OnInfo() 方法
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START) {
sendBufferStartBroadcast();
} else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
sendBufferCompleteBroadcast();
}
return false;
}
这里 sendBufferCompleteBroadcast() & sendBufferStartBroadcast() 是两个广播,用于检查Service类之外的更新值
要检查 Activity 类的更新,我使用了这种方法,
private BroadcastReceiver broadcastBufferReciever = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
showBufferProgress(intent);
}
};
private void showBufferProgress(Intent bufferIntent) {
String bufferValue = bufferIntent.getStringExtra("buffer_status");
int bufferStatus = Integer.parseInt(bufferValue);
switch (bufferStatus) {
case 0:
if (progressBar != null) {
progressBar.setVisibility(View.GONE);
btnPlay.setVisibility(View.VISIBLE);
changeUI();
}
break;
case 1:
progressBar.setVisibility(View.VISIBLE);
btnPause.setVisibility(View.GONE);
btnPlay.setVisibility(View.GONE);
}
}
但这不能正常工作,每当我从其他 Activity 切换到另一个 Activity 时,缓冲区更新就会很多并且没有显示任何进展。