我有一个通过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);
答案 0 :(得分:1)
我的理解是您的ICallback
是Binder接口,因此在某些AIDL文件中有一个interface ICallback { ... }
形式的声明。
在这种情况下,您可以使用Parcel
或便捷方法parcel.writeStrongBinder(callback.asBinder())
将其写入parcel.writeStrongInterface(callback);
。在接收端,可以使用以下方法进行检索:
callback = ICallback.Stub.asInterface(parcel.readStrongBinder());
API参考:
Android框架中的示例
InputBindResult
:writeStrongInterface / readStrongBinder
ParcelableCall
:writeStrongBinder /
readStrongBinder