0

我需要Intent通过 AIDL 将对象传递给远程服务,我试过:

在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 传递到另一个进程中的服务?

4

1 回答 1

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()声明中,然后尝试一下。

于 2015-03-20T16:51:49.443 回答