说明:要使用AIDL 1.先创建一个aidl文件,如下面的IPerson.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){
}
};
}

更多相关文章

  1. Webview 和js之间安全交互
  2. Android之Activity相关
  3. Android(安卓)Jni调用so库,加载库失败分析
  4. (转摘)Android腾讯微博客户端开发二:相关工具篇
  5. 跨进程调用Service(AIDL Service)
  6. (Android)react-native解决 ToastAndroid(安卓)不消失问题
  7. Android(安卓)Media Framework(3): Stagefright框架流程解读
  8. Android源码(9) --- Binder(3) AIDL使用
  9. Android源码分析之Framework的MediaPlayer

随机推荐

  1. 玩Android的第一天
  2. android中定时开关机的实现
  3. Android学习心得之二——Android系统架构
  4. Android多线程AsyncTask详解
  5. android截屏代码实现方法
  6. 只会写xml和Activity,做android真的不行!
  7. 10个常见的 Android(安卓)新手误区
  8. Android之Android的数据存储--SD卡
  9. Android(安卓)sdk manager不能更新下载缓
  10. 【转官方】Android(安卓)ADB调试命令、支