什么是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);<------实例化服务
  }
 };

懒了,不想写了,直接贴代码了。

新手刚学,只是当做自己的笔记了,表喷我

posted on 2012-08-13 10:57  笨 鸟  阅读(185)  评论(0)    收藏  举报