編輯:關於Android編程
AIDL(Android Interface Definition Language)
程序員可以利用AIDL來實現客戶端和服務端的之間實現通信(IPC)。
看看下面的例子。本例創建兩個apk應用,一個應用作為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服務端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服務端和客戶端完成了完整交互流程。
大家現在聊天文字已經不足以表達內心情緒了,所以有了表情包,而且現在的QQ裡面出來了厘米秀,表情就更多了,不僅有動態gif,還有聲音呢,自帶bgm,下面小編就
main.xml代碼如下: .java 代碼如下: package org.lxh.demo; import and
什麼是AlarmManager? AlarmManager是Android中常用的一種系統級別的提示服務,在特定的時刻為我們廣播一個指定的Intent。簡單
打開/dev/graphics/fb0節點的過程:打開/dev/graphics/fb0這個設備的調用過程如下:1.在HWComposer中,加載moduleHWComp