android aidl导入

时间:2012-05-24 12:55:47

标签: android import aidl

我正在尝试将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);

}

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:7)

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

但是 - 如果您要在AIDL界面中传输一个类(例如MyExampleParcelable)(&实际实现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,调用SomeService.SomeServiceBinder#getSomeService() - 并且 爆炸 ,访问正在运行的Service实例+您可以在其API中调用内容。