Метод AIDL не создается

Мне нужно передать объект Intent в удаленную службу через AIDL, я пробовал:

В файле помощи:

import android.content.Intent;
parcelable Intent

void passIntent(Intent intent);

В моем классе удаленного обслуживания:

private final IMyService.Stub mBinder = new IMyService.Stub() {
  //ERROR: The method must override or implement a supertype method
  @Override
  public void passIntent(Intent intent) {

  }
}

Я получил ошибку компиляции The method must override or implement a supertype method.

Затем я проверил папку gen/, IMyService.java, метод не сгенерирован. Очистка и повторная сборка проекта не помогают.

Почему? Разве Android не позволяет передавать объект Intent таким образом? Если да, то как я могу передать объект Intent из Activity для обслуживания в другом процессе?


person user842225    schedule 20.03.2015    source источник
comment
Попробуйте удалить строку parcelable Intent из вашего AIDL.   -  person CommonsWare    schedule 20.03.2015
comment
@CommonsWare, это не помогает.   -  person user842225    schedule 20.03.2015


Ответы (1)


Когда я создал новый проект Android Studio и определил этот AIDL на основе вашего вопроса:

package com.commonsware.myapplication;

import android.content.Intent;

interface IMyService {
    void passIntent(Intent intent);
}

Я получил ошибку сборки:

.../IMyService.aidl:6 parameter 1: 'Intent intent' can be an out parameter, so you must declare it as in, out or inout.

Изменение AIDL на:

package com.commonsware.myapplication;

import android.content.Intent;

interface IMyService {
    void passIntent(in Intent intent);
}

привело к тому, что IMyService.java был сгенерирован с помощью правильного метода.

Итак, добавьте ключевое слово in в объявление passIntent() и попробуйте.

person CommonsWare    schedule 20.03.2015