當前位置: 移動互聯網學院 > Android開發 > AIDL跨進程訪問
          AIDL跨進程訪問 時間:2017-11-28     來源:移動互聯網學院

          aidl是android內部進程通信接口的描述語言,通過它我們可以定義進程間的通信接口,一種本地代碼技術

          創建AIDL服務與使用AIDL服務舉例,

          一、AIDL服務的項目圖

          實現的步驟為:

          1.創建IMyService.aidl文件,內容為

          package com.fs.aidl.service;

          interface IMyService

          {

              String getValue(String s);

          }

          該文件放入到com.fs.aidl.service文件夾后,會自動在gen下com.fs.aidl.service中生成IMyService.java文件

           

          2.創建MyService.java文件,內容為:

           package com.fs.aidl.service;

          import android.app.Service;

          import android.content.Intent;

          import android.os.IBinder;

          import android.os.RemoteException;

          public class MyService extends Service {

          public class MyServiceImpl extends IMyService.Stub {

          // @Override

          public String getValue(String s) throws RemoteException {

          //寫出自已的業務邏輯代碼

          return "華清遠見: "+s;

          }

          }

          @Override

          public IBinder onBind(Intent intent) {

          return new MyServiceImpl();

          }

          }

           

           

          3、AndroidManifest.xml內容為

          <?xml version="1.0" encoding="utf-8"?>

          <manifest xmlns:android="http://schemas.android.com/apk/res/android"

                package="com.fs.aidl.service"

                android:versionCode="1"

                android:versionName="1.0">

              <application android:icon="@drawable/icon" android:label="@string/app_name">

                  <activity android:name=".MainActivity"

                            android:label="@string/app_name">

                      <intent-filter>

                          <action android:name="android.intent.action.MAIN" />

                          <category android:name="android.intent.category.LAUNCHER" />

                      </intent-filter>

                  </activity>

                  <service android:name=".MyService" >

          <intent-filter> 

          <action android:name="com.fs.aidl.service.MyService" />

          </intent-filter>

          </service>

              </application>

              <uses-sdk android:minSdkVersion="4" />

           

          </manifest> 

           二、使用AIDL服務的項目圖

            

          1、android5_4aidlService項目中的MyService.java連同包一起復制出來粘貼在android5_4aidlClient項目中

          2、main.xml內容為

          <?xml version="1.0" encoding="utf-8"?>

          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

          android:orientation="vertical" android:layout_width="fill_parent"

          android:layout_height="fill_parent">

          <TextView android:id="@+id/textview" 

          android:textColor="#FFFF0000"

          android:layout_width="fill_parent"

          android:layout_height="wrap_content" android:textSize="36dp" />

          <Button android:id="@+id/btnBindAIDLService"

          android:layout_width="fill_parent" android:layout_height="wrap_content"

          android:text="綁定AIDL服務" android:layout_marginTop="10dp" />

          <Button android:id="@+id/btnInvokeAIDLService"

          android:layout_width="fill_parent" android:layout_height="wrap_content"

          android:text="調用AIDL服務" android:layout_marginTop="10dp" />

          </LinearLayout> 

          3、MainActivity的內容:

           package com.fs.aidl.client;

           

          import com.fs.aidl.service.IMyService;

           

          import android.app.Activity;

          import android.content.ComponentName;

          import android.content.Context;

          import android.content.Intent;

          import android.content.ServiceConnection;

          import android.os.Bundle;

          import android.os.IBinder;

          import android.view.View;

          import android.view.View.OnClickListener;

          import android.widget.Button;

          import android.widget.TextView;

          public class UserActivity extends Activity implements OnClickListener {

          private IMyService myService = null;

          private Button btnInvokeAIDLService;

          private Button btnBindAIDLService;

          private TextView textView;

          private ServiceConnection serviceConnection = new ServiceConnection() {

          // @Override

          public void onServiceConnected(ComponentName name, IBinder service) {

          myService = IMyService.Stub.asInterface(service);

          btnInvokeAIDLService.setEnabled(true);

          }

          // @Override

          public void onServiceDisconnected(ComponentName name) {

          }

          };

          // @Override

          public void onClick(View view) {

          switch (view.getId()) {

          case R.id.btnBindAIDLService:

          this.bindService(

          new Intent("com.fs.aidl.service.MyService"),

              serviceConnection, Context.BIND_AUTO_CREATE);

          break;

          case R.id.btnInvokeAIDLService:

          try {

          textView.setText(myService.getValue("xx"));

          } catch (Exception e) {

          }

          break;

          }

          }

          @Override

          public void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.main);

          btnInvokeAIDLService = (Button) findViewById(R.id.btnInvokeAIDLService);

          btnBindAIDLService = (Button) findViewById(R.id.btnBindAIDLService);

          btnInvokeAIDLService.setEnabled(false);

          textView = (TextView) findViewById(R.id.textview);

          btnInvokeAIDLService.setOnClickListener(this);

          btnBindAIDLService.setOnClickListener(this);

          }

          }

          三、測試過程

          1、安裝android5_4aidlService項目到手機中

          2、安裝并運行android5_4aidlClient項目

           3、定擊“綁定AIDL服務”按扭,得到圖

           4、點擊“調用AIDL服務”按鈕,得到圖

            

           四、完

          内蒙古十一选五软件