1

我有一个从一些外部硬件收集数据的 Android 服务。我正在使用此处显示的回调结构将这些数据提供给我的活动。

我提供的数据是ArrayList<MyClass>. 在阅读 Android API 文档时,似乎建议的方法是使用广播事件和Parcelable. 我还看到了 Android 应用程序中使用的回调,所以问题是重构我的代码以使用广播有什么好处?

现在,在未来,我希望允许外部应用程序访问此服务(例如 Tasker),所以我猜测我使用的回调方法将仅用于本地应用程序。所以问题是如何使用 AIDL 描述从 aService到a 的回调。Activity

4

1 回答 1

1

允许服务回调到 Activity 的方法是让服务的aidl 接口定义一个注册函数,该函数将另一个aidl 接口作为参数。

ServiceAidlInterface.aidl:

package com.test;

import com.test.CallbackAidlInterface;

interface ServiceAidlInterface {
    void registerCallback(in CallbackAidlInterface callback);
}

CallbackAidlInterface.aidl:

package com.test;

interface CallbackAidlInterface {
    void doCallback();
}

在您的活动中,您需要定义以下内容:

ServiceAidlInterface mService = null;

private CallbackAidlInterface mCallback = new CallbackAidlInterface.Stub() {
    @Override
    public void doCallback() throws RemoteException {
    }
};

因此,当活动绑定您的 onServiceConnected() 时,您可以执行以下操作:

   mService = ServiceAidlInterface.Stub.asInterface(serviceBinder);
   service.registerCallback(mCallback)
于 2013-05-30T06:34:18.330 回答