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();