IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> [RK3399][industry-71] Android->SettingsProvider:概率性出现开机后没有初始化成功导致默认值没有设置成功 -> 正文阅读

[移动开发][RK3399][industry-71] Android->SettingsProvider:概率性出现开机后没有初始化成功导致默认值没有设置成功

测试平台

Platform: RK3399
OS: industry-71

现象

测试反馈,测试过程中概率出现机器开机15s后会自动休眠,但是固件中设置的是永不休眠

分析

分析发现是由于SettingsProvider的设置项没有初始化,导致获取的是PowerManagerService默认的15s
//PowerManagerService.java:162: private static final int DEFAULT_SCREEN_OFF_TIMEOUT = 15 * 1000;
怀疑是升级开机立刻断电或者其他原因造成SettingsProvider值没有报错

解决方案

系统原本SettingsProvider在升级初始化后,就不会再次初始化。现在改为在每次开机都会检测system、global和secure的部分必备值,若无则重新初始化》

From 1b6e990f4691f249330360a146690f16baad25fb Mon Sep 17 00:00:00 2001
From: sjf <sjf@t-chip.com.cn>
Date: Thu, 2 Dec 2021 17:33:28 +0800
Subject: [PATCH] =?UTF-8?q?Android->SettingsProvider:=E5=BC=80=E6=9C=BA?=
 =?UTF-8?q?=E6=97=B6=E6=A3=80=E6=B5=8Bsystem=E3=80=81global=E5=92=8Csecure?=
 =?UTF-8?q?=E7=9A=84=E9=83=A8=E5=88=86=E5=BF=85=E5=A4=87=E5=80=BC,?=
 =?UTF-8?q?=E8=8B=A5=E6=97=A0=E5=88=99=E9=87=8D=E6=96=B0=E5=88=9D=E5=A7=8B?=
 =?UTF-8?q?=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../providers/settings/SettingsProvider.java  | 63 ++++++++++++++++++-
 1 file changed, 60 insertions(+), 3 deletions(-)

diff --git a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index fec33a2708..b3c5e2f1bc 100644
--- a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -79,6 +79,8 @@ import java.util.List;
 import java.util.Set;
 import java.util.regex.Pattern;
 
+import android.util.Log;
+
 /**
  * <p>
  * This class is a content provider that publishes the system settings.
@@ -1821,17 +1823,59 @@ public class SettingsProvider extends ContentProvider {
 
         private void migrateAllLegacySettingsIfNeeded() {
             synchronized (mLock) {
                 final int key = makeKey(SETTINGS_TYPE_GLOBAL, UserHandle.USER_SYSTEM);
                 File globalFile = getSettingsFile(key);
-                if (globalFile.exists()) {
-                    return;
-                }
+                // if (globalFile.exists()) {
+                //     return;
+                // }
 
                 final long identity = Binder.clearCallingIdentity();
                 try {
                     List<UserInfo> users = mUserManager.getUsers(true);
 
                     final int userCount = users.size();
+
+                    boolean needReset = false;
+                    if(globalFile.exists()){
+                        for (int i = 0; i < userCount; i++) {
+                            final int userId = users.get(i).id;
+                            UpgradeController upgrader = new UpgradeController(userId);
+                            Log.v(LOG_TAG,"userId:"+userId);
+                            SettingsState secureSettings = upgrader.getSecureSettingsLocked(userId);
+                            Setting currentSetting = secureSettings
+                                .getSettingLocked(Settings.Secure.USER_SETUP_COMPLETE);
+                            if (currentSetting.isNull()) {
+                                Log.v(LOG_TAG,"Secure.USER_SETUP_COMPLETE is null");
+                                needReset = true;
+                                break;
+                            }
+
+                            SettingsState globalSettings = upgrader.getGlobalSettingsLocked();
+                            currentSetting = globalSettings
+                                .getSettingLocked(Settings.Global.DEVICE_PROVISIONED);
+                            if (currentSetting.isNull()) {
+                                Log.v(LOG_TAG,"Global.DEVICE_PROVISIONED is null");
+                                needReset = true;
+                                break;
+                            }
+
+                            SettingsState systemSettings = upgrader.getSystemSettingsLocked(userId);
+                            currentSetting = systemSettings
+                                .getSettingLocked(Settings.System.SCREEN_OFF_TIMEOUT);
+                            if (currentSetting.isNull()) {
+                                Log.v(LOG_TAG,"System.SCREEN_OFF_TIMEOUT is null");
+                                needReset = true;
+                                break;
+                            }
+
+                        }
+                    }
+
+                    if (globalFile.exists() && !needReset) {
+                        return;
+                    }
+
                     for (int i = 0; i < userCount; i++) {
                         final int userId = users.get(i).id;
 
@@ -1847,6 +1891,19 @@ public class SettingsProvider extends ContentProvider {
                         if (!mUserManager.isUserRunning(new UserHandle(userId))) {
                             removeUserStateLocked(userId, false);
                         }
+
+                        if(needReset){
+                            final SettingsState globalSettings = upgrader.getGlobalSettingsLocked();
+                            globalSettings.updateSettingLocked(Settings.Global.DEVICE_PROVISIONED,
+                                    "1",
+                                    SettingsState.SYSTEM_PACKAGE_NAME);
+
+                            SettingsState secureSettings = upgrader.getSecureSettingsLocked(userId);
+                            secureSettings.insertSettingLocked(Settings.Secure.USER_SETUP_COMPLETE,
+                                    "1",
+                                    SettingsState.SYSTEM_PACKAGE_NAME);
+
+                        }
                     }
                 } finally {
                     Binder.restoreCallingIdentity(identity);
-- 
2.20.1


  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:19:35  更:2022-04-06 23:21:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 21:22:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码