以编程方式在android中打开屏幕

use*_*122 10 android android-alarms android-windowmanager

我正在开发一个警报应用程序.从主要活动我使用广播设置闹钟.然后在广播接收器中的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);
Run Code Online (Sandbox Code Playgroud)

这适用于三星Galaxy S2与Android 2.3.4但不适用于htc与Android 2.3.5.在HTC它没有做任何事情,当我按下锁定按钮屏幕自动解锁而没有我拖动圆圈.就像flag_dissmiss_keygard一样,但是flag_turn_screen_on不是.这样做还有另一种方法或其他方法吗?

mar*_*mor 14

我开始时和你一样,窗户标志不起作用.

我终于通过使用两个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();
Run Code Online (Sandbox Code Playgroud)

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

您需要请求权限DISABLE_KEYGUARDWAKE_LOCK

  • 开发者,求求你们:请不要这样做!!! 只是想发出一个警告,禁止键盘锁执行它所说的内容:它绕过任何PIN或模式解锁.尝试长按家(姜饼)或应用程序切换按钮(ICS),你会看到我的意思.我在最受欢迎的手机上使用布局参数没有问题,姜饼手机的数量每天都在减少.请重新考虑窗口标志! (4认同)
  • 嘿@PatrickHorn可以指定一个绕过PIN锁定屏幕的设备示例.在我的测试中,我可以向用户显示我想要的消息,第二个用户试图回家或切换应用程序,他获得输入PIN屏幕.所以对我来说似乎足够安全. (4认同)