1

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

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

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 问题,但我无法让这件事正常工作。手机会亮起并显示锁定屏幕,但它会等待我解锁,然后再显示对话框。感谢您在这方面的任何帮助。

4

1 回答 1

1

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

于 2015-10-24T23:53:46.113 回答