Android --- 进程(二)---进程通讯的回调处理

1 、在服务端定义一个回调的 aidl( 主要生成回调的 java 代码 )

// IMusicCallback.aidl
package com.xykj.musicserviceapp;

interface IMusicCallback {
    void onDuration(int duration);
    void onCurrentPosition(int pos);
}

2 、在功能 aidl 中新增关于回调对象的注册方法和取消注册方法

package com.xykj.musicserviceapp;

import com.xykj.musicserviceapp.Music;
import com.xykj.musicserviceapp.IMusicCallback;

interface IMusicInterface {
    void initMusic(in Music music);

    void start();

    void pause();

    Map getMusicInfo();

    void registCallback(IMusicCallback callback);

    void unRegistCallback(IMusicCallback callback);
}

3 、在服务 (Service) 中使用 RemoteCallbackList 管理回调对象,处理信息回调过程

// 远程回调集合
private RemoteCallbackList<IMusicCallback> callbackList;
...
@Override
public void onCreate() {
    super.onCreate();
    callbackList = new RemoteCallbackList<>();
}
...
处理回调对象的注册和取消注册
@Override
public IBinder onBind(Intent intent) {
    return new MyBinder();
}

class MyBinder extends IMusicInterface.Stub {
...
@Override
public void registCallback(IMusicCallback callback) throws RemoteException {
callbackList.register(callback);
}
@Override
public void unRegistCallback(IMusicCallback callback) throws RemoteException {
callbackList.unregister(callback);
}
}
...
使用回调对象返回数据
private MediaPlayer.OnPreparedListener onPreparedListener = new MediaPlayer.OnPreparedListener() {

    @Override
    public void onPrepared(MediaPlayer mp) {
        ...
        // 返回总时间
        // 开始广播
        int size = callbackList.beginBroadcast();
        for (int i = 0; i < size; i++) {
            try {
                callbackList.getBroadcastItem(i).onDuration(duration);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
        // 结束广播
        callbackList.finishBroadcast();
        ...
    }
};

客户端可以直接将服务端 aidl 生成的 Java 代码来实现回调对象,然后注册回调,不需要时取消注册回调即可

// 实现回调对象
private IMusicCallback callback = new IMusicCallback.Stub(){

    @Override
    public void onDuration(int duration) throws RemoteException {
        mSeek.setMax(duration);
    }

    @Override
    public void onCurrentPosition(int pos) throws RemoteException {
        mSeek.setProgress(pos);
    }
};

注册回调
iMusicInterface.registCallback(callback);
取消注册回调
iMusicInterface.unRegistCallback(callback);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值