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

标签 android android-alarms android-windowmanager

我正在开发一个警报应用程序。在主要 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_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

关于android - 以编程方式在android中打开屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966506/

相关文章:

android - jenkins使用2个git存储库,在其中一个中构建android apk,在另一个中运行maven测试

android - 在 RecyclerView Adapter 中使用带有 Activity 作为参数的方法

android - 由于缺少 keystore.properties 文件,Gradle 构建失败

唤醒屏幕时不显示 Android Activity 且锁定屏幕不禁用

android - 如何获取包括 subview 在内的布局中的 View 总数

android - Android 语言环境

Android 偏好设置 : How to load the default values when the user hasn't used the preferences-screen?

android - 安卓报警应用

android AlarmClock 设置音量和铃声

android - 调用 setContentView() 后设置窗口布局