編輯:更多教程
android studio的AIDL服務是什麼
為了使其他的應用程序也可以訪問本應用程序提供的服務,Android系統采用了遠程過程調用(Remote Procedure Call,RPC)方式來實現。與很多其他的基於RPC的解決方案一樣,Android使用一種接口定義語言(Interface Definition Language,IDL)來公開服務的接口。因此,可以將這種可以跨進程訪問的服務稱為AIDL(Android Interface Definition Language)服務。
android studio創建AIDL服務文件具體步驟如下:
1、要進行創建AIDL的接口之前,需要進行選中當前的項目的文件中,選中完成項目之後。
2、然後進行點擊Android studio菜單中的“file”的選項,就會彈出了一個下拉的菜單中“new”選項。
3、就會彈出了一個下一級的菜單中,進行選擇下一級菜單中的“AIDL”的選項。
4、就會彈出了一個菜單中,進行點擊這個菜單中的“AIDL FILE”的選項。
5、就會彈出了一個AIDL的窗口的選項,需要給接口進行添加名稱,在interface name的輸入框中進行輸入名稱,點擊”finish“的選項。
6、然後在項目中進行天機了一個aidl的文件,在該文件下中,有一個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方法的返回值.
和之前曝光的圖片以及產品信息基本相同,R9s在保持了和R9大致形同的外觀設計外,在一些細節處進行了更新。原來背部的白色天線條被三條0.3毫米的微縫替代,保證了觀感上的完整
小米手機自推出以後,受到了廣泛關注,出色的配置和瘋狂的價格讓小米手機一度成為了最具有話題性的手機。小米手機所標榜的是發燒友手機,而作為發燒友最為迷戀的刷機方面,小米手機表
首頁畫面 從首頁畫面開始使用您電話上的各種應用程式。您還可以根據偏好來自訂首頁畫面,在畫面上顯示應用程式圖示、捷徑、資料夾和小工具。 提示在任何應用程式中按下首頁即可
z4root一鍵安全root是一款強大的安全軟件,是來自國外android高級論壇xda-developer上的一位加拿大開發者開發的。z4root相當強