无法让应用以编程方式解锁键盘 [None 现有解决方案有效!]
Can't get app to unlock keyboard programatically [None of existing solutions work!]
我已经通读了大约 10-15 篇关于 Whosebug 的帖子,所有这些帖子似乎都有解决提问者问题的答案,但我似乎无法让这些解决方案适用于我的案例。
我有一个允许设置闹钟的应用程序,该应用程序应该唤醒 phone(它确实如此)--> 解锁设备(它没有)--> 显示一个对话框(它确实如此)一旦手动解锁)
我在 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 class 的 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 class 接收广播,并且在 onReceive 中我使用对话框启动 activity。
我有一台 4.4.4 android 的三星 S3。我不确定这是否是 API 问题,但我就是无法使它正常工作。
phone 亮起并显示锁定屏幕,但在显示对话框之前等待我解锁它。
感谢您在这方面的任何帮助。
我将应用程序的主题从 Dialog.ALert 更改为 DeviceDefault.NoActionbar,然后它突然开始按照我想要的方式运行。
我可能认为不允许在键盘锁顶部显示对话框 activity,因此在我的案例中出现错误。
我已经通读了大约 10-15 篇关于 Whosebug 的帖子,所有这些帖子似乎都有解决提问者问题的答案,但我似乎无法让这些解决方案适用于我的案例。 我有一个允许设置闹钟的应用程序,该应用程序应该唤醒 phone(它确实如此)--> 解锁设备(它没有)--> 显示一个对话框(它确实如此)一旦手动解锁)
我在 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 class 的 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 class 接收广播,并且在 onReceive 中我使用对话框启动 activity。 我有一台 4.4.4 android 的三星 S3。我不确定这是否是 API 问题,但我就是无法使它正常工作。 phone 亮起并显示锁定屏幕,但在显示对话框之前等待我解锁它。 感谢您在这方面的任何帮助。
我将应用程序的主题从 Dialog.ALert 更改为 DeviceDefault.NoActionbar,然后它突然开始按照我想要的方式运行。 我可能认为不允许在键盘锁顶部显示对话框 activity,因此在我的案例中出现错误。