Android aidl实现两个apk之间远程调用Service


Aidl,Android平台的IPC方式之一,基于系统的Ibinder机制。

网上大多数例子都是在一个apk下来测试调用service,现在我在两个project下面来调用。

一个是server project,一个是client project

首先我们建立的是server project,这里面要实现aidl文件和一个service,activity只是用来启动service的,当然,你也可以通过发广播的形式来启动service。

首先看IAidlService.aidl文件:

  1. package com.ds.server;   
  2. interface IAidlService {     
  3.     int getType();    
  4. }    

这样在eclipse里面自动编译的时候会在gen下面生成IAidlService.java文件(灯下我们的client project要用)。
然后新建一个service,这个service里面has a IAidlService的stub对象,service具体代码如下:

  1. package com.ds.server;   
  2.   
  3. import android.app.Service;   
  4. import android.content.Intent;   
  5. import android.os.IBinder;   
  6. import android.os.RemoteException;   
  7. import android.util.Log;   
  8.   
  9. public class AidlService extends Service {   
  10.   
  11.     private IAidlService.Stub mBinder = new IAidlService.Stub() {   
  12.   
  13.         @Override  
  14.         public int getType() throws RemoteException {   
  15.             // TODO Auto-generated method stub   
  16.             return 5;   
  17.         }   
  18.     };   
  19.   
  20.     private void Log(String str) {    
  21.         Log.d("AidlService""------ " + str + "------");   
  22.     }   
  23.   
  24.     @Override  
  25.     public void onCreate() {   
  26.         Log("service create");      
  27.     }   
  28.   
  29.     @Override  
  30.     public void onStart(Intent intent, int startId) {   
  31.         Log("service start id=" + startId);   
  32.     }   
  33.   
  34.     @Override  
  35.     public IBinder onBind(Intent t) {   
  36.         Log("service on bind");   
  37.         return mBinder;   
  38.     }   
  39.   
  40.     @Override  
  41.     public void onDestroy() {   
  42.         Log("service on destroy");   
  43.         super.onDestroy();   
  44.     }   
  45.   
  46.     @Override  
  47.     public boolean onUnbind(Intent intent) {   
  48.         Log("service on unbind");   
  49.         return super.onUnbind(intent);   
  50.     }   
  51.   
  52.     public void onRebind(Intent intent) {   
  53.         Log("service on rebind");   
  54.         super.onRebind(intent);   
  55.     }   
  56.   
  57. }  
  • 1
  • 2
  • 3
  • 下一页

相关内容