接上移篇 Android AIDL 学习(服务端)我们今天来看看客户端怎么实现调用。
我们还是先创建个客户端项目,AClient
开发环境:Android Studio 3.6.2
保存的地方,你根据你的习惯随便找个地方保存。
要实现AIDL的调用,需要有AIDL的服务放提供为我们AIDL接口文件,还有必须的类别才行。
那我们BService服务端,需要提供给我慢AIDL接口,还有用到的Book类的定义。
还需要提供给我们调用服务的action:com.example.bservice.bookService
服务器提供的AIDL接口:IMyBookManager
// IMyBookManager.aidl
package com.example.bservice;
// Declare any non-default types here with import statements
//需要采用全部包名的引入。
import com.example.bservice.Book;
//需要说明我们引入的book 是个序列化的类。
parcelable Book;
interface IMyBookManager {
/**
* 默认添加的基础类型接口,不用可以删掉
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
String login(String userName, String pwd);
Book queryByName(String bookName);
}
服务端提供Book类的定义
package com.example.bservice;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
public class Book implements Parcelable {
private int price;
private String name = "";
public Book(){}
protected Book(Parcel in) {
price = in.readInt();
name = in.readString();
}
public static final Creator<Book> CREATOR = new Creator<Book>() {
@Override
public Book createFromParcel(Parcel in) {
return new Book(in);
}
@Override
public Book[] newArray(int size) {
return new Book[size];
}
};
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@NonNull
@Override
public String toString() {
return "name:" + name + ",price:" + price;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(price);
dest.writeString(name);
}
}
我们把这两个类添加到我们的项目中
在main右键选择新建一个文件夹,命名为aidl
在didl上点击右键新建包 com.example.bservice 这个报名就是服务提供给我们AIDL文件的报名。必须要一样。
在这个包中我们添加服务端给我们的aidl 文件
然后把服务端的接口内容粘贴到文件中。
处理完了接口文件,我们来处理接口文件返回来的类Book。
在src\main\java\新建包 com.example.bservice;
在新建的包上右键新建Book类。
把服务端提供的Book类的结构保存到文件。