小菜毛毛技術分享

          與大家共同成長

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

          建立AIDL服務的步驟(3)

          (4)編寫一個MyService類,代碼如下:

          1. package net.blogjava.mobile.complex.type.aidl;  
          2.  
          3. import java.util.HashMap;  
          4. import java.util.Map;  
          5. import android.app.Service;  
          6. import android.content.Intent;  
          7. import android.os.IBinder;  
          8. import android.os.RemoteException;  
          9. //  AIDL服務類  
          10. public class MyService extends Service  
          11. {   
          12.     public class MyServiceImpl extends IMyService.Stub  
          13.     {  
          14.         @Override  
          15.         public Product getProduct() throws RemoteException  
          16.         {  
          17.             Product product = new Product();  
          18.             product.setId(1234);  
          19.             product.setName("汽車");  
          20.             product.setPrice(31000);   
          21.             return product;  
          22.         }  
          23.         @Override  
          24.         public Map getMap(String country, Product
            product) throws RemoteException  
          25.         {  
          26.             Map map = new HashMap<String, String>();  
          27.             map.put("country", country);  
          28.             map.put("id", product.getId());  
          29.             map.put("name", product.getName());  
          30.             map.put("price", product.getPrice());  
          31.             map.put("product", product);  
          32.             return map;  
          33.         }  
          34.     }  
          35.     @Override  
          36.     public IBinder onBind(Intent intent)  
          37.     {          
          38.         return new MyServiceImpl();  
          39.     }  

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

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

          在客戶端調用AIDL服務的方法與實例52介紹的方法相同,首先將IMyService.java和Product.java文件復制到客戶端工程(ch08_complextypeaidlclient),然后綁定AIDL服務,并獲得AIDL服務對象,最后調用AIDL服務中的方法。完整的客戶端代碼如下:

          1. package net.blogjava.mobile;  
          2.  
          3. import net.blogjava.mobile.complex.type.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.               //  獲得AIDL服務對象  
          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.complex.type.aidl.IMyService"),  
          44.                         serviceConnection, Context.BIND_AUTO_CREATE);  
          45.                 break;  
          46.             case R.id.btnInvokeAIDLService:  
          47.                 try  
          48.                 {  
          49.                     String s = "";  
          50.                        //  調用AIDL服務中的方法  
          51.                     s = "Product.id = " + myService.
            getProduct().getId() + "\n";  
          52.                     s += "Product.name = " + myService.
            getProduct().getName() + "
            \n";  
          53.                     s += "Product.price = " + myService.
            getProduct().getPrice() + "
            \n";              
          54.                     s += myService.getMap("China", 
            myService.getProduct()).toString();  
          55.                     textView.setText(s);  
          56.                 }  
          57.                 catch (Exception e)  
          58.                 {  
          59.                 }  
          60.                 break;  
          61.         }  
          62.     }  
          63.     @Override  
          64.     public void onCreate(Bundle savedInstanceState)  
          65.     {  
          66.         super.onCreate(savedInstanceState);  
          67.         setContentView(R.layout.main);  
          68.         btnInvokeAIDLService = (Button) findViewById(R.id.btnInvokeAIDLService);  
          69.         btnBindAIDLService = (Button) findViewById(R.id.btnBindAIDLService);  
          70.         btnInvokeAIDLService.setEnabled(false);  
          71.         textView = (TextView) findViewById(R.id.textview);  
          72.         btnInvokeAIDLService.setOnClickListener(this);  
          73.         btnBindAIDLService.setOnClickListener(this);  
          74.     }  

          首先運行服務端程序,然后運行客戶端程序,單擊【綁定AIDL服務】按鈕,待成功綁定后,單擊【調用AIDL服務】按鈕,會輸出如圖8.27所示的內容。

           
          圖8.27  調用傳遞復雜數據的AIDL服務

          posted on 2010-11-19 17:09 小菜毛毛 閱讀(277) 評論(0)  編輯  收藏 所屬分類: andriod
          主站蜘蛛池模板: 贺州市| 天津市| 五寨县| 大悟县| 揭东县| 东海县| 凤山市| 定陶县| 尼玛县| 舟曲县| 平潭县| 垫江县| 哈密市| 海门市| 金华市| 九江市| 赣榆县| 富锦市| 东宁县| 香河县| 鲜城| 洛隆县| 临邑县| 怀远县| 阿克| 达日县| 六安市| 博湖县| 江陵县| 秦皇岛市| 城口县| 唐山市| 东源县| 任丘市| 谷城县| 云南省| 松江区| 海安县| 铜陵市| 临朐县| 凤阳县|