首页 > 其他分享 >强制app横屏显示或者竖屏显示(动态)

强制app横屏显示或者竖屏显示(动态)

时间:2024-06-13 19:23:04浏览次数:16  
标签:force return app equals 竖屏 横屏 preferredRotation rot

需求:某个app横屏显示不全,需要强制它竖屏显示,强制APP旋转优先级>系统方向优先级

如果系统没有强制横竖屏,一般都是默认应用本身的方向设置!

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

rotationForOrientation()和updateOrientation() 来负责修改当前app的显示方向

@Surface.Rotation
int rotationForOrientation(@ScreenOrientation int orientation,
        @Surface.Rotation int lastRotation) {
        
        ...
        
        } else {
            // No overriding preference.
            // We will do exactly what the application asked us to do.
            preferredRotation = -1;
        }
        
        String rot = SystemProperties.get("persist.sys.app.rotation", "middle_port");
        //add start 动态控制
        if (rot.equals("force_landscape_customer")) {
            orientation = mLandscapeRotation;//强制Activity显示横
        } else if (rot.equals("force_portrait_customer")) {
            orientation = mPortraitRotation;//强制Activity显示竖
        }
        //add end
        if (rot.equals("force_land") && "box".equals(SystemProperties.get("ro.target.product"))) {
            Slog.v(TAG, "asx force_land :" + mLandscapeRotation);
            return mLandscapeRotation;
        }
        //根据orientation 来显示应用方向
        switch (orientation) {
            case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT://如果是竖屏
                // Return portrait unless overridden.
                if (isAnyPortrait(preferredRotation)) {
                    return preferredRotation;
                }
                /*如果不要动态根据参数修改,前面的拦截add start 部分注释掉,然后直接在switch里面改,把return mPortraitRotation;
                改成 return mLandscapeRotation;或者return Surface.ROTATION_90 */
                return mPortraitRotation;

            case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE://如果是横屏
                // Return landscape unless overridden.
                if (isLandscapeOrSeascape(preferredRotation)) {
                    return preferredRotation;
                }
                return mLandscapeRotation;

            case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT://如果是屏幕方向是竖屏反转:
                // Return reverse portrait unless overridden.
                if (isAnyPortrait(preferredRotation)) {
                    return preferredRotation;
                }
                return mUpsideDownRotation;
                
            ...    
         
}


boolean updateOrientation(@ScreenOrientation int newOrientation, boolean forceUpdate) {
        if (newOrientation == mLastOrientation && !forceUpdate) {
            return false;
        }
        mLastOrientation = newOrientation;
        if (newOrientation != mCurrentAppOrientation) {
            mCurrentAppOrientation = newOrientation;
            String rot = SystemProperties.get("persist.sys.app.rotation", "middle_port");//系统给了一个原生的,就用这个,如果系统没有给,那就自己创建
            //add start
            if (rot.equals("force_landscape_customer")) {
                mCurrentAppOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
            } else if (rot.equals("force_portrait_customer")) {
                mCurrentAppOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
            }
            //add end
            if (rot.equals("force_land") && "box".equals(SystemProperties.get("ro.target.product")))
                mCurrentAppOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
            if (isDefaultDisplay) {
                updateOrientationListenerLw();
            }
        }
        return updateRotationUnchecked(forceUpdate);
    }
    
    
 2.1 切换横屏时SystemUI导航栏固定在桌面右侧而不是底部
 R.bool.config_navBarCanMove 是否固定跟这个变量有关系,不跟随旋转false  跟随旋转true
 +++ b/frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -2895,9 +2895,10 @@ public class DisplayPolicy {
 
     void updateConfigurationAndScreenSizeDependentBehaviors() {
         final Resources res = getCurrentUserResources();
-        mNavigationBarCanMove =
-                mDisplayContent.mBaseDisplayWidth != mDisplayContent.mBaseDisplayHeight
-                        && res.getBoolean(R.bool.config_navBarCanMove);
+        //mNavigationBarCanMove =
+        //        mDisplayContent.mBaseDisplayWidth != mDisplayContent.mBaseDisplayHeight
+        //                && res.getBoolean(R.bool.config_navBarCanMove);
+        mNavigationBarCanMove = false;
         mDisplayContent.getDisplayRotation().updateUserDependentConfiguration(res);
     }

强制APP横竖屏方向_android 强制竖屏-

Android 11 系统默认横屏显示_高通android11默认横屏

标签:force,return,app,equals,竖屏,横屏,preferredRotation,rot
From: https://www.cnblogs.com/kato-T/p/18246611

相关文章

  • Android 11 自由窗口模式启动app
    //未定义publicstaticfinalintWINDOWING_MODE_UNDEFINED=0;//普通全屏窗口publicstaticfinalintWINDOWING_MODE_FULLSCREEN=1;//画中画publicstaticfinalintWINDOWING_MODE_PINNED=2;//分屏主窗口publicstaticfinali......
  • 海外一对一视频聊天APP开发搭建源码方案
    国际版1v1视频交友APP的基础功能和搭建应用程序的考虑方面,以下是进一步的分析和建议:一、基础功能优化建议注册和登录系统:简化流程:减少不必要的步骤,使注册和登录更加快速。第三方登录支持:增加对主流社交平台的登录支持,方便用户快速注册。用户验证:加强手机或邮箱验证,提高用户......
  • 语音厅语音房APP开发砸蛋社交源码软件搭建开发
    开发语音厅语音房软件确实是一项复杂且专业的任务,需要综合考虑市场需求、功能需求、技术选型、界面设计、开发工作、测试优化以及上线维护等多个方面。以下是针对您提供的内容的详细展开:一、市场需求分析进行语音厅语音房软件的开发前,首先需要对市场进行深入的调研,了解当前......
  • 情趣商城成人用品小程序APP开发源码搭建
    搭建成人情趣用品商城APP小程序是一个需要综合考虑多方面因素的复杂过程。下面,我将详细为您分析搭建过程中需要特别注意的几个关键点,并给出一些建议,以帮助您更好地规划和实施这个项目。一、市场定位与用户需求首先,您需要明确您的市场定位和目标用户群体。情趣用品市场有其特......
  • App UI 风格展现非凡创意
    AppUI风格展现非凡创意......
  • 基于云效 AppStack,5 分钟搞定一个 AI 应用的开发和部署
    实验介绍区别于传统的流水线工具,本实验将带你体验云效应用交付平台AppStack,从应用视角,完成一个AI聊天应用的高效交付。你将体验到:基于应用模板快速初始化应用,包含应用的代码库、部署编排架构、变量组、环境、研发流程等;应用多环境管理、多种部署策略、部署可观测能力;通过......
  • 基于云效 AppStack,5 分钟搞定一个 AI 应用的开发和部署
    实验介绍区别于传统的流水线工具,本实验将带你体验云效应用交付平台AppStack,从应用视角,完成一个AI聊天应用的高效交付。你将体验到:基于应用模板快速初始化应用,包含应用的代码库、部署编排架构、变量组、环境、研发流程等;应用多环境管理、多种部署策略、部署可观测能力;通过......
  • 短视频压缩与编码技术在短剧APP小程序开发中的应用:重要性分析
    在短剧APP小程序开发中,短视频的压缩与编码技术扮演着至关重要的角色。随着移动互联网的快速发展,用户对短视频内容的加载速度和播放质量提出了更高要求。本文将分析短视频压缩与编码技术对于短剧APP的重要性,并探讨其在实际开发中的应用。短视频压缩与编码技术的重要性提高加......
  • 短视频压缩与编码技术在短剧APP小程序开发中的应用:技术选择与工具推荐
    在短剧APP小程序开发中,选择合适的短视频压缩与编码技术及工具对于实现高效的视频处理至关重要。本文将探讨如何选择合适的技术和工具,以及推荐一些在实际开发中常用的解决方案。技术选择的原则平衡压缩率与视频质量:在选择压缩技术时,需要平衡压缩率与视频质量之间的关系。过......
  • 如何快速开发一个鸿蒙原生app
    华为鸿蒙操作系统(HarmonyOS)自2.0版本正式上线以来,在短时间内就部署超过了2亿台设备,纵观全球操作系统的发展史,也是十分罕见的。与其他手机操作系统不同,HarmonyOS自诞生之日起,就是一款面向多设备、分布式的万物互联操作系统。“1+8+N”是HarmonyOS打造的全场景战略,其中,“1”是智能......