2 votes

Peut un Parcelable contenir une interface AIDL?

J'ai un Service qui communique via AIDL. J'ai avec succès créé une interface de rappel et utilise une classe qui implémente Parcelable.

Je veux que le Parcelable contienne une référence à l'interface définie dans le fichier AIDL mais j'obtiens l'erreur que ma classe de rappel ne peut pas être convertie en Parcelable. "types incompatibles: ICallback ne peut pas être converti en Parcelable"

Mon Parcelable ressemble à ceci

class Foo implements Parcelable {
   String someString;
   ICallback callback;
....
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(someString);
        dest.writeParcelable(callback, flags); //ne fonctionne pas
    }

}

Le AIDL pour le service a une méthode comme:

void register(Foo[] someFoos);

2voto

Ma compréhension est que votre ICallback est une interface Binder, donc vous avez une déclaration de la forme interface ICallback { ... } dans un fichier AIDL.

Dans ce cas, vous pouvez l'écrire dans un Parcel en utilisant parcel.writeStrongBinder(callback.asBinder()) ou avec la méthode de commodité parcel.writeStrongInterface(callback);. Du côté réception, il peut être récupéré avec :

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

Référence de l'API :

Exemples du Framework Android :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X