这里创建了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();
}
}
});
}