aidl 客户端和服务端的使用

这里创建了3个项目:

客户端:  https://github.com/july1992/aidl_client

服务端:   https://github.com/july1992/aidl_service

aidl接口端 :  https://github.com/july1992/aidl_myaidl

( . 将aidl接口抽取出来,打成jar 包,被客户端和服务端分别引用)

 

1:aidl 接口端

         a:  aaaa.aidl 是为了引用bean目录下的文件

// aaaa.aidl
package com.vily.aidl_service.bean;
import com.vily.aidl_service.bean.Person;
parcelable Person;

interface aaaa {

}

       b: 真正的接口aidl文件

// VilyServiceAidl.aidl
package com.vily.aidl_service;
import com.vily.aidl_service.bean.aaaa;

interface VilyServiceAidl {
        int addNumbers(int num1, int num2);//2 argument method to add
        List<String> getStringList();
        List<Person> getPersonList();
}

        c:  创建service,实现VilyServiceAidl.aidl 的方法

package com.vily.aidl_service;

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

import com.vily.aidl_service.bean.Person;

import java.util.ArrayList;
import java.util.List;


/**
 *  * description : 
 *  * Author : Vily
 *  * Date : 2019-11-11
 *  
 **/
public class VilyService extends Service {


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

    private final VilyServiceAidl.Stub mBinder=new VilyServiceAidl.Stub() {
        @Override
        public int addNumbers(int num1, int num2) throws RemoteException {
            return num1+num2;
        }

        @Override
        public List<String> getStringList() throws RemoteException {
            List<String> objects = new ArrayList<>();
            objects.add("asdada");
            objects.add("fffff");
            objects.add("ttttt");
            return objects;
        }

        @Override
        public List<Person> getPersonList() throws RemoteException {
            List<Person> list=new ArrayList<>();
            list.add(new Person("aaaa",12));
            list.add(new Person("bbbbb",25));
            list.add(new Person("xcccc",5));
            list.add(new Person("yyyy",66));
            return list;
        }

    };

}

      d:  person

package com.vily.aidl_myaidl.bean;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by chintan.desai on 29-01-2018.
 */
public class Person implements Parcelable {
    public String name;
    public int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    protected Person(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    public static final Creator<Person> CREATOR = new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel in) {
            return new Person(in);
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(name);
        parcel.writeInt(age);
    }



    public void readFromParcel(Parcel reply) {
        this.name = reply.readString();
        this.age=reply.readInt();

    }



}

2 : 服务端     e: 切记在清单文件中开放远程访问权限  , 然后将上面aidl接口端打成jar 包,引入在服务端

       <service android:name=".VilyService"
            android:process=":remote"
            android:exported="true"/>

      a : service

package com.vily.aidl_service;

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

import com.vily.aidl_myaidl.VilyServiceAidl;
import com.vily.aidl_myaidl.bean.Person;


import java.util.ArrayList;
import java.util.List;


/**
 *  * description : 
 *  * Author : Vily
 *  * Date : 2019-11-11
 *  
 **/
public class VilyService extends Service {


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

    private final VilyServiceAidl.Stub mBinder=new VilyServiceAidl.Stub() {
        @Override
        public int addNumbers(int num1, int num2) throws RemoteException {
            return num1+num2;
        }

        @Override
        public List<String> getStringList() throws RemoteException {
            List<String> objects = new ArrayList<>();
            objects.add("asdada");
            objects.add("fffff");
            objects.add("ttttt");
            return objects;
        }

        @Override
        public List<Person> getPersonList() throws RemoteException {
            List<Person> list=new ArrayList<>();
            list.add(new Person("aaaa",12));
            list.add(new Person("bbbbb",25));
            list.add(new Person("xcccc",5));
            list.add(new Person("yyyy",66));
            return list;
        }

    };

}

3:  客户端   , 引入aidl 接口端打成的jar 包 

    a:   绑定 service


        Intent intent = new Intent();
        ComponentName cn = new ComponentName("com.vily.aidl_service", "com.vily.aidl_service.VilyService");
        intent.setComponent(cn);
        intent.setPackage("com.vily.aidl_service");
        intent.setAction("com.vily.aidl_service.VilyService");
        bindService(intent, mServiceConnection, Service.BIND_AUTO_CREATE);

   b: mServiceConnect 


    private VilyServiceAidl mService;
    private ServiceConnection mServiceConnection = new ServiceConnection() {
        public void onServiceDisconnected(ComponentName name) {
               mService = null;
            Log.i(TAG, "onServiceDisconnected: ----绑定失败");
        }

        public void onServiceConnected(ComponentName name, IBinder service) {
            Log.i(TAG, "onServiceConnected: -----service connect success");
            mService = VilyServiceAidl.Stub.asInterface(service);

        }
    };

c:  客户端调用服务端


    private void initListener() {
        mBtn_add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if(mService==null){
                    Log.i(TAG, "onClick: -----kong");
                    return;
                }
                try {
                    int sum = mService.addNumbers(StringUtis.toInt(mEt_a.getText().toString()), StringUtis.toInt(mEt_b.getText().toString()));
                    mTv_value.setText(sum+"");

                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        });

        mBtn_string.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(mService==null){
                    Log.i(TAG, "onClick: -----kong");
                    return;
                }
                try {
                    List<String> stringList = mService.getStringList();
                    mTv_value.setText(stringList.toString());

                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        });
        mBtn_person.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(mService==null){
                    Log.i(TAG, "onClick: -----kong");
                    return;
                }
                try {
                    List<Person> personList = mService.getPersonList();
                    mTv_value.setText(personList.toString());

                } catch (RemoteException e) {
                    e.printStackTrace();
                }

            }
        });
    }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值