两APP通信之AIDL使用。

两APP通信之AIDL使用。
摘要由CSDN通过智能技术生成

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:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值