【问题标题】:How to reveal that screen is locked?如何显示屏幕已锁定?
【发布时间】:2011-05-31 10:57:05
【问题描述】:

在我的应用程序中,我需要知道设备何时被锁定(在 HTC 上,它看起来像短按“电源”按钮)。所以问题是:当设备被锁定时会触发哪个事件?或者设备要休眠了?

【问题讨论】:

    标签: android sleep power-off


    【解决方案1】:

    你应该扩展BroadcastReceiver并实现onReceive,像这样:

    public class YourBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (Intent.ACTION_SCREEN_OFF.equalsIgnoreCase(intent.getAction())) {
                //screen has been switched off!
            }
        }
    }
    

    然后你只需要注册它,你就会在屏幕关闭时开始接收事件:

    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    appBroadcastReceiver = new AppBroadcastReceiver(yourActivity);
    registerReceiver(appBroadcastReceiver, filter);
    

    【讨论】:

    • 如果你想检查设备是否被锁定,你可以使用this solution的方法。不幸的是,设备锁定没有广播,但我发现能够检查它是否被锁定很有用。
    【解决方案2】:

    有更好的办法:

    KeyguardManager myKM = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
    if( myKM.inKeyguardRestrictedInputMode()) {
     //it is locked
    } else {
     //it is not locked
    }
    

    【讨论】:

    【解决方案3】:

    除了上述答案之外,如果您想在您的应用位于前台时触发某些操作:

    您可以使用名为 onResume() 的事件来触发您自己的函数,当您的应用从之前的静止状态(即,如果您的应用处于后台(暂停/最小化。 ..)

    protected void onResume()
    {
        super.onResume();
    
        //call user-defined function here
    }
    

    【讨论】:

    • 不,这不合适,因为 onResume() 每次活动开始时都会调用,所以不知道它是在睡眠之后还是刚刚创建
    • 是的。确实。只是一个建议:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    相关资源
    最近更新 更多