<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小菜毛毛技術(shù)分享

    與大家共同成長(zhǎng)

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks
    http://book.51cto.com/art/201006/207070.htm

    建立AIDL服務(wù)的步驟(1)

    建立AIDL服務(wù)要比建立普通的服務(wù)復(fù)雜一些,具體步驟如下:

    (1)在Eclipse Android工程的Java包目錄中建立一個(gè)擴(kuò)展名為aidl的文件。該文件的語法類似于Java代碼,但會(huì)稍有不同。詳細(xì)介紹見實(shí)例52的內(nèi)容。

    (2)如果aidl文件的內(nèi)容是正確的,ADT會(huì)自動(dòng)生成一個(gè)Java接口文件(*.java)。

    (3)建立一個(gè)服務(wù)類(Service的子類)。

    (4)實(shí)現(xiàn)由aidl文件生成的Java接口。

    (5)在AndroidManifest.xml文件中配置AIDL服務(wù),尤其要注意的是,<action>標(biāo)簽中android:name的屬性值就是客戶端要引用該服務(wù)的ID,也就是Intent類的參數(shù)值。這一點(diǎn)將在實(shí)例52和實(shí)例53中看到。

    實(shí)例52:建立AIDL服務(wù)

    AIDL服務(wù)工程目錄:src\ch08\ch08_aidl

    客戶端程序工程目錄:src\ch08\ch08_aidlclient

    本例中將建立一個(gè)簡(jiǎn)單的AIDL服務(wù)。這個(gè)AIDL服務(wù)只有一個(gè)getValue方法,該方法返回一個(gè)String類型的值。在安裝完服務(wù)后,會(huì)在客戶端調(diào)用這個(gè)getValue方法,并將返回值在TextView組件中輸出。建立這個(gè)AIDL服務(wù)的步驟如下:

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

      
    圖8.24  IMyService.aidl文件的位置
    IMyService.aidl文件的內(nèi)容如下:
    1. package net.blogjava.mobile.aidl;  
    2. interface IMyService  
    3. {  
    4.     String getValue();  

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

    (2)如果IMyService.aidl文件中的內(nèi)容輸入正確,ADT會(huì)自動(dòng)生成一個(gè)IMyService.java文件。讀者一般并不需要關(guān)心這個(gè)文件的具體內(nèi)容,也不需要維護(hù)這個(gè)文件。關(guān)于該文件的具體內(nèi)容,讀者可以查看本節(jié)提供的源代碼。

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

    1. package net.blogjava.mobile.aidl;  
    2.  
    3. import android.app.Service;  
    4. import android.content.Intent;  
    5. import android.os.IBinder;  
    6. import android.os.RemoteException;  
    7.  
    8. public class MyService extends Service  
    9. {   
    10.     public class MyServiceImpl extends IMyService.Stub  
    11.     {  
    12.         @Override  
    13.         public String getValue() throws RemoteException  
    14.         {  
    15.             return "Android/OPhone開發(fā)講義";  
    16.         }  
    17.     }  
    18.     @Override  
    19.     public IBinder onBind(Intent intent)  
    20.     {          
    21.         return new MyServiceImpl();  
    22.     }  

    在編寫上面代碼時(shí)要注意如下兩點(diǎn):

    IMyService.Stub是根據(jù)IMyService.aidl文件自動(dòng)生成的,一般并不需要管這個(gè)類的內(nèi)容,只需要編寫一個(gè)繼承于IMyService.Stub類的子類(MyServiceImpl類)即可。

    onBind方法必須返回MyServiceImpl類的對(duì)象實(shí)例,否則客戶端無法獲得服務(wù)對(duì)象。

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

    1. <service android:name=".MyService" > 
    2.     <intent-filter>   
    3.         <action android:name="net.blogjava.mobile.aidl.IMyService" /> 
    4.     </intent-filter> 
    5. </service> 

    其中"net.blogjava.mobile.aidl.IMyService"是客戶端用于訪問AIDL服務(wù)的ID。

    下面來編寫客戶端的調(diào)用代碼。首先新建一個(gè)Eclipse Android工程(ch08_aidlclient),并將自動(dòng)生成的IMyService.java文件連同包目錄一起復(fù)制到ch08_aidlclient工程的src目錄中,如圖8.25所示。

      
    圖8.25  IMyService.java文件
    在ch08_aidlclient工程中的位置
    調(diào)用AIDL服務(wù)首先要綁定服務(wù),然后才能獲得服務(wù)對(duì)象,代碼如下:

    1. package net.blogjava.mobile;  
    2.  
    3. import net.blogjava.mobile.aidl.IMyService;  
    4. import android.app.Activity;  
    5. import android.content.ComponentName;  
    6. import android.content.Context;  
    7. import android.content.Intent;  
    8. import android.content.ServiceConnection;  
    9. import android.os.Bundle;  
    10. import android.os.IBinder;  
    11. import android.view.View;  
    12. import android.view.View.OnClickListener;  
    13. import android.widget.Button;  
    14. import android.widget.TextView;  
    15.  
    16. public class Main extends Activity implements OnClickListener  
    17. {  
    18.     private IMyService myService = null;  
    19.     private Button btnInvokeAIDLService;  
    20.     private Button btnBindAIDLService;   
    21.     private TextView textView;  
    22.     private ServiceConnection serviceConnection = 
      new ServiceConnection()  
    23.     {  
    24.         @Override  
    25.         public void onServiceConnected(ComponentName 
      name, IBinder service)  
    26.         {  
    27.             //  獲得服務(wù)對(duì)象  
    28.             myService = IMyService.Stub.asInterface(service);  
    29.             btnInvokeAIDLService.setEnabled(true);  
    30.         }  
    31.         @Override  
    32.         public void onServiceDisconnected(ComponentName name)  
    33.         {  
    34.         }  
    35.     };  
    36.     @Override  
    37.     public void onClick(View view)  
    38.     {  
    39.         switch (view.getId())  
    40.         {  
    41.             case R.id.btnBindAIDLService:  
    42.                 //  綁定AIDL服務(wù)  
    43.                 bindService(new Intent("net.blogjava.
      mobile.aidl.IMyService"),  
    44.                         serviceConnection, Context.BIND_AUTO_CREATE);  
    45.                 break;  
    46.             case R.id.btnInvokeAIDLService:  
    47.                 try  
    48.                 {  
    49.                     textView.setText(myService.
      getValue());     //  調(diào)用服務(wù)端的getValue方法  
    50.                 }  
    51.                 catch (Exception e)  
    52.                 {  
    53.                 }  
    54.                 break;  
    55.         }  
    56.     }  
    57.     @Override  
    58.     public void onCreate(Bundle savedInstanceState)  
    59.     {  
    60.         super.onCreate(savedInstanceState);  
    61.         setContentView(R.layout.main);  
    62.         btnInvokeAIDLService = (Button) findViewById
      (R.id.btnInvokeAIDLService);  
    63.         btnBindAIDLService = (Button) findViewById
      (R.id.btnBindAIDLService);  
    64.         btnInvokeAIDLService.setEnabled(false);  
    65.         textView = (TextView) findViewById(R.id.textview);  
    66.         btnInvokeAIDLService.setOnClickListener(this);  
    67.         btnBindAIDLService.setOnClickListener(this);  
    68.     }  
    posted on 2010-11-19 16:56 小菜毛毛 閱讀(1154) 評(píng)論(0)  編輯  收藏 所屬分類: andriod
    主站蜘蛛池模板: 免费看AV毛片一区二区三区| 亚洲乱码中文字幕综合234 | 亚洲xxxx视频| 国产一级淫片免费播放| 亚洲免费无码在线| 亚洲小说区图片区| 免费一级毛片不卡不收费| 一区二区免费视频| 亚洲av成人无码网站…| 亚洲女久久久噜噜噜熟女| 在线视频观看免费视频18| jizz在线免费观看| 精品国产日韩久久亚洲| 亚洲一区二区三区自拍公司| 91麻豆最新在线人成免费观看 | a级毛片无码免费真人| 一区二区三区免费在线视频| 亚洲精品无码久久久久久久| 免费v片在线观看品善网| 91香焦国产线观看看免费| 免费看美女午夜大片| 亚洲国产美女福利直播秀一区二区| 国产传媒在线观看视频免费观看 | 免费人成网站在线观看不卡| 亚洲日韩AV一区二区三区四区 | 国产乱码免费卡1卡二卡3卡| 香蕉免费一级视频在线观看| 亚洲另类无码专区丝袜| 久久久久无码精品亚洲日韩 | 成年女人色毛片免费看| 久久这里只精品热免费99| 色屁屁在线观看视频免费| 2017亚洲男人天堂一| 亚洲av午夜福利精品一区| 九月婷婷亚洲综合在线| 欧美a级成人网站免费| 8x网站免费入口在线观看| a级日本高清免费看| 特黄aa级毛片免费视频播放| 亚洲熟女综合色一区二区三区| 亚洲国产人成在线观看69网站 |