Android5.0去掉开机锁屏和休眠

先说以下需求吧:

  1. 开机不锁屏
  2. 开机后不锁屏
  3. 开机后按了电源键只熄屏不锁屏
  4. 以上功能的修改不影响设置熄屏时间

需求分析

由于我的应用是唯一的Launcher,也就是开机系统会自动启动的前端界面,那么可以使用DISABLE_KEYGUARD的方式实现开机不出现锁屏界面。但是仅仅是开机不出现锁屏界面是不够的,在进入到其他应用的时候,时间一长,还是会锁屏,你可能会说,那我就把所有的应用DISABLE_KEYGUARD。

嗯,听起来可行,不过如果用户按了电源键,那么这种方式还是不够靠谱。

应用程序开机不锁屏

这种方式是开机不出现锁屏,直接进入到指定应用(比如我这里的是替换了系统Launcher的自定义Launcher)。

<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

onCreate中加入,最好在setContentView(R.layout.main)之前

getWindow().setFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD, 
        WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 
        WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

应用程序全屏显示
在配置文件的《application》中加入

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

不休眠实现

不休眠可以修改系统源码,去掉休眠功能,但是这种代价太大,我们不知道改了之后会不会引起其他问题。因此从侧面入手,我发现可以修改休眠时间的方式达到效果。
主要在/frameworks/base/packages/SettingsProvider/res/values/defaults.xml中修改 ,
将def_screen_off_timeout休眠时间修改为最大值,最大值就是永不休眠。

<integer name="def_screen_off_timeout">2147483647</integer>

在修改休眠时间的时候我发现也可以通过配置的方式实现第一种效果,开机不锁屏。

我们来看一下SettingProvider中的源码:
vim frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/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);
            }

这里的意思是说,如果从系统属性中读到的禁用锁屏为true则执行禁用锁屏,否则采用def_lockscreen_disabled的配置,而def_lockscreen_disabled在SettingsProvider/res/values/defaults.xml 当中;

我们先来修改SettingsProvider/res/values/defaults.xml 试试
vim frameworks/base/packages/SettingsProvider/res/values/defaults.xml
修改def_lockscreen_disabled为true

<bool name="def_lockscreen_disabled">true</bool>

修改完成之后,记得把文件推过去

Z:\nexus_source\out\target\product\mako\system\priv-app\SettingsProvider>adb pus
h SettingsProvider.apk /system/priv-app/SettingsProvider/SettingsProvider.apk
Z:\nexus_source\out\target\product\mako\system\priv-app\SettingsProvider>adb reboot

嗯,我的设备不行,毛线效果都没有,因此,修改第一句:
修改源代码:
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

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

这里要注意,如果ro.lockscreen.disable.default默认是false的,我们可以先改成默认true,如果默认的配置配置的也是false,那么我们进入到配置文件里面改成true;
ss

电源键不锁屏

如何实现按下电源键不休眠呢?想不到这个也能配置,修改def_screenshot_button_show为false可以屏蔽电源键锁屏功能,若是没有这个参数可以手动添加
位于:
frameworks/base/packages/SettingsProvider/res/values/default.xml

<bool name="def_screenshot_button_show">false</bool>

锁定休眠时间

到了这里基本差不多了,但是为了防止用户手动设置休眠时间,我们还可以通过修改源码的方式,让用户的修改失效,这个是从源码里面看到的,当作参考:
/packages/apps/Settings/src/com/android/settings/DisplaySettings.java

@Override
    public boolean onPreferenceChange(Preference preference, Object objValue) {
        final String key = preference.getKey();
        if (KEY_SCREEN_TIMEOUT.equals(key)) {
            try {
                int value = Integer.parseInt((String) objValue);
                value = Integer.MAX_VALUE;//larsonzhong@163.com added
                Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value);
                updateTimeoutPreferenceDescription(value);
            } catch (NumberFormatException e) {
                Log.e(TAG, "could not persist screen timeout setting", e);
            }
        }
        if (KEY_FONT_SIZE.equals(key)) {
            writeFontSizePreference(objValue);
        }
        if (preference == mAutoBrightnessPreference) {
            boolean auto = (Boolean) objValue;
            Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE,
                    auto ? SCREEN_BRIGHTNESS_MODE_AUTOMATIC : SCREEN_BRIGHTNESS_MODE_MANUAL);
        }
        if (preference == mLiftToWakePreference) {
            boolean value = (Boolean) objValue;
            Settings.Secure.putInt(getContentResolver(), WAKE_GESTURE_ENABLED, value ? 1 : 0);
        }
        if (preference == mDozePreference) {
            boolean value = (Boolean) objValue;
            Settings.Secure.putInt(getContentResolver(), DOZE_ENABLED, value ? 1 : 0);
        }
        return true;
    }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯人院的院长大人

给点实际性的支持不?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值