Android(安卓)Serivce 高级篇AIDL讲解
2.创建完毕后,刷新一下,可以在R.gen下面看到代理实现的Iperson.java文件
3.实现aidl接口,如IpersonImpl.java就是实现IPerson.aidl中的接口
4.使用Service将接口暴露给客户端调用。如下面的MyRemoteService.java
5.客户端调用这个接口,即可。
后记:后面会在两个应用程序之间进行数据调用。
packagecom.king.android.controls;
//IPerson接口
interfaceIPerson{
//设置年龄
voidsetAge(intage);
//设置姓名
voidsetName(Stringname);
//信息展示
Stringdisplay();
}
packagecom.king.android.controls;
importandroid.os.RemoteException;
/**
*描述:实现Iperson.aidl接口
*作者:Andy.Liu
*时间:2012-7-18下午10:44:27
**/
publicclassIPersonImplextendsIPerson.Stub{
privateintage;
privateStringname;
@Override
publicStringdisplay()throwsRemoteException{
return"name:"+name+";age="+age;
}
@Override
publicvoidsetAge(intage)throwsRemoteException{
this.age=age;
}
@Override
publicvoidsetName(Stringname)throwsRemoteException{
this.name=name;
}
}
packagecom.king.android.controls;
importandroid.app.Service;
importandroid.content.Intent;
importandroid.os.IBinder;
importcom.king.android.controls.IPerson.Stub;
/**
*描述:使用service将接口暴露给客户端
*作者:Andy.Liu
*时间:2012-7-18下午10:47:47
**/
publicclassMyRemoteServiceextendsService{
//声明Iperson接口
privateStubiPerson=newIPersonImpl();
@Override
publicIBinderonBind(Intentintent){
returniPerson;
}
}
packagecom.king.android.controls;
importcom.king.android.R;
importandroid.app.Activity;
importandroid.app.Service;
importandroid.content.ComponentName;
importandroid.content.Intent;
importandroid.content.ServiceConnection;
importandroid.os.Bundle;
importandroid.os.IBinder;
importandroid.os.RemoteException;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.Toast;
/**
*描述:测试Aidl
*作者:Andy.Liu
*时间:2012-7-18下午10:54:00
**/
publicclassMainActivityextendsActivity{
privatestaticfinalStringMY_SERVICE="com.king.android.controls.MY_REMOTE_SERVICE";//服务指定的动作
//声明IPerson接口
privateIPersoniPerson;
privateButtonbtn;
//实例化Serviceconnection
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn=(Button)findViewById(R.id.btn_voice);
btn.setVisibility(View.VISIBLE);
btn.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent();
intent.setAction(MY_SERVICE);
bindService(intent,conn,Service.BIND_AUTO_CREATE);
}
});
}
privateServiceConnectionconn=newServiceConnection(){
@Override
synchronizedpublicvoidonServiceConnected(ComponentNamename,IBinderservice){
iPerson=IPerson.Stub.asInterface(service);
if(null!=iPerson){
//RPC调用方法
try{
iPerson.setName("king.android.iphone");
iPerson.setAge(30);
Stringmsg=iPerson.display();
Toast.makeText(MainActivity.this,msg,Toast.LENGTH_LONG).show();
}catch(RemoteExceptione){
e.printStackTrace();
}
}
}
@Override
publicvoidonServiceDisconnected(ComponentNamename){
}
};
}
更多相关文章
- Webview 和js之间安全交互
- Android之Activity相关
- Android(安卓)Jni调用so库,加载库失败分析
- (转摘)Android腾讯微博客户端开发二:相关工具篇
- 跨进程调用Service(AIDL Service)
- (Android)react-native解决 ToastAndroid(安卓)不消失问题
- Android(安卓)Media Framework(3): Stagefright框架流程解读
- Android源码(9) --- Binder(3) AIDL使用
- Android源码分析之Framework的MediaPlayer