«

AIDL的简单使用

时间:2024-3-2 18:26     作者:韩俊     分类: Android


AIDL的简单使用

1 AIDL(Android Interface Definition Language):接口定义语言。
2 当需要在不同的进程之间传递对象时,比如在不同的应用之间传递对象的时候,就需要使用AIDL。
3 AID使得一个应用能够调用另一个应用的服务。

一、 服务端应用(其实就一个提供服务的应用)

1 创建AIDL文件

这里用的开发工具是Android Studio,在main文件夹下创建aidl文件夹,和java文件夹同级,在aidl文件夹中创建包,包名与应用包名必须一致,最后创建aidl文件:PeopleServiceAIDL.aidl

package com.miquan.demo;

// AIDL其实就是一个接口,定义了通讯的规则。
interface PeopleServiceAIDL {
    String findPeople(int num);
}

此时点击Android Studio菜单中的Build > Make Module xxx,然后就会生成一个对应的类了。具体位置:build > generated > source > aidl > debug > xxx

2 创建Service

PeopleService.java

package com.miquan.demo;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;

public class PeopleService extends Service {
    private IBinder mBinder = new PeopleServiceBinder();

    public PeopleService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    private final class PeopleServiceBinder extends PeopleServiceAIDL.Stub {
        @Override
        public String findPeople(int num) throws RemoteException {
            return num == 0 ? "王尼玛" : "唐马儒";
        }
    }
}

在清单文件中配置Service(用隐式启动):

<service android:name=".PeopleService">
    <intent-filter>
        <action android:name="com.miquan.demo.people.service"/>
    </intent-filter>
</service>

至此服务端完成了。

二、 客户端(调用端)

首先要以同样的方法创建aidl文件,或者复制过来,要对应的。

package com.miquan.as3;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.view.View;
import android.widget.Button;

import com.miquan.demo.PeopleServiceAIDL;

public class MainActivity extends Activity {
    private Button mButton;

    private PeopleServiceAIDL mPeopleServiceAIDL;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mButton = (Button) findViewById(R.id.button);

        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    // 这里得到的name就是从另外一个应用中的服务得到的
                    String name = mPeopleServiceAIDL.findPeople(0);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        });

        bindService(new Intent("com.miquan.demo.people.service"), mServiceConnection, BIND_AUTO_CREATE);
    }

    private ServiceConnection mServiceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mPeopleServiceAIDL = PeopleServiceAIDL.Stub.asInterface(service);
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mPeopleServiceAIDL = null;
        }
    };

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unbindService(mServiceConnection);
    }
}

标签: android

热门推荐