Android11 强制所有第三方应用全屏

时间:2025-01-31 08:56:23

       最近遇到这么一个需求,在公司的Android11系统中发现部分下载的第三方应用,没有全屏显示并且两边有黑边。

        经过我分析,这个问题和横竖屏显示有关。反编译第三方的apk发现,Androidmainfest中

添加

android:screenOrientation="portrait"

因为我们作如下修改:

diff --git a/release/frameworks/base/core/java/android/content/pm/parsing/component/ b/release/frameworks/base/core/java/android/content/pm/parsing/component/
old mode 100644
new mode 100755
index fb8fd74545c..17a153d4314
--- a/release/frameworks/base/core/java/android/content/pm/parsing/component/
+++ b/release/frameworks/base/core/java/android/content/pm/parsing/component/
@@ -145,8 +145,20 @@ public class ParsedActivityUtils {
                  = (
                         (.AndroidManifestActivity_configChanges, 0),
                         (.AndroidManifestActivity_recreateOnConfigChanges, 0));
-
-                int screenOrientation = (.AndroidManifestActivity_screenOrientation, SCREEN_ORIENTATION_UNSPECIFIED);
+                /**
+                * Force horizontal display without SharedUserId
+                * edit 2022.08.09
+                */   
+                int screenOrientation;              
+                if (() == null){
+                    screenOrientation = 0;
+                }else{
+                    screenOrientation = (.AndroidManifestActivity_screenOrientation, SCREEN_ORIENTATION_UNSPECIFIED);
+                }
+                /**
+                * Force horizontal display without SharedUserId
+                * edit 2022.08.09
+                */
                 int resizeMode = getActivityResizeMode(pkg, sa, screenOrientation);
                  = screenOrientation;
                  = resizeMode;

考虑到可能还可能调用里面的setRequestedOrientation方法去设置横竖屏

diff --git a/core/java/android/app/ b/core/java/android/app/
index bfa35da..e0c53eb 100644
--- a/core/java/android/app/
+++ b/core/java/android/app/
@@ -5773,12 +5773,12 @@ public class Activity extends ContextThemeWrapper
         if (mParent == null) {
             try {
+                if(mApplication != null && () != null
+                    && ().uid > 10000){
+                    ().setRequestedOrientation(
+                            mToken, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+                }else{
+                    ().setRequestedOrientation(
+                            mToken, requestedOrientation);
-                 ().setRequestedOrientation(
-                        mToken, requestedOrientation);
-                        mToken, 0);
                } 
             } catch (RemoteException e) {
                 // Empty
             }
         } else {
+                if(mApplication != null && () != null
+                    && ().uid > 10000){
+           (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+                }else{
+                    (requestedOrientation);
+                }
-            (requestedOrientation);
         }
     }