Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Framework:AIDL

Android Framework:AIDL

編輯:關於Android編程

AIDL(Android Interface Definition Language)
程序員可以利用AIDL來實現客戶端和服務端的之間實現通信(IPC)。
看看下面的例子。本例創建兩個apk應用,一個應用作為AIDL的服務提供方,而另外一個應用作為AIDL服務調用方。

AIDL服務提供方

首先進入服務提供方的工程,創建aidl文件。本例中,在com.myandroid.aidl包下定義了一個IMyService.aidl文件,它僅有一個接口helloAndroidAIDL,形參為String name,返回String對象。

package com.myandroid.aidl;
interface IMyService{
    String helloAndroidAIDL(String name);
}

開發插件安裝正確以及AIDL文件定義正確的情況下,ADT開發插件會在工程中gen目錄下創建對應的IMyService.java文件,其包路徑與AIDL文件定義的路徑一致,為com.myandroid.aidl。

接著實現helloAndroidAIDL接口的邏輯實現,在AIDL接口定義文件一致的包路徑com.myandroid.aidl下創建MyService類,繼承android.app.Service類,並有一個內部類實現了IMyService.Stub接口,具體代碼如下:

public class MyService extends Service{
    public class MyServiceImpl extends IMyService.Stub{
        @Override
        public String helloAndroidAIDL(String name) throws RemoteException {
            System.out.println("helloAndroidAIDL:"+name);
            return "AIDL MyService return value";
        }
    }
    @Override
    publicd IBinder onBind(Intent intent){//AIDL固定寫法
        return new MyServiceImpl();//返回IMyService.Stub子類對象
    }
}

實現MyService類後,還需要對此AIDL服務進行配置,以便Android平台能識別此服務。打開AndroidManifest.xml文件開始配置,在application節點裡加入如下xml配置信息。


    
        
    

到此運行apk的時候,服務提供方已經完成。很簡單。

AIDL服務調用方

生成一個AIDL服務端apk工程。然後按以下步驟實現AIDL服務調用方。
步驟1: 將AIDL服務端生成的Java文件 com/myandroid/aidl/IMyService.java復制到本工程,盡量不要改變其包路徑和文件名,這樣客戶端也就知道服務端具有什麼樣的能力,即AIDL服務端的接口定義
步驟2:編寫代碼綁定服務,獲取AIDL服務對象
步驟3:通過AIDL服務對象完成AIDL接口調用。

首先在需要調用Activity中定義IMyService myService服務調用對象,然後創建serviceConnection對象,服務綁定相關代碼如下:

private ServiceConnection serviceConnection = new ServiceConnection(){
    public void onServiceConnected(ComponentName name,IBinder service) {
        myService = IMyService.Stub.asInterface(service);   
        button2.setEnabled(true);
    }
    public void onServiceDisconnected(ComponentName name){
    }
}
//綁定服務,此代碼可放入特定事件或一些觸發事件
Intent intent = new Intent("com.myandroid.aidl.IMyService");
bindService(intent, serviceConnection,Context.BIND_AUTO_CREATE);

AIDL服務調用代碼如下:

String msg = myService.helloAndroidAIDL("Other Application");
Toast toast = Toast.makeText(AidlClient.this,msg,Toast.LENGTH_SHOT);
toast.show();

調用服務端的helloAndroidAIDL方法,服務端會打印出”helloAndroidAIDL:Other Application”日志,調用端通過Toast顯示服務端返回String,其內容為”AIDL MyService return value”。這樣,AIDL服務端和客戶端完成了完整交互流程。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved