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

MTK Android12 应用在最顶端时,禁止拉起其他某个应用(一)

1、需求

近期,客户要求应用在最顶端时,禁止拉起其他某个应用

2、解决方法

diff --git a/frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java b/frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
index 0cd26b53d39..7e3037caecb 100644
--- a/frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -31,6 +31,7 @@ import static android.app.ActivityTaskManager.INVALID_TASK_ID;
 import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY;
 import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
+import android.content.Context;
 import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
 import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP;
 import static android.content.Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT;
@@ -129,6 +130,7 @@ import com.android.server.wm.LaunchParamsController.LaunchParams;
 import java.io.PrintWriter;
 import java.text.DateFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * Controller for interpreting how and then launching an activity.
@@ -802,6 +804,32 @@ class ActivityStarter {
         }
         return res;
     }
+	
+	
+	private boolean isForground() {
+        ActivityManager mActivityManager = (ActivityManager)mService.mContext.getSystemService(Context.ACTIVITY_SERVICE);
+        if (mActivityManager.getRunningTasks(1) == null) {
+            android.util.Log.d("hdxxx", "running task is null, ams is abnormal!!!");
+            return false;
+        }
+        List<ActivityManager.RunningTaskInfo> infoList = mActivityManager.getRunningTasks(1);
+        if(infoList.size() == 0){
+            android.util.Log.d("hxxx", "failed to get RunningTaskInfo");
+            return false;
+        }
+        ActivityManager.RunningTaskInfo mRunningTask = infoList.get(0);
+        if (mRunningTask == null) {
+            android.util.Log.d("hxxx", "failed to get RunningTaskInfo");
+            return false;
+        }
+        String pkgName = mRunningTask.topActivity.getPackageName();
+        android.util.Log.d("hxxx", "pkgName:" + pkgName);
+        if (pkgName.equals("*****")) {
+            return true;
+        }
+        return false;
+    }
+	
 
     /**
      * Executing activity start request and starts the journey of starting an activity. Here
@@ -959,7 +987,19 @@ class ActivityStarter {
                 err = ActivityManager.START_NOT_VOICE_COMPATIBLE;
             }
         }
-
+		android.util.Log.d("hdxxx", "==============isForground():" + isForground());
+		if(isForground()){
+			if(intent!= null){
+				if(intent.getComponent()!= null){
+					String packageName = intent.getComponent().getPackageName();
+					if (packageName.equals("************")){
+						Slog.d("Activitystarter","start abort, sensor status abnormal");
+						return START_ABORTED;
+					}
+				}
+			}
+		}
+		
         final Task resultRootTask = resultRecord == null
                 ? null : resultRecord.getRootTask();
 
http://www.dtcms.com/a/76438.html

相关文章:

  • docker环境下安装flink
  • vector(沉淀)
  • 使用Azure CDN进行子域名接管
  • 解锁 DeepSeek 安全接入、稳定运行新路径
  • vulhub-joker攻略
  • VulnHub-Billu_b0x通关攻略
  • 【C++】多态
  • CCF-CSP认证 202206-1归一化处理
  • Compose 的产生和原理
  • MySQL超详细介绍(近2万字)
  • 穆迪暖色调人像静物摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 生成PDF文件:从html2canvas和jsPdf渲染到Puppeteer矢量图
  • Android Handler 通过线程安全的 MessageQueue 和底层唤醒机制实现跨线程通信
  • 【嵌入式学习】如何利用gitee管理记录学习内容
  • 多线程—进程与线程
  • 【软考-架构】8.2、开发方法-TPC-MIS-DSS
  • RSI 量化策略实战指南:基于 iTick 报价源的 Python 实现
  • 卷积神经网络 - 卷积层
  • 库的制作与原理 linux第课
  • LORA的AB矩阵是针对Transformer的多头还是MLP
  • 台式机电脑组装---电脑机箱与主板接线
  • 线程池的拒绝策略适用场景思考
  • 网络编程套接字【端口号/TCPUDP/网络字节序/socket编程接口/UDPTCP网络实验】
  • 双曲空间学习记录
  • TypeScript Symbols 深度解析:在 Vue3 中的高级应用实践
  • 人脸识别-检测数据集
  • C++ :顶层const与底层const的区别
  • 【Linux网络(三)】网络基础套接字
  • 【CXX-Qt】1.5 使用CMake构建
  • 《深入理解AOP编程:从基础概念到Spring实现》