編輯: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的接口之前,需要進行選中當前的項目的文件中,選中完成項目之後。
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方法的返回值.
備受期待的12306手機訂票客戶端終於正式上線了!此次不同於以往的偷跑,是鐵路12306.cn官方網站公布的正式上線!還支持車次選擇,席別選擇哦!支持安卓及iOS雙平台下
Color OS 2.0整體風格依然明亮華麗,並提供了大量的特效。相比1.0版本,最大的升級當屬取消了“應用程序界面”,全部程序
北京時間2012年3月7日凌晨消息,谷歌將把其出售應用(Android Market)、視頻(Google Play Movies)、音樂(Google
Moto G是摩托羅拉推出的一款主打中低端智能機型,如果你不喜歡Moto G定制版,也可以選擇谷歌原生版的Moto G,繼Galaxy S4、HTC One等