Android 两个App间进行IPC通信
文章目录
- DemoA
- DemoB
前提:必须先启动DemoB的Service,DemoA与DemoB成功进行IPC。
运行结果
2021-09-12 13:52:51.986 2568-2568/com.jlink.demob D/wangrui: 通信管道正在绑定
2021-09-12 13:53:11.969 2568-2568/com.jlink.demob D/wangrui: 接收到客户端消息
2021-09-12 13:53:11.970 2568-2568/com.jlink.demob D/wangrui: 名字:王睿 年龄21
DemoA
MainActivity.java
public class MainActivity extends AppCompatActivity {private Button btnIPC;private Button btnSend;private Messenger messengerProxy;private Handler handler = new Handler(Looper.getMainLooper()){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);Bundle bundle = msg.getData();bundle.setClassLoader(MyBean.class.getClassLoader());MyBean myBean = bundle.getParcelable("message");handler.postDelayed(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,myBean.getName(),Toast.LENGTH_SHORT).show();}},3000);}};private Messenger clientMessenger = new Messenger(handler);private ServiceConnection mServiceConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder binder) {messengerProxy = new Messenger(binder);Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_SHORT).show();}@Overridepublic void onServiceDisconnected(ComponentName name) {android.util.Log.d("wangrui","断开连接!");}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnIPC = findViewById(R.id.btn_ipc);btnIPC.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intentService = new Intent();intentService.setAction("com.jlink.demob.MyService");intentService.setPackage("com.jlink.demob");intentService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);MainActivity.this.bindService(intentService, mServiceConnection, BIND_AUTO_CREATE);}});btnSend = findViewById(R.id.btn_send);btnSend.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// MyBean myBean = new MyBean();
// myBean.setName("王睿对皮卡丘使用了精灵球");try {Message message = new Message();
// message.replyTo = clientMessenger;Bundle bundle = new Bundle();bundle.putString("name", "王睿");bundle.putString("age","21");
// bundle.putParcelable("message",myBean);message.setData(bundle);messengerProxy.send(message);} catch (RemoteException e) {e.printStackTrace();}}});}
}
MyService.java
/*** author : WangRui*/
public class MyService extends Service {private Handler handler = new Handler(Looper.getMainLooper());private Messenger messenger = new Messenger(handler);@Nullable@Overridepublic IBinder onBind(Intent intent) {android.util.Log.d("wangrui","通信管道正在绑定");return messenger.getBinder();}
}
AndroidManifest.xml
<serviceandroid:name=".MyService"android:process=":remote"><intent-filter><category android:name="android.intent.category.DEFAULT"/><action android:name="com.jlink.demoa.MyService"/></intent-filter></service>
DemoB
MainActivity.java
public class MainActivity extends AppCompatActivity {private ServiceConnection mServiceConnection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder binder) {}@Overridepublic void onServiceDisconnected(ComponentName name) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intentService = new Intent();intentService.setAction("com.jlink.demob.MyService");intentService.setPackage("com.jlink.demob");intentService.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);MainActivity.this.bindService(intentService, mServiceConnection, BIND_AUTO_CREATE);}
MyService.java
/*** author : WangRui*/
public class MyService extends Service {private Handler handler = new Handler(Looper.getMainLooper()){@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);android.util.Log.d("wangrui","接收到客户端消息");// 客户端→服务端Bundle bundle = msg.getData();android.util.Log.d("wangrui","名字:" + bundle.getString("name")+"\n\n"+"年龄:" + bundle.getString("age"));
// bundle.setClassLoader(MyBean.class.getClassLoader());
// MyBean myBean = bundle.getParcelable("message");
// Toast.makeText(MyService.this,myBean.getName(),Toast.LENGTH_SHORT).show();// //服务端→客户端
// try {// Messenger clientMessenger = msg.replyTo;
// myBean = new MyBean();
// myBean.setName("皮卡丘对王睿使用了十万伏特");
// bundle = new Bundle();
// bundle.putParcelable("message",myBean);
// Message message = new Message();
// message.setData(bundle);
// message.replyTo = clientMessenger;
// clientMessenger.send(message);
// } catch (RemoteException e) {// e.printStackTrace();
// }}};private Messenger messenger = new Messenger(handler);@Nullable@Overridepublic IBinder onBind(Intent intent) {android.util.Log.d("wangrui","通信管道正在绑定");return messenger.getBinder();}
}
AndroidManifest.xml
<serviceandroid:name=".MyService"android:process=":remote"><intent-filter><category android:name="android.intent.category.DEFAULT"/><action android:name="com.jlink.demob.MyService"/></intent-filter></service>
Android 两个App间进行IPC通信相关推荐
- Android两个app间跳转-deepLink的使用
在开发过程中,经常会遇到两个app之间跳转.或者浏览器链接跳转app的需求,这里简单总结一下. 1.简单的从一个app跳转到另一个app 直接用intent就可以实现. 只要知道目标activity的 ...
- Linux C 进程间的IPC通信 之 消息队列(2)
Linux C 进程间的IPC通信 之 消息队列 双向通信 代码:(进程1) 1 #include <stdio.h>2 #include <sys/msg.h>3 #incl ...
- Linux C 进程间的IPC通信 之 共享内存(二)
1.父子进程(有亲缘关系)的IPC通信 int shmid; shmid = shmget(IPC_PRIVATE, 128, IPC_CREAT | 0777); //创建共享内存,参数 ...
- Linux-C语言-利用有名管道简单实现两个进程间的全双工通信
有名管道特点: 1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到. 2.半双工的通信方式,进程通过文件IO来操作有名管道. 3.有名管道遵 ...
- 【AWS入门】AWS对等连接之实现两个VPC间私网通信
目录 1. 概念 1. 什么是 VPC 对等? 2. VPC 对等基本知识 3. 多个 VPC 的对等连接 4. VPC 限制 2. 实验 1. 概念 1. 什么是 VPC 对等? 虚拟私有云(VPC ...
- android 两个客户端间的通信(Socket通信)
2019独角兽企业重金招聘Python工程师标准>>> 客户端之间通信: 实际上两个客户端不能直接通信,要借助服务器来做为中转站,才能实现双方通信. 一个客户端发送数据到服务器 ...
- Linux C 进程间的IPC通信 之 共享内存(一)
1.IPC(inter - process communication)通信 共享内存.消息队列.信号灯 2.库 <sys/shm.h> 2-1 创建共享内存 int shmget( k ...
- Linux C 进程间的IPC通信 之 消息队列(1)
1.消息队列 与 共享内存 1-1 消息队列 和 管道 都属于 队列结构,读完了 就被删除 不存在,但 管道 是 顺序队列 ,而 消息队列 是 链式队列 1-2 消息队列 的读和写 可设为 阻塞模 ...
- ROS——不同版本间ROS进行通信
在相同版本间的ROS进行通信不在赘述了,修改/etc/hosts文件即可. 最近项目遇到在Ubuntu16.04 与Ubuntu18.04两个系统间进行ROS通信,ROS版本分别为Kinetic和Me ...
- Android之通过ContentProvider实现两个app(进程间)间通信以及函数调用
1.ContentProvider简单介绍 ContentProvider以在不同的应用程序之间共享数据,ContentProvider底层实现是Binder,它为存储和获取数据提供统一的接口 2.实 ...
最新文章
- [转载自简书] ASPNetCore上传大文件碰到的一些问题总结
- java 并发测试程序_java并发编程实战:第十二章---并发程序的测试
- linux下能用qt5.0,qt5.0移植
- 最大素因子(不是题目!自己写着玩的。。。)
- three.js两个点给线条加宽度_2020湘乡线条立体逼真方兴装饰诚信服务
- 设计模式之二-Proxy模式
- Android Binder Driver流程分析
- Win10关闭系统自动更新
- 控制数学问题的MATLAB求解,控制数学问题的MATLAB求解.pdf
- 宇视服务器硬件如何安装,宇视科技无需后端平台与服务器支撑 即可形成小型人脸识别方案...
- 电容或电感的电压_阻碍电流流通的“双子星”,电容与电感
- Android 永久保存数据
- kali linux 入侵教程,kali linux 入侵wordpress! wpscan工具使用方法!
- Python快速上手攻略
- 遥感图像计算机自动分类原理,第30讲:8.1遥感图像自动识别分类
- 今天起,上海用户可以用滴滴App免费打无人车了
- C语言实现BC28NB模组上报数据到电信云
- ccflow 代码分析
- 动态ani_你是哪张Ani专辑?
- 亲,你寄的 U盘不是 4G 的哟~
热门文章
- Vuebnb 一个用 vue.js + Laravel 构建的全栈应用
- 非阻塞IO发送http请求
- butterknife 配置了点击和绑定无效
- UVa 1252 (状压DP + 记忆化搜索) Twenty Questions
- UVA 10125 - Sumsets
- 杭电 3400 Line belt 解题报告
- TreeView中丢失的图标
- 重新开始我的blog内容!
- 【EMNLP2020】超越MLM,微软打造全新预训练任务
- 【直播预告】“CCF-NLP走进高校”系列之“走进郑州大学”