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 クラスの外側で更新された値をチェックするための 2 つのブロードキャストです
このアプローチを使用した 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);
}
}
しかし、これは正しく機能せず、他のアクティビティから別のアクティビティに切り替えるたびに、バッファの更新が多くなり、進行状況が表示されません。