Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android手機 >> Android手機綜合 >> android studio如何創建AIDL服務文件

android studio如何創建AIDL服務文件

編輯:Android手機綜合

   android studio的AIDL服務是什麼

  為了使其他的應用程序也可以訪問本應用程序提供的服務,Android系統采用了遠程過程調用(Remote Procedure Call,RPC)方式來實現。與很多其他的基於RPC的解決方案一樣,Android使用一種接口定義語言(Interface Definition Language,IDL)來公開服務的接口。因此,可以將這種可以跨進程訪問的服務稱為AIDL(Android Interface Definition Language)服務。

  android studio創建AIDL服務文件具體步驟如下:

  1、要進行創建AIDL的接口之前,需要進行選中當前的項目的文件中,選中完成項目之後。

android studio如何創建AIDL服務文件 三聯

  2、然後進行點擊Android studio菜單中的“file”的選項,就會彈出了一個下拉的菜單中“new”選項。

android studio的aidl

  3、就會彈出了一個下一級的菜單中,進行選擇下一級菜單中的“AIDL”的選項。

android studio的aidl

  4、就會彈出了一個菜單中,進行點擊這個菜單中的“AIDL FILE”的選項。

android studio的aidl

  5、就會彈出了一個AIDL的窗口的選項,需要給接口進行添加名稱,在interface name的輸入框中進行輸入名稱,點擊”finish“的選項。

android studio的aidl

  6、然後在項目中進行天機了一個aidl的文件,在該文件下中,有一個aidl的後綴的文件,其實就是一個接口文件。

android studio的aidl

  實例:

  服務器端:

  本例中將建立一個簡單的AIDL服務。這個AIDL服務只有一個getValue方法,該方法返回一個String類型的值。在安裝完服務後,會在客戶端調用這個getValue方法,並將返回值在TextView組件中輸出。建立這個AIDL服務的步驟如下:

  (1)建立一個aidl文件。在Java包目錄中建立一個IMyService.aidl文件。IMyService.aidl文件的位置如圖所示。

  IMyService.aidl文件的內容如下:

  package cn.m9.mobile.aidl;

  interface IMyService {

  String getValue();

  }

  IMyService.aidl文件的內容與Java代碼非常相似,但要注意,不能加修飾符(例如,public、private)、AIDL服務不支持的數據類型(例如,InputStream、OutputStream)等內容。

  (2)如果IMyService.aidl文件中的內容輸入正確,ADT會自動生成一個IMyService.java文件。讀者一般並不需要關心這個文件的具體內容,也不需要維護這個文件。

  (3)編寫一個MyService類。MyService是Service的子類,在MyService類中定義了一個內嵌類(MyServiceImpl),該類是IMyService.Stub的子類。MyService類的代碼如下:

  package cn.m9.mobile.aidl;

  import android.app.Service;

  import android.content.Intent;

  import android.os.IBinder;

  public class MyService extends Service {

  public class MyServiceImpl extends IMyService.Stub {

  public String getValue()

  {

  return "Android is very powerful";

  }

  }

  @Override

  public IBinder onBind(Intent arg0) {

  // TODO Auto-generated method stub

  return new MyServiceImpl();

  }

  }

  在編寫上面代碼時要注意如下兩點:

  IMyService.Stub是根據IMyService.aidl文件自動生成的,一般並不需要管這個類的內容,只需要編寫一個繼承於IMyService.Stub類的子類(MyServiceImpl類)即可。

  onBind方法必須返回MyServiceImpl類的對象實例,否則客戶端無法獲得服務對象。

  (4)在AndroidManifest.xml文件中配置MyService類,代碼如下:

  其中"cn.m9.activity.IMyService"是客戶端用於訪問AIDL服務的ID。

  下面來編寫客戶端的調用代碼。首先新建一個Eclipse Android工程(TestAidlClient),並將自動生成的IMyService.java文件連同包目錄一起復制到 testAIDL_client工程的src目錄中(R文件除外).

  調用AIDL服務首先要綁定服務,然後才能獲得服務對象,代碼如下:

  package cn.m9.mobile;

  import cn.m9.mobile.R;

  import cn.m9.mobile.aidl.IMyService;

  import android.app.Activity;

  import android.content.ComponentName;

  import android.content.Context;

  import android.content.Intent;

  import android.content.ServiceConnection;

  import android.os.Bundle;

  import android.os.IBinder;

  import android.util.Log;

  import android.view.View;

  import android.view.View.OnClickListener;

  import android.widget.Button;

  import android.widget.TextView;

  public class TestAidlClient extends Activity implements OnClickListener {

  /** Called when the activity is first created. */

  private IMyService myService = null;

  private Button btnInvokeAIDLService;

  private Button btnBindAIDLService;

  private TextView textView;

  private static final String TAG="TestAIDLClient";

  private ServiceConnection serviceConnection = new ServiceConnection()

  {

  @Override

  public void onServiceConnected(ComponentName name, IBinder service) {

  // TODO Auto-generated method stub

  myService = IMyService.Stub.asInterface(service);

  btnInvokeAIDLService.setEnabled(true);

  }

  @Override

  public void onServiceDisconnected(ComponentName arg0) {

  // TODO Auto-generated method stub

  }

  };

  @Override

  public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  btnInvokeAIDLService = (Button) findViewById(R.id.btnInvokeAIDLService);

  btnBindAIDLService = (Button) findViewById(R.id.btnBindAIDLService);

  btnInvokeAIDLService.setEnabled(false);

  textView = (TextView) findViewById(R.id.textview);

  btnInvokeAIDLService.setOnClickListener(this);

  btnBindAIDLService.setOnClickListener(this);

  }

  @Override

  public void onClick(View view) {

  // TODO Auto-generated method stub

  switch (view.getId())

  {

  case R.id.btnBindAIDLService:

  //綁定AIDL服務

  bindService(new Intent("cn.m9.mobile.aidl.IMyService"), serviceConnection,Context.BIND_AUTO_CREATE);

  break;

  case R.id.btnInvokeAIDLService:

  try{

  textView.setText(myService.getValue());

  } catch (Exception e)

  {

  }

  break;

  }

  }

  }

  在編寫上面代碼時應注意如下兩點:

  使用bindService方法來綁定AIDL服務。其中需要使用Intent對象指定AIDL服務的ID,也就是標簽中android:name屬性的值。

  在綁定時需要一個ServiceConnection對象。創建ServiceConnection對象的過程中如果綁定成功,系統會調用onServiceConnected方法,通過該方法的service參數值可獲得AIDL服務對象。

  首先運行AIDL服務程序,然後運行客戶端程序,單擊【綁定AIDL服務】按鈕,如果綁定成功,【調用AIDL服務】按鈕會變為可選狀態,單擊這個按鈕,會輸出getValue方法的返回值.

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