我正在开发一个警报应用程序。在主要 Activity 中,我使用广播设置了闹钟。然后在广播接收器的 onReceive 中,我调用了使用户能够关闭或暂停闹钟的 Activity ...在该 Activity 中,在 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 的 Samsung Galaxy S2 上完美运行,但不适用于装有 android 2.3.5 的 htc。在 htc 上,它什么都不做,当我按下锁定按钮时,屏幕会自动解锁,而无需我拖动圆圈。它就像 flag_dissmiss_keygard 正在工作,但 flag_turn_screen_on 没有。是否有其他方法或其他解决方案来执行此操作?
最佳答案
我一开始很像你,窗口标志并没有真正起作用。
我终于通过使用两个 Android 服务让它工作:KEYGUARD_SERVICE
和 POWER_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_KEYGUARD
和 WAKE_LOCK
关于android - 以编程方式在android中打开屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966506/