#1.在onPrepared()中创建意图并发送广播。
public static final String OPEN_AUDIO = "notify_activity_to_get";
class MyOnPreparedListener implements MediaPlayer.OnPreparedListener {
@Override
public void onPrepared(MediaPlayer mp) {
//通知Activity来获取信息--广播
notifyChange(OPEN_AUDIO);
start();
}
}
private void notifyChange(String openAudio) {
Intent intent=new Intent(OPEN_AUDIO);
sendBroadcast(intent);
}
#2.如何创建一个广播接收器?
新建一个类继承自BroadCastReceiver,并重写父类的OnReceive()方法。
private void initData() {
mReceiver=new MyReceiver();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction(OPEN_AUDIO);
registerReceiver(mReceiver,intentFilter);
}
class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
try {
tvArtist.setText(service.getArtist());
tvName.setText(service.getName());
//设置进度条的最大值
seekbarAudio.setMax(service.getDuration());
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
动态注册的广播接收器一定要取消注册
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(con);
if(mReceiver!=null){
unregisterReceiver(mReceiver);
}
}
#3.进度更新
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case PROGRESS:
try {
seekbarAudio.setProgress(service.getCurrentPosition());
tvTime.setText(Utils.stringForTime(service.getCurrentPosition())+"/"+Utils.stringForTime(service.getDuration()));
// 每秒更新一次
mHandler.removeMessages(PROGRESS);
mHandler.sendEmptyMessageDelayed(PROGRESS,1000);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
}
}
};
class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
try {
tvArtist.setText(service.getArtist());
tvName.setText(service.getName());
//设置进度条的最大值
seekbarAudio.setMax(service.getDuration());
mHandler.sendEmptyMessage(PROGRESS);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
#4.拖动进度条
class MyOnSeekBarChangeListener implements SeekBar.OnSeekBarChangeListener {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(fromUser){
//拖动进度
try {
service.seekTo(progress);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}
stub中
@Override
public void seekTo(int position) throws RemoteException {
mediaPlayer.seekTo(position);
}