文章目录

  • 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通信相关推荐

  1. Android两个app间跳转-deepLink的使用

    在开发过程中,经常会遇到两个app之间跳转.或者浏览器链接跳转app的需求,这里简单总结一下. 1.简单的从一个app跳转到另一个app 直接用intent就可以实现. 只要知道目标activity的 ...

  2. Linux C 进程间的IPC通信 之 消息队列(2)

    Linux C 进程间的IPC通信 之 消息队列 双向通信 代码:(进程1) 1 #include <stdio.h>2 #include <sys/msg.h>3 #incl ...

  3. Linux C 进程间的IPC通信 之 共享内存(二)

    1.父子进程(有亲缘关系)的IPC通信 int shmid;       shmid = shmget(IPC_PRIVATE, 128, IPC_CREAT | 0777); //创建共享内存,参数 ...

  4. Linux-C语言-利用有名管道简单实现两个进程间的全双工通信

    有名管道特点: 1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到. 2.半双工的通信方式,进程通过文件IO来操作有名管道. 3.有名管道遵 ...

  5. 【AWS入门】AWS对等连接之实现两个VPC间私网通信

    目录 1. 概念 1. 什么是 VPC 对等? 2. VPC 对等基本知识 3. 多个 VPC 的对等连接 4. VPC 限制 2. 实验 1. 概念 1. 什么是 VPC 对等? 虚拟私有云(VPC ...

  6. android 两个客户端间的通信(Socket通信)

    2019独角兽企业重金招聘Python工程师标准>>> 客户端之间通信:    实际上两个客户端不能直接通信,要借助服务器来做为中转站,才能实现双方通信. 一个客户端发送数据到服务器 ...

  7. Linux C 进程间的IPC通信 之 共享内存(一)

    1.IPC(inter - process communication)通信 共享内存.消息队列.信号灯 2.库 <sys/shm.h> 2-1  创建共享内存 int shmget( k ...

  8. Linux C 进程间的IPC通信 之 消息队列(1)

    1.消息队列 与 共享内存 1-1 消息队列  和 管道 都属于 队列结构,读完了 就被删除 不存在,但 管道 是 顺序队列 ,而 消息队列 是 链式队列 1-2  消息队列 的读和写 可设为 阻塞模 ...

  9. ROS——不同版本间ROS进行通信

    在相同版本间的ROS进行通信不在赘述了,修改/etc/hosts文件即可. 最近项目遇到在Ubuntu16.04 与Ubuntu18.04两个系统间进行ROS通信,ROS版本分别为Kinetic和Me ...

  10. Android之通过ContentProvider实现两个app(进程间)间通信以及函数调用

    1.ContentProvider简单介绍 ContentProvider以在不同的应用程序之间共享数据,ContentProvider底层实现是Binder,它为存储和获取数据提供统一的接口 2.实 ...

最新文章

  1. [转载自简书] ASPNetCore上传大文件碰到的一些问题总结
  2. java 并发测试程序_java并发编程实战:第十二章---并发程序的测试
  3. linux下能用qt5.0,qt5.0移植
  4. 最大素因子(不是题目!自己写着玩的。。。)
  5. three.js两个点给线条加宽度_2020湘乡线条立体逼真方兴装饰诚信服务
  6. 设计模式之二-Proxy模式
  7. Android Binder Driver流程分析
  8. Win10关闭系统自动更新
  9. 控制数学问题的MATLAB求解,控制数学问题的MATLAB求解.pdf
  10. 宇视服务器硬件如何安装,宇视科技无需后端平台与服务器支撑 即可形成小型人脸识别方案...
  11. 电容或电感的电压_阻碍电流流通的“双子星”,电容与电感
  12. Android 永久保存数据
  13. kali linux 入侵教程,kali linux 入侵wordpress! wpscan工具使用方法!
  14. Python快速上手攻略
  15. 遥感图像计算机自动分类原理,第30讲:8.1遥感图像自动识别分类
  16. 今天起,上海用户可以用滴滴App免费打无人车了
  17. C语言实现BC28NB模组上报数据到电信云
  18. ccflow 代码分析
  19. 动态ani_你是哪张Ani专辑?
  20. 亲,你寄的 U盘不是 4G 的哟~

热门文章

  1. Vuebnb 一个用 vue.js + Laravel 构建的全栈应用
  2. 非阻塞IO发送http请求
  3. butterknife 配置了点击和绑定无效
  4. UVa 1252 (状压DP + 记忆化搜索) Twenty Questions
  5. UVA 10125 - Sumsets
  6. 杭电 3400 Line belt 解题报告
  7. TreeView中丢失的图标
  8. 重新开始我的blog内容!
  9. 【EMNLP2020】超越MLM,微软打造全新预训练任务
  10. 【直播预告】“CCF-NLP走进高校”系列之“走进郑州大学”