6

我正在尝试将 android.content.Context 导入 AIDL 文件,但 eclipse 无法识别它。

这是我的代码:

package nsip.net;

import android.content.Context; // error couldn't find import for class ...

interface IMyContactsService{

void printToast(Context context, String text);

}

谁能帮我?

4

1 回答 1

8

usingandroid.content.Context不会起作用,因为它没有实现android.os.Parcelable.

但是-如果您有一个MyExampleParcelable要在 AIDL 接口中传输的类(例如)(实际上实现Parcelable了),则可以创建一个.aidl文件,MyExampleParcelable.aidl在其中编写:

package the.package.where.the.class.is;

parcelable MyExampleParcelable;


现在,除非您非常想跨流程交谈,否则您应该考虑本地服务。

编辑(稍微更有帮助):

这是一个本地服务(即它只会在您自己的应用程序和进程中使用)?在这些情况下,通常最好实现一个活页夹并直接返回它。

public class SomeService extends Service {
    ....
    ....
    public class SomeServiceBinder extends Binder {
        public SomeService getSomeService() {
            return SomeService.this;
        }
    }

    private final IBinder mBinder = new SomeServiceBinder();

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    public void printToast(Context context, String text) {
        // Why are you even passing Context here? A Service can create Toasts by it self.
        ....
        ....
    }
    // And all other methods you want the caller to be able to invoke on
    // your service.
}

基本上,当Activity绑定到您的服务时,它只会将结果IBinder转换为SomeService.SomeServiceBinder、 call SomeService.SomeServiceBinder#getSomeService()- 和bang,访问正在运行的Service实例 + 您可以在其 API 中调用内容。

于 2012-05-24T13:06:42.360 回答