android 10 系统源码 framework 默认所有强制竖屏应用(SCREEN_ORIENTATION_PORTRAIT)横屏显示

本文探讨了`PackageParser`中关于屏幕方向设置的新变化,特别是引入的`FORCE_LANDSCAPE_ENABLED`变量,以及如何根据特定应用过滤屏幕锁定。同时提到了`DisplayRotation`中的屏幕旋转逻辑更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

frameworks/base/core/java/android/content/pm/PackageParser.java
@@ -169,6 +169,8 @@ public class PackageParser {
     private static final boolean MULTI_PACKAGE_APK_ENABLED = Build.IS_DEBUGGABLE &&
             SystemProperties.getBoolean(PROPERTY_CHILD_PACKAGES_ENABLED, false);
 
+    private static final boolean FORCE_LANDSCAPE_ENABLED = SystemProperties.getBoolean("persist.sys.force.landscape", true);
+
     private static final float DEFAULT_PRE_O_MAX_ASPECT_RATIO = 1.86f;
     private static final float DEFAULT_PRE_Q_MIN_ASPECT_RATIO = 1.333f;
     private static final float DEFAULT_PRE_Q_MIN_ASPECT_RATIO_WATCH = 1f;
@@ -4478,9 +4480,12 @@ public class PackageParser {
                 a.info.flags |= ActivityInfo.FLAG_RESUME_WHILE_PAUSING;
             }
 
-            a.info.screenOrientation = sa.getInt(
-                    R.styleable.AndroidManifestActivity_screenOrientation,
-                    SCREEN_ORIENTATION_UNSPECIFIED);
+            int screenOrientation = sa.getInt(R.styleable.AndroidManifestActivity_screenOrientation, SCREEN_ORIENTATION_UNSPECIFIED);
+            a.info.screenOrientation = screenOrientation;
+            if (FORCE_LANDSCAPE_ENABLED && !("org.codeaurora.snapcam".equals(owner.packageName))
+                    && (screenOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)) { //根据包名过滤某个应用
+                a.info.screenOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
+            }
 
             setActivityResizeMode(a.info, sa, owner);

frameworks/base/services/core/java/com/android/server/wm/DisplayRotation.java

int rotationForOrientation(int orientation, int lastRotation) {
	...
	String pkgName = mDisplayPolicy.getAppPackageName();
    boolean isSnapCamera = "org.codeaurora.snapcam".equals(pkgName); //根据包名过滤某个应用
    switch (orientation) {
        case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
+        	if (isSnapCamera) {
+       	    return Surface.ROTATION_0;
+        	}
        	// Return portrait unless overridden.
        	if (isAnyPortrait(preferredRotation)) {
				return preferredRotation;
        	}
-           return mPortraitRotation;
+           return preferredRotation;
       	 ...
         default:
        	// For USER, UNSPECIFIED, NOSENSOR, SENSOR and FULL_SENSOR,
        	// just return the preferred orientation we already calculated.
        	if (preferredRotation >= 0) {
        		return preferredRotation;
        	}
        	return Surface.ROTATION_90;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值