无法通过编程方式获取应用程序解锁键盘[现有解决方案均无效!]

时间:2015-10-03 22:00:47

标签: android alarmmanager android-alarms keyguard keyguardlock

我已经阅读了Stackoverflow上大约10-15个帖子,所有这些帖子似乎都有解决提问者问题的答案,但我似乎无法让这些解决方案适用于我的案例。 我有一个允许设置闹钟的应用程序,应用程序应该唤醒手机(它确实如此) - >解锁设备(它没有) - >显示一个对话框(一旦手动解锁就会执行)

我在Activity的OnCreate()中有以下代码,由AlarmReceiver启动

KeyguardManager keyguardManager = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE);
    KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
    keyguardLock.disableKeyguard();

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

在AlarmReceiver类的OnReceive中,我使用以下代码调用WakeLocker.acquire()方法,该方法是静态方法:

public static void acquire(final Context ctx) {
    if (wakeLock != null) wakeLock.release();

    final PowerManager pm = (PowerManager) ctx.getSystemService(Context.POWER_SERVICE);
    wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
                              PowerManager.ACQUIRE_CAUSES_WAKEUP |
                              PowerManager.ON_AFTER_RELEASE, "TAG");
    wakeLock.acquire();
}

我的AndroidManifest.xml包含以下权限

android.permission.WAKE_LOCK
android.permission.DISABLE_KEYGUARD

我使用WakefulBroadcastReceiver类来接收广播,在onReceive中我用对话框启动活动。 我有一个带有4.4.4 android的三星S3。我不确定这是否是一个API问题,但我不能让这个东西工作。 手机亮起并显示锁定屏幕,但在向我显示对话框之前,它等待我解锁。 感谢您在这方面的任何帮助。

1 个答案:

答案 0 :(得分:1)

我将我的应用程序的主题从Dialog.ALert更改为DeviceDefault.NoActionbar,突然它开始以我想要的方式工作。 我可能认为不允许在键盘上显示对话活动,因此我的情况就是错误。