Android 13 自动旋转屏幕 重启后关闭的问题

介绍

近期在Android 13 上发现当打开自动旋转屏幕后关机,重新启动后自动旋转屏幕关闭了

修改

路径:vendor/mediatek/proprietary/frameworks/base/settingsprovider/java/com/mediatek/provider/MtkSettingsExt.java

        public static final String ACCELEROMETER_ROTATION_RESTORE= "accelerometer_rotation_restore";

实际上这里我们排查时发现 settings list system 

accelerometer_rotation_restore      //这个值通过代码找到发现是在关机动画的patch中后加入的问题就出在这里。

accelerometer_rotation   //自动旋转开关的值

路径:vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/MtkShutdownThread.java

    private boolean showShutdownAnimation(Context context) {beginAnimationTime = 0;if (isCustBootAnim() == ANIMATION_MODE) {configShutdownAnimation(context);// Show Shutdown AnimationbootanimCust(context);return true;}return false;}private static void bootanimCust(Context context) {boolean isRotaionEnabled = false;// [MTK] fix shutdown animation timing issueSystemProperties.set("service.shutanim.running", "0");Log.i(TAG, "set service.shutanim.running to 0");try {isRotaionEnabled = Settings.System.getInt(context.getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 1) != 0;//这里是在关机时如果自动旋转开启,则先关闭自动旋转在执行关机动画,其中还记录了一个ACCELEROMETER_ROTATION_RESTORE的值但是没有其他地方调用if (isRotaionEnabled) {final IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));if (wm != null) {wm.freezeRotation(Surface.ROTATION_0);}Settings.System.putInt(context.getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 0);Settings.System.putInt(context.getContentResolver(),MtkSettingsExt.System.ACCELEROMETER_ROTATION_RESTORE, 1);//既然没有用到这个值,我们就用这个值来判断什么时候保存自动旋转的状态,当自动旋转关闭时我们put 0//*/soda water.20231228 Automatic rotation save}else{Settings.System.putInt(context.getContentResolver(),MtkSettingsExt.System.ACCELEROMETER_ROTATION_RESTORE, 0);}//*/} catch (NullPointerException ex) {Log.e(TAG, "check Rotation: context object is null when get Rotation");} catch (RemoteException e) {e.printStackTrace();}beginAnimationTime = SystemClock.elapsedRealtime() + MIN_SHUTDOWN_ANIMATION_PLAY_TIME;//Disable key dispatchtry {final IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));if (wm != null) {wm.setEventDispatching(false);}} catch (RemoteException e) {e.printStackTrace();}//Disable key dispatchstartBootAnimation();}

上面我们已经用ACCELEROMETER_ROTATION_RESTORE 记录了自动旋转的值,这里为什么不直接删掉

                Settings.System.putInt(context.getContentResolver(),
                        Settings.System.ACCELEROMETER_ROTATION, 0);

,因为执行关机动画时不希望屏幕可以旋转。

接下来我们执行在开机时finishBooting的中读ACCELEROMETER_ROTATION_RESTORE的值当为1时来putACCELEROMETER_ROTATION的值为1即可。

路径:frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

//*/soda water.20231228 Automatic rotation save
import android.provider.Settings;
//*/public class ActivityManagerService extends IActivityManager.Stubimplements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback, ActivityManagerGlobalLock {//.....略final void finishBooting() {//*/soda water.20231228 Automatic rotation savetry {boolean rotation = Settings.System.getInt(mContext.getContentResolver(),"accelerometer_rotation_restore", 0) == 1;if(rotation){Settings.System.putInt(mContext.getContentResolver(),Settings.System.ACCELEROMETER_ROTATION,1);}} catch (Exception ex) {}//*/}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows10系统的音频不可用,使用疑难解答后提示【 一个或多个音频服务未运行】

一、问题描述 打开电脑,发现电脑右下角的音频图标显示为X(即不可用,无法播放声音),使用音频自带的【声音问题疑难解答】(选中音频图标,点击鼠标右键,然后选择“声音问题疑难解答(T)”…

英飞凌TC3xx之一起认识GTM系列(五)如何实现GTM与DSADC关联的配置

英飞凌TC3xx之一起认识GTM系列(五)如何实现GTM与DSADC关联的配置 1 GTM与DSADC的连接1.1 EDSADC 到 GTM 的连接1.1.1 工作原理说明1.1.2 应用举例1.2 GTM 到 EDSADC 的连接1.2.1 工作原理说明1.2.2 应用举例2 总结编者按:笔者在从事这部分开发工作的时候,看着手册上的各种通…

17-网络安全框架及模型-信息流模型(FM)

目录 信息流模型(FM) 1 背景概述 2 基本概念 3 基本原理 4 应用领域 5 信息流分析方法 6 优势和局限性 7 应用场景 8 挑战和机遇 信息流模型(FM) 1 背景概述 在当今数字化时代,信息的传输和交换变得越来越重…

Git 常用命令知识笔记

Git 仓库数据结构 Git 仓库由一个个的 commit 组成某些 commit 上会有一些 branch 指向它们,这些 branch 的本质是引用有一个特殊的引用叫做 HEAD,它始终指向当前的位置,这个位置可以是 commit,也可以是 branch staging area 暂存…

学习记录——BiSeNet V2

BiSeNet V2: Bilateral Network with Guided Aggregation for Real-time Semantic Segmentation BiSeNet V2:基于引导聚合的双边网络实时语义分割 摘要在语义分割中,低级细节和高级语义都是必不可少的。然而,为了加快模型推理的速度,目前的方法几乎总是牺牲底层的细节,这导…

基于时空的Ramsar湿地自动淹没映射利用Google Earth Engine

题目:Spatiotemporal‑based automated inundation mapping of Ramsar wetlands using Google Earth Engine 期刊:Scientific Reports 第一作者:Manish KumarGoyal 发表单位:University of Nebraska 发表日期:2023年 1. 摘要 研究背景:湿地是生态系统中最关键的组成…

ctfshow 新手必刷菜狗杯 谜之栅栏题解记录

知识点:图片比较 拿到之后,有两个图片,直观看不出什么,尝试用工具比较。 用010editor打开其中一个,010editor的工具里面就有比较文件选项,比较两个文件,发现有一处不同。题目说栅栏&#xff0c…

八股文打卡day16——计算机网络(16)

面试题:TCP连接是如何确保可靠性的? 我的回答: 1.数据分块控制。应用数据被分成被认为最适合传输的数据块大小,再发送到传输层,数据块被称为数据报文段或数据段。 2.序列号和确认应答。TCP为每一个数据包分配了一个序…

【Vulnhub 靶场】【Looz: 1】【简单】【20210802】

1、环境介绍 靶场介绍:https://www.vulnhub.com/entry/looz-1,732/ 靶场下载:https://download.vulnhub.com/looz/Looz.zip 靶场难度:简单 发布日期:2021年08月02日 文件大小:2.1 GB 靶场作者:mhz_cyber &…

商标和专利是不是一回事儿?那它们究竟有什么区别呀?

商标和专利都是属于知识产权的一种,但它们的含义是不同的。 1.商标: 商标是指商品的生产者或经营者在其商品或服务上使用的标志,用于标识商品或服务的来源、品质、特点等。商标可以是文字、图形、字母、数字、颜色、声音等,也可…

八个理由:从java8升级到Java17

目录 前言 1. 局部变量类型推断 2.switch表达式 3.文本块 4.Records 5.模式匹配instanceof 6. 密封类 7. HttpClient 8.性能和内存管理能力提高 前言 从Java 8 到 Java 20,Java 已经走过了漫长的道路,自 Java 8 以来,Java 生态系统…

kivy开发一个登陆界面

Kivy Kivy是一个用于开发跨平台移动应用(如Android和iOS)以及桌面应用(如Windows、Linux和macOS)的Python框架。它采用开源许可证(MIT许可证),提供了丰富的图形界面组件和工具,以便…

链表:约瑟夫环

#include<iostream> using namespace std; struct Circle //创建结构体Circle {int index; //编号Circle* next; //指针变量next指向一个节点 }; Circle* CreateList(int n) //创建链表 {Circle* head, * p; //head为头指针&#xff0c;p为当前指针head p new Circle;…

C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合

上一篇&#xff1a; C#&#xff0c;入门教程(03)——Visual Studio 2022编写彩色Hello World与动画效果https://blog.csdn.net/beijinghorn/article/details/123478581 C#&#xff0c;入门教程(01)—— Visual Studio 2022 免费安装的详细图文与动画教程https://blog.csdn.net…

【CSS】布局方式梳理和总结

1. 前言 网页布局是CSS的重点功能&#xff0c;布局的传统方案是基于盒子模型&#xff0c;依靠display属性、position属性和float属性&#xff0c;它对一些特殊布局很麻烦。 CSS3推出的Flex布局和网格布局&#xff0c;让开发者更容易定制自己想要的布局。本篇梳理和总结一些布局…

java常见面试题:请解释一下Java中的常用ORM框架,如Hibernate、MyBatis等。

ORM&#xff08;Object-Relational Mapping&#xff09;框架在Java中主要用于将关系型数据库中的数据映射到Java对象&#xff0c;从而使得开发者可以更加方便地操作数据库&#xff0c;而不需要编写大量的SQL代码。以下是两个常用的ORM框架&#xff1a;Hibernate和MyBatis。 Hi…

【Delphi 基础知识 8】常用的运算符

目录 算术运算符关系运算符逻辑运算符位运算符 Delphi是一种基于Object Pascal语言的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它支持多种运算符用于执行各种操作。以下是一些常见的Delphi运算符&#xff0c;以及简单的代码示例&#xff1a; 算术运算符 &#xff…

安装Hadoop:Hadoop的单机模式、伪分布式模式——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项

前言 Hadoop包括三种安装模式&#xff1a; 单机模式&#xff1a;只在一台机器上运行&#xff0c;存储是采用本地文件系统&#xff0c;没有采用分布式文件系统HDFS&#xff1b;伪分布式模式&#xff1a;存储采用分布式文件系统HDFS&#xff0c;但是&#xff0c;HDFS的名称节点…

门控循环单元(GRU)-多输入时序预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分代码&#xff1a; 四、完整代码数据下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译…

工具--Git详解快来看看吧

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习产出&#xff1a; Git的基本概念和工作原理&#xff1a; 版本控制系统的发展历程&#xff1b; 分布式版本控制系统的优势&#xff1b; Git的基本概念&#xff1a;仓库、提交、分支等&#xff1b; Git的工作原理&#xff1a…