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

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

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

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

    與大家共同成長

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

    建立AIDL服務的步驟(1)

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

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

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

    (3)建立一個服務類(Service的子類)。

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

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

    實例52:建立AIDL服務

    AIDL服務工程目錄:src\ch08\ch08_aidl

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

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

    (1)建立一個aidl文件。在Java包目錄中建立一個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服務不支持的數(shù)據(jù)類型(例如,InputStream、OutputStream)等內(nèi)容。

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

    (3)編寫一個MyService類。MyService是Service的子類,在MyService類中定義了一個內(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.     }  

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

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

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

    (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服務的ID。

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

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

    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.             //  獲得服務對象  
    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服務  
    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)用服務端的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 小菜毛毛 閱讀(1149) 評論(0)  編輯  收藏 所屬分類: andriod
    主站蜘蛛池模板: 亚洲一区动漫卡通在线播放| 99re这里有免费视频精品| 亚洲AV综合色区无码二区偷拍 | 亚洲国产成人精品无码久久久久久综合 | 亚洲制服丝袜精品久久| 国产亚洲精品成人AA片新蒲金| 久久综合AV免费观看| 91老湿机福利免费体验| 九九99热免费最新版| 看一级毛片免费观看视频| 成人区精品一区二区不卡亚洲| 亚洲精品视频免费在线观看| 亚洲美女又黄又爽在线观看| www亚洲一级视频com| 国产无遮挡裸体免费视频 | 亚洲精品一品区二品区三品区| 国产免费一区二区三区VR| 岛国片在线免费观看| 最近中文字幕无吗免费高清| 成年人免费的视频| 91短视频免费在线观看| 100部毛片免费全部播放完整| 久久精品国产免费一区| 一个人看的www免费视频在线观看| 一级毛片不卡免费看老司机| 男人和女人高潮免费网站| 无码亚洲成a人在线观看| 亚洲成a人片在线不卡一二三区| 亚洲精品午夜国产va久久| 亚洲一区二区久久| 最新国产成人亚洲精品影院| 久久精品国产亚洲av麻豆图片| 亚洲一本之道高清乱码| 精品亚洲国产成人| 亚洲色大网站WWW永久网站| 亚洲欧美熟妇综合久久久久| 亚洲精品色播一区二区| 国产AV无码专区亚洲AV麻豆丫| 婷婷亚洲综合五月天小说在线| 另类专区另类专区亚洲| 一级毛片a女人刺激视频免费|