`
mars5337
  • 浏览: 89358 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

让Android设备永不锁屏

阅读更多
经过《让Android设备永不锁屏》文章中所述的修改,原以为已经完全让Android设备不锁屏了。后来发现我的Android设备烧录好之后第一次启动永远不会锁屏,但是设备重启之后开机就进入锁屏状态,解锁之后就再也不会锁屏了(因为永远不超时)。看来“革命尚未成功,同志仍需努力”啊。

     那么为什么启动之后没有进入锁屏状态呢?是不会系统有把超时锁屏的值给修改了呢?我通过sqlite3去查看settings.db的内容,发现超时锁屏的值仍然是-1。说明启动之后,系统并没有去数据库中查看屏幕超时锁屏的值,就直接锁屏了。

     但是怎样才能开机之后不进入锁屏状态呢?这个是个非常费思量的问题。经过go,我知道锁屏的代码在LockScreen.java中,然后顺藤摸瓜,终于找到了可以设置锁屏功能开关的位置。代码位于:

frameworks/policies/base/phone/com/android/internal/policy/impl/KeyguardViewMediator.java
该文件中有一个变量定义如下:

    /**
     * External apps (like the phone app) can tell us to disable the keygaurd.
     */
    private boolean mExternallyEnabled = true;
mExternallyEnabled是用来管理是否开启屏幕锁的关键。默认值是打开屏锁,根据注释可以知道他是希望应用程序来修改这个值。但是经过加打印信息发现开机的时候没有任何应用程序会修改它。修改这个值调用如下函数:

   /**
     * Same semantics as {@link WindowManagerPolicy#enableKeyguard}; provide
     * a way for external stuff to override normal keyguard behavior.  For instance
     * the phone app disables the keyguard when it receives incoming calls.
     */
    public void setKeyguardEnabled(boolean enabled) {
        synchronized (this) {
            if (DEBUG) Log.d(TAG, "setKeyguardEnabled(" + enabled + ")");

            mExternallyEnabled = enabled;

            if (!enabled && mShowing) {
                if (mExitSecureCallback != null) {
                    if (DEBUG) Log.d(TAG, "in process of verifyUnlock request, ignoring");
                    // we're in the process of handling a request to verify the user
                    // can get past the keyguard. ignore extraneous requests to disable / reenable
                    return;
                }

                // hiding keyguard that is showing, remember to reshow later
                if (DEBUG) Log.d(TAG, "remembering to reshow, hiding keyguard, "
                        + "disabling status bar expansion");
                mNeedToReshowWhenReenabled = true;
                hideLocked();
            } else if (enabled && mNeedToReshowWhenReenabled) {
                // reenabled after previously hidden, reshow
                if (DEBUG) Log.d(TAG, "previously hidden, reshowing, reenabling "
                        + "status bar expansion");
                mNeedToReshowWhenReenabled = false;

                if (mExitSecureCallback != null) {
                    if (DEBUG) Log.d(TAG, "onKeyguardExitResult(false), resetting");
                    mExitSecureCallback.onKeyguardExitResult(false);
                    mExitSecureCallback = null;
                    resetStateLocked();
                } else {
                    showLocked();

                    // block until we know the keygaurd is done drawing (and post a message
                    // to unblock us after a timeout so we don't risk blocking too long
                    // and causing an ANR).
                    mWaitingUntilKeyguardVisible = true;
                    mHandler.sendEmptyMessageDelayed(KEYGUARD_DONE_DRAWING, KEYGUARD_DONE_DRAWING_TIMEOUT_MS);
                    if (DEBUG) Log.d(TAG, "waiting until mWaitingUntilKeyguardVisible is false");
                    while (mWaitingUntilKeyguardVisible) {
                        try {
                            wait();
                        } catch (InterruptedException e) {
                            Thread.currentThread().interrupt();
                        }
                    }
                    if (DEBUG) Log.d(TAG, "done waiting for mWaitingUntilKeyguardVisible");
                }
            }
        }
    }
    经过上面的讨论我们可以发现我们有两个解决方法:

1、定义变量的时候,给其初始化为false。

2、在launcher模块启动的时候,调用setKeyguardEnabled方法,关闭锁屏功能。

    我懒得修改Laucher模块,我的解决方法就是在定义mExternallyEnabled时修改其初始值为false。各位朋友可以根据自己的实际情况选择解决方案。我的代码如下:

   /**
     * External apps (like the phone app) can tell us to disable the keygaurd.
     */
    private boolean mExternallyEnabled = false;
     这样修改之后,Android设备开机之后,默认不会进入锁屏状态,除非你在应用程序中调用setKeyguardEnabled方法显示打开这个功能。因为设置的超时时间为-1,则永远也不会进入锁屏界面。
分享到:
评论

相关推荐

    Android修改源代码控制永不锁屏

    Android修改源代码控制永不锁屏

    Android源码下修改后使机器不锁屏

    当我们想要实现让Android设备永不锁屏,我们需要深入到Android-x86的源码中进行修改。 首先,我们关注`SettingsProvider`模块,它是Android系统中处理设置数据的核心组件。在`Android-x86/frameworks/base/packages...

    Android13 默认锁屏方式为无

    Android13 默认锁屏方式为无.patch

    Android系统永不锁屏永不休眠的方法

    本篇文章将详细介绍两种实现Android系统永不锁屏和永不休眠的方法。 首先,我们要明白Android系统默认为了节省电量,会在一段时间无操作后自动进入休眠状态并锁屏。为了避免这种情况,开发者可以采取以下策略: 1....

    设置Android系统永不锁屏永不休眠的方法

    总结来说,要实现Android系统永不锁屏和永不休眠,我们需要对系统的设置和配置文件进行修改,包括移除休眠时间选项、禁用锁屏功能以及限制多用户支持。这些操作需要对Android系统有深入的理解,并且在执行时需谨慎,...

    Android中如何禁止屏幕休眠和锁屏

    Android 中如何禁止屏幕休眠和锁屏 Android 中禁止屏幕休眠和锁屏是一种常见的需求,特别是在开发一些需要长时间运行的程序时,例如 NowTV 或 XXX 播放器等。这些程序需要长时间保持屏幕常亮,以便用户可以无间断地...

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

    public static final String SCREEN_OFF_TIME...//永不休眠 private DreamBackend mBackend;//屏保管理类 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

    9.0 10.0去掉锁屏和息屏功能(永不息屏).rar

    - 安全性:禁用锁屏功能会降低设备的安全性,容易让他人访问你的设备。 - 电量消耗:保持屏幕常亮会显著增加电池消耗,建议在充电或者附近有电源的情况下使用。 - 系统稳定性:修改系统文件或服务可能会导致系统不...

    9.0 10.0屏蔽锁屏 息屏功能.rar

    在Android系统中,锁屏和息屏功能是设备的基本安全机制,它们有助于保护用户的隐私和设备的安全。然而,根据提供的标题和描述,我们探讨的是如何在Android 9.0 Pie和10.0版本上禁用这些功能,使得平板电脑可以保持...

    设置Android设备WIFI在休眠时永不断开的代码实现

    在Android系统中,为了节省电池,当设备进入休眠状态时,默认情况下,Wi-Fi连接可能会被关闭或进入一种节能模式。然而,在某些应用场景下,如持续的后台数据传输或者需要保持网络连接的实时应用,我们需要确保Wi-Fi...

    ANDROID 开发文档.pdf

    ANDROID状态条永不消失的处理方法** - **概述**:确保状态栏始终可见,不会因为特定操作而隐藏。 - **应用场景**:提供持续的状态信息展示。 **12. 在系统中添加两个状态栏的方法** - **概述**:实现同时显示两个...

    Android应用禁止屏幕休眠的3种方法

    WakeLock 是 Android 系统提供的一种机制,用于保持设备不进入休眠状态。开发者可以通过获取 WakeLock 权限来保持设备不休眠。下面是一个使用 WakeLock 的示例代码: ```java private WakeLock mWakeLock = null; ...

    NoSleep-移动端H5页面永不休眠插件

    这意味着用户在观看H5内容时,无论是Android还是iOS系统的手机,都能保持屏幕常亮,不会因为设备的自动休眠而打断浏览体验。 在描述中提到的问题是移动设备的常见现象,即当用户长时间浏览网页或使用应用时,设备...

    android平台的WIFI模块.pdf

    此外,为了节省电池,Android引入了WIFI休眠策略,用户可选择在充电时、永不或锁屏后断开Wi-Fi连接。然而,某些设备如OPAL手机可能存在休眠策略失效的问题,导致无法按预期休眠。 深入理解Android的Wi-Fi模块运行...

    android小设置.doc

    在Android系统中,用户可以自定义设备启动时显示的画面,主要包括开机Logo和开机壁纸。 - **开机Logo** - **文件路径**: - `./out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates/...

    IOS与Android安全架构对比.pdf

    Android系统也支持Bootloader锁,如锁屏密码或设备唯一解锁码,以防止未经授权的系统修改。 总的来说,iOS的安全策略更注重封闭性和集中控制,而Android则相对开放,依赖于开发者社区和用户的自我保护意识。两种...

Global site tag (gtag.js) - Google Analytics