【问题标题】:Can a Parcelable contain an AIDL Interface?Parcelable 可以包含 AIDL 接口吗?
【发布时间】:2019-04-11 01:13:16
【问题描述】:

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

我想让 Parcelable 包含对 AIDL 文件中定义的接口的引用,但我收到错误消息,即我的回调类无法转换为 Parcelable。 “不兼容的类型:ICallback 无法转换为 Parcelable”

我的 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);

【问题讨论】:

    标签: android parcelable aidl


    【解决方案1】:

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

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

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

    API 参考:

    来自 Android 框架的示例:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-07
      • 2011-01-10
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2018-05-05
      • 2011-09-23
      相关资源
      最近更新 更多