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

一、环境

高通865 Android 10

二、情景

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

三、代码实现

frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
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
相关推荐
夏沫琅琊2 小时前
Android 各类日志全面解析(含特点、分析方法、实战案例)
android
程序员JerrySUN2 小时前
OP-TEE + YOLOv8:从“加密权重”到“内存中解密并推理”的完整实战记录
android·java·开发语言·redis·yolo·架构
TeleostNaCl3 小时前
Android | 启用 TextView 跑马灯效果的方法
android·经验分享·android runtime
TheNextByte14 小时前
Android USB文件传输无法使用?5种解决方法
android
quanyechacsdn5 小时前
Android Studio创建库文件用jitpack构建后使用implementation方式引用
android·ide·kotlin·android studio·implementation·android 库文件·使用jitpack
程序员陆业聪6 小时前
聊聊2026年Android开发会是什么样
android
编程大师哥6 小时前
Android分层
android
极客小云8 小时前
【深入理解 Android 中的 build.gradle 文件】
android·安卓·安全架构·安全性测试
Juskey iii8 小时前
Android Studio Electric Eel | 2022.1.1 Patch 2 版本下载
android·ide·android studio
Android技术之家8 小时前
2025年度Android行业总结:AI驱动生态重构,跨端融合开启新篇
android·人工智能·重构