在服务中通知Activity来获取信息(通过广播)

#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);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值