1.效果展示
无效果无真相,先上图,以下为Service App和Client App两App间的跨进程通信
AIDL实现两应用通信
2.新建服务端AIDL文件
在main路径下新建AIDL文件
a. IMsgReceiveListener
// IMsgReceiveListener.aidl
package com.scash.aidlservice;
// Declare any non-default types here with import statements
//用于接收两App的消息接口回调
import com.scash.aidlservice.Msg;//导入要传输对象的包
interface IMsgReceiveListener {
void onReceiveMsg(in Msg msg);
}
b. IMsgManagerListener
// IMsgManagerListener.aidl
package com.scash.aidlservice;
// Declare any non-default types here with import statements
import com.scash.aidlservice.Msg;//导入要传输对象的包
import com.scash.aidlservice.IMsgReceiveListener;
interface IMsgManagerListener {
void sendMsg(in Msg msg);
void registerListener(IMsgReceiveListener receiveListener);
void unRegisterListener(IMsgReceiveListener receiveListener);
}
c. Msg
// Msg.aidl
package com.scash.aidlservice;
// Declare any non-default types here with import statements
parcelable Msg;
d. 然后Rebuild Project
3.编写Msg(AIDL传输只能是Parcelable对象)
package com.scash.aidlservice;
import android.os.Parcel;
import android.os.Parcelable;
/**
* @create 2022/6/17
* @Describe AIDL 传输对象时,只能传输实现Parcelable接口的对象
*/
public class Msg implements Parcelable {
private String msg;
private String type;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
protected Msg(Parcel in) {
msg = in.readString();
type = in.readString();
}
public static final Creator<Msg> CREATOR = new Creator<Msg>() {
@Override
public Msg createFromParcel(Parcel in) {
return new Msg(in);
}
@Override
public Msg[] newArray(int size) {
return new Msg[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(msg);
dest.writeString(type);
}
}
4.编写RemotoService
package com.scash.aidlservice
import android.app.Service
import android.content.Intent
import android.os.IBinder
import android.os.RemoteCallbackList
import android.util.Log
/**
* @create 2022/6/17
* @Describe
*/
open class RemotoService : Service() {
//AIDL不支持正常的接口回调,使用RemoteCallbackList实现接口回调
val mReceiveListener: