RemoteCallBack / AIDL用法

时间:2017-02-11 11:49:49

标签: android service callback aidl

我想在收到消息的事件中调用服务片段中的方法。

我有一个处理传入消息的fcm消息服务。如果在服务中接收到消息时显示某个片段,我希望能够在服务中识别某个片段(对于某个用户)是否正在显示,如果是,则应该调用片段中的方法(在片段中显示消息),如果(用户特定的)片段实例未运行,我正在生成通知。

经过一些研究后,我找到了RemoteCallBack / AIDL的代码,这似乎是完美的,因为我可以从服务中注册来自片段实例的回调和(在收到消息时)调用片段方法:

服务:

public final RemoteCallbackList<ICallBackAidl> mDMCallbacks = new RemoteCallbackList<ICallBackAidl>();

public void registerDMCallback(ICallBackAidl cb) {
Logger.d(LOG_TAG, "registerDMCallback " + cb);
if (cb != null)
    mDMCallbacks.register(cb);
}

调用方法

public void callMehodsInApplication() {
final int N = mDMCallbacks.beginBroadcast();
for (int i = 0; i < N; i++) {
    try {
        mDMCallbacks.getBroadcastItem(i).method1();
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}
mDMCallbacks.finishBroadcast();
}
片段中的

private ISyncmlServiceDMCallback mCallback = new ISyncmlServiceDMCallback.Stub() {
// Implement callback methods here
public void method1() {
   // Service can call this method
  }
}

public void onServiceConnected(ComponentName name, IBinder service) {   
    svc.LocalBinder binder = (svc.LocalBinder) service;
    mSvc = binder.getService();
    mSvc.registerDMCallback(mCallback);
}

到目前为止事情很清楚,但现在(也许是愚蠢的问题):

我如何声明ICallBackAidl?经过一些研究和追踪/失败,我真的被困在这里。

0 个答案:

没有答案