我正在尝试将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);
}
任何人都可以帮助我吗?
答案 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中调用内容。