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


    一、环境

    高通865 Android 10

    二、情景

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

    三、代码实现

    frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
    1. @@ -132,6 +132,14 @@ import java.io.PrintWriter;
    2. import java.text.DateFormat;
    3. import java.util.Date;
    4. +//added begin
    5. +import android.os.Handler;
    6. +import android.os.Looper;
    7. +import android.os.Message;
    8. +import android.os.Parcelable;
    9. +import android.os.HandlerThread;
    10. +//added end
    11. +
    12. /**
    13. * Controller for interpreting how and then launching an activity.
    14. *
    15. @@ -242,6 +250,39 @@ class ActivityStarter {
    16. void recycle(ActivityStarter starter);
    17. }
    18. + private Handler mHandler;
    19. + private static final int DO_SEND_ACTIVITY_LAUNCHES_MSG = 1;
    20. +
    21. + //added begin
    22. + private final class pkgHandler extends Handler {
    23. + public pkgHandler(Looper looper) {
    24. + super(looper, null, true);
    25. + }
    26. +
    27. + @Override
    28. + public void handleMessage(Message msg) {
    29. + switch(msg.what) {
    30. + case DO_SEND_ACTIVITY_LAUNCHES_MSG:
    31. + android.util.Log.d("qxy","ActivityStartController --> handleMessage --> DO_SEND_ACTIVITY_LAUNCHES_MSG");
    32. + android.util.Log.d("qxy","Thread.currentThread().getId() = " + Thread.currentThread().getId()
    33. + + "\n" + "getMainLooper().getThread().getId() = " + mService.mContext.getMainLooper().getThread().getId());
    34. + Bundle bundle = msg.getData();
    35. + String pksFrom = bundle.getString("pksFrom");
    36. + String pksTo = bundle.getString("pksTo");
    37. + android.util.Log.d("qxy","pksFrom :" + pksFrom + " pksTo = " + pksTo);
    38. + Intent mIntent = new Intent();
    39. + mIntent.setAction("com.sc.app.launcher.jump");
    40. + mIntent.putExtra("pksFrom",pksFrom);
    41. + mIntent.putExtra("pksTo",pksTo);
    42. + mService.mContext.sendBroadcast(mIntent);
    43. + break;
    44. + }
    45. + }
    46. + }
    47. + //added end
    48. +
    49. +
    50. +
    51. /**
    52. * Default implementation of {@link StarterFactory}.
    53. */
    54. @@ -1228,6 +1269,27 @@ class ActivityStarter {
    55. // Collect information about the target of the Intent.
    56. ActivityInfo aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags, profilerInfo);
    57. + //add begin
    58. + /*
    59. + From -> callingPackage;
    60. + To -> intent.getComponent().getPackageName();
    61. + */
    62. + if(callingPackage != null && !callingPackage.equals(intent.getComponent().getPackageName())){
    63. + HandlerThread handlerThread = new HandlerThread("handler_thread");
    64. + handlerThread.start();
    65. + mHandler = new pkgHandler(handlerThread.getLooper());
    66. + mHandler.removeMessages(DO_SEND_ACTIVITY_LAUNCHES_MSG);
    67. + Message msg = mHandler.obtainMessage(DO_SEND_ACTIVITY_LAUNCHES_MSG);
    68. + Bundle mBundle = new Bundle();
    69. + mBundle.putString("pksFrom", callingPackage);
    70. + mBundle.putString("pksTo", intent.getComponent().getPackageName());
    71. + msg.setData(mBundle);
    72. + mHandler.sendMessage(msg);
    73. + }add end
    74. +
    75. +
    76. +
    77. synchronized (mService.mGlobalLock) {
    78. final ActivityStack stack = mRootActivityContainer.getTopDisplayFocusedStack();
    79. stack.mConfigWillChange = globalConfig != null

  • 相关阅读:
    vue获取当前页面地址
    【Java 进阶篇】JavaScript BOM History 详解
    如何安装GCC?
    timer trigger function
    C++:C++11 和 设计模式
    商业合作保密协议 (2)
    ElasticSearch集群缩容
    2020-2023小样本学习(FSL)顶会论文及开源代码合集(已分类整理)
    python之pyttsx3库实现语音播报
    Excel·VBA分列、字符串拆分
  • 原文地址:https://blog.csdn.net/banzhuantuqiang/article/details/133994787