您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Android中AIDL如何使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1.在項目包下新建一個IInfo.aidl,并在其中添加你要調用的方法,格式和java中接口一樣。package com.android.server;
interface IInfo { boolean start(); void stop(); void locate(int x, int y); void move(int dx, int dy); void getLocation(inout int[] p);//參數為數組的話,可以加上inout,不然會報錯 void setTimeout(int t); int getTimeout(); void setBitmap(inout byte[] bmp, int width, int height);}
正確寫好之后,eclipse的adt會自動在gen目錄下生成一個IInfo.java文件
2.新建一個CursorService.java類,繼承IInfo.stub,如下:
package com.android.server; public class CursorService extends ICursorInfo.Stub{ final boolean hasService; public CursorService() { hasService = initializeJNI(); } public synchronized boolean start() { if (hasService) return start0(); return false; } public synchronized void stop() { if (hasService) stop0(); } public synchronized void locate(int x, int y) { if (hasService) locate0(x, y); } public synchronized void move(int dx, int dy) { if (hasService) move0(dx, dy); } public synchronized void getLocation(int[] p) { if (p == null) throw new NullPointerException("p is null"); if (p.length < 2) throw new IllegalArgumentException("p.len must >= 2"); if (hasService) getPosition0(p); } public synchronized void setTimeout(int t) { if (hasService) setTimeout0(t); } public synchronized int getTimeout() { if (hasService) return getTimeout0(); return -1; } public void setBitmap(byte[] bmp, int width, int height) { if(bmp == null) throw new NullPointerException("bmp is null"); if(width < 0 || height < 0) throw new IllegalArgumentException("width < 0 || height < 0"); if(width * height > bmp.length) throw new IndexOutOfBoundsException("bmp less than width*height"); setBitmap0(bmp,width,height); }
在其中實現你aAIDL中的方法
3. 新建一個Manager類,在其中構造一個內部服務連接類,實現ServiceConnection接口:
public class Manager { private static final String TAG = "Manager"; private IInfo iCurSer; private Manager(){ } public Manager(Context ctx){ this.context = ctx; new Manager(); } /**這里就可以與service正常通信,調用service中的方法**/ public void startService(){ Intent intent=new Intent("com.android.server.CursorService"); context.bindService(intent,new CursorServiceConnection(), Service.BIND_AUTO_CREATE); } /** * 實現ServiceConnection接口 * */ public final class CursorServiceConnection implements ServiceConnection{ // 和CursorService綁定時系統回調這個方法 @Override public void onServiceConnected(ComponentName name, IBinder service) { // 此處不能使用強制轉換, 應該調用Stub類的靜態方法獲得CursorService接口的實例對象 iCurSer=ICursorInfo.Stub.asInterface(service); } //解除和CursorService的綁定時系統回調這個方法 @Override public void onServiceDisconnected(ComponentName name) { iCurSer=null; } } }
上述就是小編為大家分享的Android中AIDL如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。