2015-07-07 2 views
0

Я определил aidl файлПередает Serializable объект в AIDL

interface IMyFeature { 
    void doTask(Class clazz); 
} 

Но мне нужно передать Class object другому процессу. Возможно ли это в Android? Если да, то как?

Я пробовал:

interface IMyFeature { 
    Serializable Class; 
    void doTask(Class clazz); 
} 

Но это не работает.

ответ

0

AIDL в Android поддерживает только пользовательский класс, реализующий интерфейс Parcelable.

В вашем случае вы хотите отправить объект класса, который невозможен. Что вы можете сделать, это отправить каноническое имя класса и получить его в своем сервисе.

Например, вы могли бы иметь этот aidl файл

interface IMyFeature { 
    void doTask(String className); 
} 

Тогда называют это так:

binder.doTask(MyClass.class.getCanonicalName()); 

И, наконец, в вашей службы реализации Binder заглушки:

частный

final IMyFeature mBinder = new IMyFeature.Stub() { 



     public void doTask(String className) { 

      try { 
       Class<?> clazz = Class.forName(className); 

       Constructor<?> ctor = clazz.getConstructor((Class[]) null); 

       Object object = ctor.newInstance(); 

      } catch (Exception e) { 
       // 
      } 

     } 
    };