默认锁屏方式

news/2024/10/22 7:30:10/

首先在自己手机的版本上显示的默认锁屏方式在“设置”->“安全”->“屏幕锁定方式”其值为“滑动”,

首先寻找“滑动”字符串packages/apps/Settings/res/values-zh-rCN/strings.xml

<string name="unlock_set_unlock_none_title" msgid="5679243878975864640">"滑动"</string>

被引用:

packages/apps/Settings/res/xml/security_settings_picker.xml

被引用:

packages/apps/Settings/src/com/android/settings/ChooseLockGeneric.java

没有其他发现,转而向寻找“安全”


<string name="security_settings_title" msgid="7945465324818485460">"安全"</string>
安全选项界面
<activity android:name="Settings$SecuritySettingsActivity"
                android:label="@string/security_settings_title"
                android:configChanges="orientation|keyboardHidden|screenSize"
                android:taskAffinity=""
                android:parentActivityName="Settings">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.settings.SECURITY_SETTINGS" />
                <action android:name="android.credentials.UNLOCK" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.VOICE_LAUNCH" />
            </intent-filter>
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.SecuritySettings" />
            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                android:resource="@id/security_settings" />
            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                android:value="true" />
        </activity>
别名设置:
<activity-alias android:name="SecuritySettings"
                android:label="@string/security_settings_title"
                android:configChanges="orientation|keyboardHidden|screenSize"
                android:exported="true"
                android:targetActivity="Settings$SecuritySettingsActivity">
            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                android:value="com.android.settings.SecuritySettings" />
            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
                android:resource="@id/security_settings" />
        </activity-alias>

所以找到SecuritySettings.java,这里是“设置”->"安全"界面,也是开始寻找如何修改默认锁屏方式的入口。

第二阶段:寻找判断的过程

决定分支走向显示“滑动”的判断

if (!lockPatternUtils.isSecure()) {

            // if there are multiple users, disable "None" setting

            UserManager mUm = (UserManager) context. getSystemService(Context.USER_SERVICE);

            List<UserInfo> users = mUm.getUsers(true);

            final boolean singleUser = users.size() == 1;

 

            if (singleUser && lockPatternUtils.isLockScreenDisabled()) {

                resid = R.xml.security_settings_lockscreen;

            } else {

                resid = R.xml.security_settings_chooser;

            }

        }

经过查看xml文件发现蓝色的是“滑动”的界面,随后会根据resid判断加载哪个xml:

addPreferencesFromResource(resid)

得到默认锁屏方式是“滑动”的条件:

(1)lockPatternUtils.isSecure() == false

(2)singleUser && lockPatternUtils.isLockScreenDisabled() == false

singleUser在单用户为true,主要看isLockScreenDisabled()是否为false

根据lockPatternUtils类型找到对应文件:

./frameworks/base/core/java/com/android/internal/widget/LockPatternUtils.java

为了isLockScreenDisabled()为false,getLong(DISABLE_LOCKSCREEN_KEY, 0)应该为0,或者在多用户模式特定情况下(当前情况不是,而且也暂未遇过),所以此处认为决定因素就是getLong(DISABLE_LOCKSCREEN_KEY, 0)的取值。
public boolean isLockScreenDisabled() {

        if (!isSecure() && getLong(DISABLE_LOCKSCREEN_KEY, 0) != 0) {

            // Check if the number of switchable users forces the lockscreen.

            final List<UserInfo> users = UserManager.get(mContext).getUsers(true);

            final int userCount = users.size();

            int switchableUsers = 0;

            for (int i = 0; i < userCount; i++) {

                if (users.get(i).supportsSwitchTo()) {

                    switchableUsers++;

                }

            }

            return switchableUsers < 2;

        }

        return false;

}

public final static String DISABLE_LOCKSCREEN_KEY = "lockscreen.disabled";

锁屏方式为“无”或“滑动”是在isSecure()为false,如果要修改默认锁屏方式从“无”到“滑动”,或者“滑动”到“无”,蓝色得到的

 

getLong()方法:

private long getLong(String secureSettingKey, long defaultValue) {

        try {

            return getLockSettings().getLong(secureSettingKey, defaultValue,

                    getCurrentOrCallingUserId());

        } catch (RemoteException re) {

            return defaultValue;

        }

}

调用:

private ILockSettings getLockSettings() {

        if (mLockSettingsService == null) {

            ILockSettings service = ILockSettings.Stub.asInterface(

                    ServiceManager.getService("lock_settings"));

            mLockSettingsService = service;

        }

        return mLockSettingsService;

}

对应服务(就是把ILockSettings去掉前面的I后再搜索相关文件,如果想详细点后面加上Service再找):

./frameworks/base/services/core/java/com/android/server/LockSettingsService.java

public long getLong(String key, long defaultValue, int userId) throws RemoteException {

        checkReadPermission(key, userId);

 

        String value = mStorage.readKeyValue(key, null, userId);

        return TextUtils.isEmpty(value) ? defaultValue : Long.parseLong(value);

}

private final LockSettingsStorage mStorage;

./frameworks/base/services/core/java/com/android/server/LockSettingsStorage.java

public String readKeyValue(String key, String defaultValue, int userId) {

        int version;

        synchronized (mCache) {

            if (mCache.hasKeyValue(key, userId)) {

                return mCache.peekKeyValue(key, defaultValue, userId);

            }

            version = mCache.getVersion();

        }

 

        Cursor cursor;

        Object result = DEFAULT;

        SQLiteDatabase db = mOpenHelper.getReadableDatabase();

        if ((cursor = db.query(TABLE, COLUMNS_FOR_QUERY,

                COLUMN_USERID + "=? AND " + COLUMN_KEY + "=?",

                new String[] { Integer.toString(userId), key },

                null, null, null)) != null) {

            if (cursor.moveToFirst()) {

                result = cursor.getString(0);

            }

            cursor.close();

        }

        mCache.putKeyValueIfUnchanged(key, result, userId, version);

        return result == DEFAULT ? defaultValue : (String) result;

    }

private static final String TABLE = "locksettings";

查询locksettings表的值lockscreen.disabled

对应文件/data/system/locksettings.db

我想直接改db文件的值应该也可以,不过这样改会使整个锁屏的逻辑放生变化,锁屏方式所不属于disable都发生改变从词意上也说不通,所以除非想试着玩还是别这么改。


数据库的lockscreen.disabled值的设置:

相关文件:

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

frameworks/base/core/java/android/provider/Settings.java:        public static final String LOCKSCREEN_DISABLED = "lockscreen.disabled";

DatabaseHelper.java文件:

 if (SystemProperties.getBoolean("ro.lockscreen.disable.default", false) == true) {

                loadSetting(stmt, Settings.System.LOCKSCREEN_DISABLED, "1");

            } else {

                loadBooleanSetting(stmt, Settings.System.LOCKSCREEN_DISABLED,

                        R.bool.def_lockscreen_disabled);

            }

private void loadBooleanSetting(SQLiteStatement stmt, String key, int resid) {

        loadSetting(stmt, key,

                mContext.getResources().getBoolean(resid) ? "1" : "0");

}

所以比较合适的修改是在ro.lockscreen.disable.default和def_lockscreen_disabled的值,这个肯定和原生及其他定制不同,应该看自己的实际代码(也许判断都不同)。

ro.locksreeen.disable.default的值在系统属性中,要查找具体的生成之处。

R.bool.def_lockscreen_disabledfalselockscreen.disabled值为0,否则为1

R.bool.def_lockscreen_disabled对应文件:

./frameworks/base/packages/SettingsProvider/res/values/defaults.xml:    <bool name="def_lockscreen_disabled">false</bool>

可能在定制系统的overlay里有相应的修改:

./device/generic/x86/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml:    <bool name="def_lockscreen_disabled">true</bool>

./device/generic/armv7-a-neon/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml:    <bool name="def_lockscreen_disabled">true</bool>


http://www.ppmy.cn/news/235583.html

相关文章

android设置系统锁屏时间或屏保显示时间

public static final String SCREEN_OFF_TIMEOUT "screen_off_timeout";private final int SCREEN_TIMEOUT_VALUE_NONE Integer.MAX_VALUE;//永不休眠private DreamBackend mBackend;//屏保管理类Overrideprotected void onCreate(Bundle savedInstanceState) {sup…

多御安全浏览器锁屏功能上线,详解设置浏览器锁屏的方法

2022年8月13日&#xff0c;多御安全浏览器锁屏功能正式上线啦&#xff01;此次最新版本android版 1.7.5增加了密码锁屏功能&#xff0c;旨在保护用户的隐私安全和数据安全&#xff0c;让隐私保护更进一步。那么这个锁屏功能在哪里&#xff0c;我们应该怎么设置浏览器锁屏呢&…

Win10如何设置快速锁屏?电脑怎么设置离开锁屏?

当用户想要暂时离开电脑&#xff0c;自然是不想被别人偷看到电脑里隐私&#xff0c;这时候就可以给电脑按快捷键一键锁屏&#xff0c;快捷又方便。还有一种方法可以在用户离开电脑后自动锁屏&#xff0c;下面就来看具体的设置方法。 深度技术 Ghost Win10 64位 精简优化版 方法…

win11怎么快速锁屏 Windows11快速锁屏的设置方法

当我们在使用电脑的过程中有时可能需要暂时离开一下&#xff0c;但是又不希望别人动自己的电脑&#xff0c;这个时候可以使用电脑的锁屏功能。今天小编就来给大家分享下Win11系统如何快速让电脑进入锁屏状态及锁屏密码的设置方法&#xff0c;下面一起来看看吧。更多win11教程&a…

电脑设置一键锁屏方法

短时间内不在电脑面前&#xff0c;又不想被别人偷窥隐私&#xff0c;可以对电脑设置一键锁屏。设置的方法也很简单&#xff0c;可以直接通过快捷键操作&#xff0c;下面我们就来看看具体的操作。 win10骨头精简版下载_win10最小精简版500m 64位装机系统下载 - 系统之家 win10…

系统架构设计师笔记第6期:计算机软件

计算机软件&#xff08;Computer Software&#xff09;是指由计算机程序和相关数据组成的指令集合&#xff0c;用于控制和协调计算机硬件执行特定任务和提供特定功能的系统。简而言之&#xff0c;计算机软件是指计算机系统中运行的程序和相关数据的集合。 计算机软件可以分为两…

骁龙660鸿蒙系统,骁龙660性能解析:对比骁龙653/821胜算几何?

骁龙660是高通今年上半年推出的一款定位中端的处理器&#xff0c;目前采用这颗芯片的手机是OPPO R11/R11 Plus。 相比前作骁龙653和去年的旗舰骁龙821&#xff0c;骁龙660的性能表现如何呢&#xff1f;与它们之间的差别在哪&#xff1f;接下来请看详细的跑分数据 1、基本参数 作…

骁龙8 gen1和骁龙870哪个好

骁龙8gen1采用的是台积电4nm制程&#xff0c;不过从目前情况看&#xff0c;苹果A15如果真的采用的台积电加强版5nm制程&#xff0c;那骁龙8gen1也会是同样的二代5nm。手机选骁龙8gen1还是骁龙870这些点很重要 http://www.adiannao.cn/7 CPU架构 CPU采用Kryo 780架构&#xff0c…