一个Parcelable可以包含一个AIDL接口吗?

时间:2019-04-11 01:13:16

标签: android parcelable aidl

我有一个通过AIDL进行通信的服务。我已经成功创建了一个回调接口,并使用了实现Parcelable的类。

我想让Parcelable包含对AIDL文件中定义的Interface的引用,但是我收到一个错误,我的回调类无法转换为Parcelable。 “不兼容的类型:无法将ICallback转换为Parcelable”

“我的包裹”看起来像这样

class Foo implements Parcelable {
   String someString;
   ICallback callback;
....
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(someString);
        dest.writeParcelable(callback, flags); //doesn't work
    }

}

该服务的AIDL具有如下方法:

void register(Foo[] someFoos);

1 个答案:

答案 0 :(得分:1)

我的理解是您的ICallback是Binder接口,因此在某些AIDL文件中有一个interface ICallback { ... }形式的声明。

在这种情况下,您可以使用Parcel或便捷方法parcel.writeStrongBinder(callback.asBinder())将其写入parcel.writeStrongInterface(callback);。在接收端,可以使用以下方法进行检索:

callback = ICallback.Stub.asInterface(parcel.readStrongBinder());

API参考:

Android框架中的示例