11

我正在开发一个警报应用程序。在主要活动中,我使用广播设置了警报。然后在广播接收器的 onReceive 中,我调用使用户能够关闭或暂停警报的活动...在该活动中,在 onCreate 的开头,我使用此行来打开屏幕并解锁设备:

final Window win = getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                  | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                  | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

这适用于带有 android 2.3.4 的三星 Galaxy S2,但不适用于带有 android 2.3.5 的 htc。在 htc 上它什么也不做,当我按下锁定按钮屏幕自动解锁而无需我拖动圆圈。它就像 flag_dissmiss_keygard 正在工作,但 flag_turn_screen_on 没有。是否有另一种方法或另一种解决方案来做到这一点?

4

3 回答 3

15

我开始和你很像,窗口标志并没有真正起作用。

我终于通过使用两个 Android 服务让它工作了:KEYGUARD_SERVICEPOWER_SERVICE

KeyguardManager km = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
final KeyguardManager.KeyguardLock kl = km.newKeyguardLock("MyKeyguardLock");
kl.disableKeyguard();

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
        | PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
wakeLock.acquire();

完成后不要忘记释放唤醒锁。

您需要请求权限DISABLE_KEYGUARDWAKE_LOCK

于 2012-07-29T09:25:58.817 回答
2

这是解决方案

WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT,
            LayoutParams.TYPE_SYSTEM_ALERT |
                    LayoutParams.TYPE_SYSTEM_OVERLAY,
                    LayoutParams.FLAG_NOT_TOUCH_MODAL |
                    LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                    LayoutParams.FLAG_KEEP_SCREEN_ON|
                    LayoutParams.FLAG_DISMISS_KEYGUARD|
                    LayoutParams.FLAG_TURN_SCREEN_ON,
            PixelFormat.TRANSPARENT);

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
    km.isKeyguardLocked();

    windowManager.addView(mTopView, params);
    getWindow().setBackgroundDrawable();
于 2016-03-08T13:55:45.700 回答
1

我的应用程序也遇到了许多问题。实际上,当用户按两次后退按钮时,我想要屏幕锁定。并在用户按下主页按钮时解锁。

解锁设备 marmor 的代码是正确的。:) 我用过这段代码。

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
                WakeLock wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
                                                 | PowerManager.ACQUIRE_CAUSES_WAKEUP
                                                 | PowerManager.ON_AFTER_RELEASE, "MyWakeLock");
                wakeLock.acquire();
于 2014-08-25T07:14:08.647 回答