什么是aidl:aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口
icp:interprocess communication :内部进程通信
简单来说,就是两个独立的app之间的通信
不说了,上hello_word
首先:在某某包里创建一个文件,后缀是.aidl,我个人比较先写好了,直接复制进去,因为那是纯文本嘛,怕出现一些单词错误,注意,接口里的方法不能有修饰符,不然会报错的
结构就是酱紫的,然后再创建一个类来实现刚才生成的接口,我这里为了测试方便,直接创建了一个services,代码如下,很少的
我是为了测试直接返回的字符串。最后一定要在AndroidManifest里面加配置,不然找不到的
<service android:name=".StartServices" android:process=":remote">
<intent-filter>
<!-- AIDL完整路径名。必须指明,客户端能够通过AIDL类名查找到它的实现类 --> <---这里可以随便写,所以我写了.aa,目的就是知道可以随便写,不过还是规矩点好
<action android:name="com.aidl.test.IServices.aa" />
</intent-filter>
ok,服务ok了
接着是客户端:先把服务端的aidl文件,连带包,一起拷过来,结构对比如下
一切ok后,我们实现客户端的接口
private IServices SERVICES;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent=new Intent(IServices.class.getName());//<---这里就是刚才我们服务端配置文件里起的名字,当然,这是个string参数,可以直接写死
bindService(intent, services, BIND_AUTO_CREATE);//<-----这是根据地址绑定服务
try {
if(SERVICES!=null){
Log.d("SERVICES", SERVICES.getStr());}<------获取实例了
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
private ServiceConnection services=new ServiceConnection() {
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
SERVICES=null;
}
public void onServiceConnected(ComponentName name, IBinder service) {
SERVICES=IServices.Stub.asInterface(service);<------实例化服务
}
};
懒了,不想写了,直接贴代码了。
新手刚学,只是当做自己的笔记了,表喷我
浙公网安备 33010602011771号