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

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

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

    小菜毛毛技術分享

    與大家共同成長

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      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的內容。

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

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

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

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

    實例52:建立AIDL服務

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

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

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

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

      
    圖8.24  IMyService.aidl文件的位置
    IMyService.aidl文件的內容如下:
    1. package net.blogjava.mobile.aidl;  
    2. interface IMyService  
    3. {  
    4.     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類的代碼如下:

    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開發講義";  
    16.         }  
    17.     }  
    18.     @Override  
    19.     public IBinder onBind(Intent intent)  
    20.     {          
    21.         return new MyServiceImpl();  
    22.     }  

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

    IMyService.Stub是根據IMyService.aidl文件自動生成的,一般并不需要管這個類的內容,只需要編寫一個繼承于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。

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

      
    圖8.25  IMyService.java文件
    在ch08_aidlclient工程中的位置
    調用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());     //  調用服務端的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 小菜毛毛 閱讀(1150) 評論(0)  編輯  收藏 所屬分類: andriod
    主站蜘蛛池模板: 亚洲色图视频在线观看| 伊人久久大香线蕉亚洲五月天| 亚洲综合综合在线| 秋霞人成在线观看免费视频| 亚洲一区二区三区在线观看精品中文 | 亚洲尤码不卡AV麻豆| 精品免费久久久久国产一区 | 天天操夜夜操免费视频| 亚洲日韩一区二区三区| 日韩免费视频在线观看| 精品久久久久久亚洲中文字幕| 在线观看国产情趣免费视频| 香蕉视频在线观看免费| 亚洲色偷偷狠狠综合网| 日韩免费高清播放器| 久久精品国产亚洲夜色AV网站| 99re在线精品视频免费| 亚洲偷自精品三十六区| 国产一区二区三区免费看| 国产精品综合专区中文字幕免费播放| 亚洲无人区午夜福利码高清完整版| 久久er国产精品免费观看2| 亚洲综合在线成人一区| 日美韩电影免费看| 中文字幕永久免费| 亚洲性色成人av天堂| 免费看一级做a爰片久久| 你是我的城池营垒免费观看完整版| 亚洲永久永久永久永久永久精品| 久久久久国色AV免费观看性色| 黄色免费网址大全| 亚洲尹人九九大色香蕉网站| 日韩成人免费aa在线看| 永久在线观看免费视频| 亚洲中字慕日产2020| 国产成人99久久亚洲综合精品| 久久精品国产免费观看| 免费无码午夜福利片69| 亚洲酒色1314狠狠做| 一级毛片直播亚洲| 国产精品爱啪在线线免费观看|