当前位置: 首页 > news >正文

Android-Framework 应用间跳转时,提供 Android Broadcast 通知

一、环境

高通865 Android 10

二、情景

应用跳转时,通过广播发送源app的包名和目标app的包名

三、代码实现

frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -132,6 +132,14 @@ import java.io.PrintWriter;import java.text.DateFormat;import java.util.Date;+//added begin
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Parcelable;
+import android.os.HandlerThread;
+//added end
+/*** Controller for interpreting how and then launching an activity.*
@@ -242,6 +250,39 @@ class ActivityStarter {void recycle(ActivityStarter starter);}+    private Handler mHandler;
+    private static final int DO_SEND_ACTIVITY_LAUNCHES_MSG = 1;
+
+    //added  begin
+    private final class pkgHandler extends Handler {
+        public pkgHandler(Looper looper) {
+            super(looper, null, true);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch(msg.what) {
+                case DO_SEND_ACTIVITY_LAUNCHES_MSG:
+                   android.util.Log.d("qxy","ActivityStartController --> handleMessage --> DO_SEND_ACTIVITY_LAUNCHES_MSG");
+                   android.util.Log.d("qxy","Thread.currentThread().getId() = " + Thread.currentThread().getId()
+                     + "\n" + "getMainLooper().getThread().getId() = " + mService.mContext.getMainLooper().getThread().getId());
+                    Bundle bundle = msg.getData();
+                    String pksFrom = bundle.getString("pksFrom");
+                    String pksTo = bundle.getString("pksTo");
+                    android.util.Log.d("qxy","pksFrom :" + pksFrom + " pksTo = " + pksTo);
+                    Intent mIntent = new Intent();
+                    mIntent.setAction("com.sc.app.launcher.jump");
+                    mIntent.putExtra("pksFrom",pksFrom);
+                    mIntent.putExtra("pksTo",pksTo);
+                    mService.mContext.sendBroadcast(mIntent);
+                    break;
+            }
+        }
+    }
+    //added  end
+
+
+/*** Default implementation of {@link StarterFactory}.*/
@@ -1228,6 +1269,27 @@ class ActivityStarter {// Collect information about the target of the Intent.ActivityInfo aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags, profilerInfo);+        //add begin
+         /*
+          From -> callingPackage;
+          To -> intent.getComponent().getPackageName();
+         */
+       if(callingPackage != null && !callingPackage.equals(intent.getComponent().getPackageName())){
+            HandlerThread handlerThread = new HandlerThread("handler_thread");
+            handlerThread.start();
+            mHandler = new pkgHandler(handlerThread.getLooper());
+            mHandler.removeMessages(DO_SEND_ACTIVITY_LAUNCHES_MSG);
+            Message msg = mHandler.obtainMessage(DO_SEND_ACTIVITY_LAUNCHES_MSG);
+            Bundle mBundle = new Bundle();
+            mBundle.putString("pksFrom", callingPackage);
+            mBundle.putString("pksTo", intent.getComponent().getPackageName());
+            msg.setData(mBundle);
+            mHandler.sendMessage(msg);
+        }add end
+
+
+synchronized (mService.mGlobalLock) {final ActivityStack stack = mRootActivityContainer.getTopDisplayFocusedStack();stack.mConfigWillChange = globalConfig != null

http://www.lryc.cn/news/208108.html

相关文章:

  • 【Javascript】函数返回值的作用
  • 蓝桥杯 Java k倍区间
  • 万宾科技亮相2023中国传感器与应用技术大会,创始人CEO发表演讲
  • #力扣:LCP 06. 拿硬币@FDDL
  • 【Node.js】暴露自定义响应头和预检请求的时机
  • 包管理工具与配置文件package.json
  • uni-app:解决异步请求返回值问题
  • <多线程章节七>wait() 和 notify()
  • 竹云产品入选《2023年度上海市网络安全产业创新攻关成果目录》
  • 客户端负载均衡策略:loadBalancer,ribbon
  • canvas基础3 -- 交互
  • Flutter——最详细(Scaffold)使用教程
  • C语言编写图形化界面-创建按钮-为其指定样式
  • C++并发与多线程(7) | 创建多个线程时数据共享的问题
  • 进程间通信(匿名管道、命名管道、消息队列、共享内存、信号量、信号、Socket)
  • 浅谈中国汽车充电桩行业市场状况及充电桩选型的介绍
  • Postgresql在jdbc处理bit字段的解决方案
  • ESMapping字段
  • 基于LDA的隐式标签协同过滤推荐算法_文勇军
  • 在线设计数据库表用Itbuilder,极简易用真香!!!
  • onclick事件的用法
  • 二叉排序树
  • 探秘Spring的设计精髓,深入解析架构原理
  • Python Wordcloud报错:Only supported for TrueType fonts,多种解决方案
  • 为虚拟网络提供敏捷负载均衡:Everoute LB 特性解读
  • Jmeter 接口测试,参数值为列表,如何参数化?
  • DeepinV20实现使用CapsLock键切换输入法
  • 基于springboot实现校友社交平台管理系统项目【项目源码+论文说明】计算机毕业设计
  • WordPress主题模板 大前端D8 5.1版本完整开源版源码简洁大气多功能配置
  • 如何在Postman中使用静态HTTP