Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 中級開發 >> 使用android中的AIDL讓Service與Activity通信-補充(activity調用service接口)

使用android中的AIDL讓Service與Activity通信-補充(activity調用service接口)

編輯:中級開發

前篇文章:使用android中的AIDL讓Service與Activity通信(service回調activity)介紹了通過一個回調方式調用service中的方法,其實不用那麼麻煩…只要注冊一個service,在service中的onBind方法中返回一個Bind即可.

例:在Activity中注冊service,通過點擊一個按鈕調用被注冊service中的方法.

代碼:
首先是AIDL:

  1. package com.zhang.test.service;
     

  2.  
  3. interface IService {
     
  4.         void printStr(String str);
     
  5. }
復制代碼

接下來Service:

  1. package com.zhang.test.service;
     

  2.  
  3. import android.app.Service;
     
  4. import android.content.Intent;
     
  5. import android.os.IBinder;
     
  6. import android.os.RemoteException;
     
  7. import android.util.Log;
     

  8.  
  9. public class MainService extends Service {
     

  10.  
  11.     private static final String TAG = "MainService";
     

  12.  
  13.     //在這裡聲明IService的Binder
     
  14.     private IService.Stub mBinder = new IService.Stub() {
     

  15.  
  16.         @Override
     
  17.         public void printStr(String str) throws RemoteException {
     
  18.             print(str);
     
  19.         }
     
  20.     };
     

  21.  
  22.     private void print(String str) {
     
  23.         Log.d(TAG, "str:" + str);
     
  24.     }
     

  25.  
  26.     @Override
     
  27.     public IBinder onBind(Intent intent) {
     
  28.         Log.d(TAG, "onBind");
     
  29.         return mBinder;
     
  30.     }
     

  31.  
  32.     @Override
     
  33.     public void onCreate() {
     
  34.         Log.d(TAG, "onCreate");
     
  35.         super.onCreate();
     
  36.     }
     

  37.  
  38.     @Override
     
  39.     public void onDestroy() {
     
  40.         super.onDestroy();
     
  41.     }
     
  42. }
復制代碼

Activity:

  1. package com.zhang.test;
     

  2.  
  3. import android.app.Activity;
     
  4. import android.content.ComponentName;
     
  5. import android.content.Context;
     
  6. import android.content.Intent;
     
  7. import android.content.ServiceConnection;
     
  8. import android.os.Bundle;
     
  9. import android.os.IBinder;
     
  10. import android.os.RemoteException;
     
  11. import android.util.Log;
     
  12. import android.view.VIEw;
     
  13. import android.view.VIEw.OnClickListener;
     
  14. import android.widget.Button;
     

  15.  
  16. import com.zhang.test.service.IService;
     
  17. import com.zhang.test.service.MainService;
     

  18.  
  19. public class MainActivity extends Activity {
     

  20.  
  21.     private static final String TAG = "MainActivity";
     

  22.  
  23.     private IService mService;
     

  24.  
  25.     private Button mButton;
     

  26.  
  27.     /** Called when the activity is first created. */
     
  28.     @Override
     
  29.     public void onCreate(Bundle savedInstanceState) {
     
  30.         super.onCreate(savedInstanceState);
     
  31.         setContentVIEw(R.layout.main);
     
  32.         Intent i = new Intent(this, MainService.class);
     
  33.         //綁定Service,需要一點時間去內存中查找這個service,因此不能在bindService後直接調用service的方法
     
  34.         bindService(i, mConnection, Context.BIND_AUTO_CREATE);
     

  35.  
  36.         mButton = (Button) findVIEwById(R.id.Button01);
     
  37.         mButton.setOnClickListener(new OnClickListener() {
     

  38.  
  39.             @Override
     
  40.             public void onClick(VIEw v) {
     
  41.                 if(mService != null) {
     
  42.                     try {
     
  43.                         mService.printStr("haha");
     
  44.                     } catch (RemoteException e) {
     
  45.                         Log.e(TAG, "", e);
     
  46.                     }
     
  47.                 }
     
  48.             }
     
  49.         });
     
  50.     }
     

  51.  
  52.     @Override
     
  53.     protected void onDestroy() {
     
  54.         unbindService(mConnection);
     
  55.         super.onDestroy();
     
  56.     }
     

  57.  
  58.     /**
     
  59.      * 注冊connection
     
  60.      */
     
  61.     private ServiceConnection mConnection = new ServiceConnection() {
     

  62.  
  63.         @Override
     
  64.         public void onServiceDisconnected(ComponentName name) {
     
  65.             Log.d(TAG, "onServiceDisconnected");
     
  66.             mService = null;
     
  67.         }
     

  68.  
  69.         @Override
     
  70.         public void onServiceConnected(ComponentName name, IBinder service) {
     
  71.             Log.d(TAG, "onServiceConnected");
     
  72.             mService = IService.Stub.asInterface(service);
     
  73.         }
     
  74.     };
     
  75. }
復制代碼

最後是Manifest:

  1. <manifest XMLns:android="http://schemas.android.com/apk/res/android" package="com.zhang.test" android:versioncode="1" android:versionname="1.0">
     
  2.     <application android:icon="@drawable/icon" android:label="@string/app_name">
     
  3.         <activity android:name=".MainActivity" android:label="@string/app_name">
     
  4.             <intent-filter>
     
  5.                 <action android:name="android.intent.action.MAIN">
     
  6.                 <category android:name="android.intent.category.LAUNCHER">
     
  7.             </category>
     
  8.         </action>
     
  9.                 <service android:name=".service.MainService">
     
  10.     </service>
     
  11.     <uses-sdk android:minsdkversion="3">
     

  12.  
  13. </uses-sdk>
     
  14. </intent-filter></activity></application></manifest>
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved