歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android aidl實現兩個apk之間遠程調用Service

Android aidl實現兩個apk之間遠程調用Service

日期:2017/3/1 10:19:18   编辑:Linux編程

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. import android.app.Service;
  3. import android.content.Intent;
  4. import android.os.IBinder;
  5. import android.os.RemoteException;
  6. import android.util.Log;
  7. public class AidlService extends Service {
  8. private IAidlService.Stub mBinder = new IAidlService.Stub() {
  9. @Override
  10. public int getType() throws RemoteException {
  11. // TODO Auto-generated method stub
  12. return 5;
  13. }
  14. };
  15. private void Log(String str) {
  16. Log.d("AidlService", "------ " + str + "------");
  17. }
  18. @Override
  19. public void onCreate() {
  20. Log("service create");
  21. }
  22. @Override
  23. public void onStart(Intent intent, int startId) {
  24. Log("service start id=" + startId);
  25. }
  26. @Override
  27. public IBinder onBind(Intent t) {
  28. Log("service on bind");
  29. return mBinder;
  30. }
  31. @Override
  32. public void onDestroy() {
  33. Log("service on destroy");
  34. super.onDestroy();
  35. }
  36. @Override
  37. public boolean onUnbind(Intent intent) {
  38. Log("service on unbind");
  39. return super.onUnbind(intent);
  40. }
  41. public void onRebind(Intent intent) {
  42. Log("service on rebind");
  43. super.onRebind(intent);
  44. }
  45. }
Copyright © Linux教程網 All Rights Reserved