先看效果图,下面是广播和AIDL跨进程的方法

我们先创建AIDL文件定义接口方法

定义好接口方法如下图:

// ITokenAidlInterface.aidl
package com.example.aidldemo;// Declare any non-default types here with import statementsinterface ITokenAidlInterface {//同步登录token到客户端的方法void postLoginToken(in String accessToken);
}

然后将aidl整个文件夹赋值到需要跨进程的另外一个项目中如下图

然后我们将两个项目都同步或者gradle下,两个项目都会自动生成刚刚AIDL文件的Java代码

好了我们可以在需要接收数据的接收端定义服务类了

package com.example.app_server;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;import androidx.annotation.Nullable;import com.example.aidldemo.ITokenAidlInterface;/*** @author xiayiye5* @date 2021/11/30 16:11*/
public class AIDLTokenService extends Service {private static final String TAG = "AIDLTokenService";ITokenAidlInterface.Stub stub = new ITokenAidlInterface.Stub() {@Overridepublic void postLoginToken(String accessToken) throws RemoteException {Log.d(TAG, "获取到的登录token:" + accessToken);Intent intent = new Intent(AIDLTokenService.this, ServerActivity.class);intent.putExtra("accessToken", accessToken);startActivity(intent);}};@Nullable@Overridepublic IBinder onBind(Intent intent) {return stub;}
}

然后需要在清单文件配置下服务,注意action这个一定要记住

 <serviceandroid:name=".AIDLTokenService"android:exported="true"><intent-filter><!--下面的action配置需要与客户端绑定服务的action保持一致--><action android:name="com.xiayiye5.login.token" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></service>

然后我们可以在发送端开始绑定接收端的服务类了

  /*** 尝试与服务端建立连接*/private fun startBindService() {val intent = Intent()//下面action需要与服务端APP清单文件里面的服务配置的action字段保持一致intent.action = "com.xiayiye5.login.token"//要发送到服务端APP的包名intent.setPackage("com.example.app_server")bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE)}private val mServiceConnection: ServiceConnection = object : ServiceConnection {override fun onServiceConnected(name: ComponentName, service: IBinder) {Log.d(TAG, "service connected")mITokenAidlInterface = ITokenAidlInterface.Stub.asInterface(service)//如果与服务端的连接处于未连接状态,则尝试连接if (!mConnected) {startBindService()Toast.makeText(this@ClientActivity,"当前与服务端处于未连接状态,正在尝试重连,请稍后再试",Toast.LENGTH_SHORT).show()return}}override fun onServiceDisconnected(name: ComponentName) {Log.d(TAG, "service disconnected")mConnected = false}}override fun onStart() {super.onStart()Log.d(TAG, "onStart")if (!mConnected) {//建立连接startBindService()}}override fun onStop() {super.onStop()if (mConnected) {//解绑服务unbindService(mServiceConnection)}}

绑定完成后,我们可以开始发送数据到接收端了

  //跨进程方法一 AIDLbtSend.setOnClickListener {try {//AIDL跨进程发送数据到服务端APPmITokenAidlInterface!!.postLoginToken(etInput.text.toString().trim())} catch (e: RemoteException) {e.printStackTrace()}}

代码完毕。

再次感谢原博主:原博主直达

如果看着比较复杂具体可以下载源码查看:源码直达

Android开发之跨进程通讯-AIDL实现方法 (附源码)相关推荐

  1. android+仿iphone,Android编程实现仿iphone抖动效果的方法(附源码)

    Android编程实现仿iphone抖动效果的方法(附源码) 时间:2021-05-20 本文实例讲述了Android编程实现仿iphone抖动效果的方法.分享给大家供大家参考,具体如下: 布局文件: ...

  2. 从零开始开发IM(即时通讯)服务端附源码

    前言 首先讲讲IM(即时通讯)技术可以用来做什么: 聊天:qq.微信 直播:斗鱼直播.抖音 实时位置共享.游戏多人互动等等 可以说几乎所有高实时性的应用场景都需要用到IM技术. 本篇将带大家从零开始搭 ...

  3. android 原生开发 3d地图 下载_arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)...

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  4. DSP:6678开发板NDK网口通信完整实现(附源码)

    如果出现图片打不开,或是显示异常,请点击下方链接阅读原文!!! DSP:6678开发板NDK网口通信完整实现(附源码) - 子木的文章 - 知乎 https://zhuanlan.zhihu.com/ ...

  5. JAVA计算机毕业设计跨境电商网站(附源码、数据库)

    JAVA计算机毕业设计跨境电商网站(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(In ...

  6. 微信小程序/uni-app 蓝牙打印开发教程和常见问题总结【文末附源码】

    微信小程序/uni-app 蓝牙打印开发教程和常见问题总结[文末附源码] 文章目录 微信小程序/uni-app 蓝牙打印开发教程和常见问题总结[文末附源码] 1️⃣ 写在前面 2️⃣ 蓝牙连接流程 3 ...

  7. Linux嵌入式驱动开发01——第一个驱动Hello World(附源码)

    文章目录 全系列传送门 引言 驱动介绍 Hello World 1. 包含头文件 2. 驱动模块的入口和出口 3. 声明信息 4. 功能实现 完整代码 编译 第一种方法 第二种方法 编译成模块 第一步 ...

  8. c语言跳一跳辅助源码,.NET 开发一个微信跳一跳辅助程序(附源码)

    原标题:.NET 开发一个微信跳一跳辅助程序(附源码) 来源:中国.NET研究协会 cnblogs.com/dotnet-org-cn/p/8149693.html 前言 微信更新了,出现了一个小游戏 ...

  9. Android Handler中的handleMessage方法和post方法之源码剖析

    我们都知道,在子线程中进行UI操作(更新UI控件)包括以下四种方法: 1.Handler的handlerMessage()方法. 2.Handler的post()方法. 3.View的post()方法 ...

最新文章

  1. 【Android 逆向】代码调试器开发 ( 使用 NDK 中的 ndk-build + Android.mk 编译 Android 平台的代码调试器可执行应用 )
  2. 3a算法 isp_Isp图像算法工程师
  3. 为了在 Windows 上安装 GCC
  4. c语言中执行一次的函数once,iOS只执行一次的方法
  5. 微信小程序直播助力深圳线上购物节 数百场品牌小程序开播
  6. Linux学习-Linux 主机上的用户讯息传递
  7. Udp、Tcp、Http Socket
  8. 用SandCastle为注释生成chm文档
  9. ai/ml_本月有关AI / ML的令人印象深刻的中等文章
  10. vue-cli 脚手架安装
  11. 用swich语句查看水果的价格
  12. BP神经网络实现实例1曲线拟合
  13. ignore在mysql中什么意思_ignore是什么意思
  14. Java 汉字转拼音(倒叙显示,过滤字符,字母,有数字添加到末尾)
  15. jaccard相似度算法
  16. 使iis支持php的方法简介
  17. linux 执行计划任务
  18. 全球及中国三维精密动作捕捉系统行业研究及十四五规划分析报告
  19. WIN10自带的录屏软件Xbox Game Bar的启动相关问题
  20. 【Basic Algebra】群论学习整理

热门文章

  1. 基于PYNQ-Z2重建BNN工程
  2. python打印小猪佩琪_极度舒适的 Python 入门教程,小猪佩奇也能学会~
  3. python写一个自动登录脚本_Python 实现自动登录+点击+滑动验证功能
  4. python做什么项目好_推荐两个牛逼的Python项目
  5. 原生android 全面屏,谷歌全面屏手机曝光!谷歌pixel2,安卓8.0+骁龙836!
  6. mysql设置作业_MySQL-作业1
  7. python 画布 保存_Python Tkinter使用PIL将画布保存为图像
  8. tomcat如何部署.net程序_.NET 程序员如何学习Vue
  9. Java常见排序算法之直接选择排序
  10. UOJ 405(IOI2018 D1T1)