【发布时间】:2012-10-19 17:49:48
【问题描述】:
我有一个BroadcastReceiver,它以Activity 开头。如果在屏幕打开时启动Activity,它会显示并且一切正常。但是,在 ICS 和 JB 设备上(我尚未测试 GB 或 HC,但 Froyo 不存在该问题)如果在屏幕关闭时启动 Activity,则不会禁用锁屏,并且不会禁用活动当手机解锁时显示(通过手动解锁或使用我为后 Froyo 设备输入的代码)。
为什么,至少在 ICS 和 JB 设备上,如果没有下面提到的代码,锁屏不会被禁用,为什么在启动 Activity 时如果屏幕关闭,活动不显示?
代码如下:
在BroadcastReceiver:
Intent alarmAlert = new Intent(context, AlarmGoneOffActivity.class);
alarmAlert.putExtra(MyAlarmManager.ALARM_NUM_ID, alarm.ID);
alarmAlert.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_NO_USER_ACTION);
context.startActivity(alarmAlert);
在AlarmGoneOffActivity.onCreate():
setContentView(R.layout.alarm_gone_off);
final Window win = getWindow();
win.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
//so far all of my post froyo devices (ICS and JB no more GB)
// don't bypass the lockscreen unless we use this
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) {
KeyguardManager myKeyGuard =
(KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock myLock = myKeyGuard.newKeyguardLock("ShabbosAlarm");
myLock.disableKeyguard();
}
编辑:我真的不想使用KeyguardLock.disableKeyguard(),因为它会导致键盘保护在KeyguardLock.reenableKeyguard() 之前被禁用,这很不方便。有什么解决办法吗?
Edit2:我现在可以确认该问题仅存在于 ICS 及更高版本上。是否进行了某些更改以防止键盘锁被禁用?即使有,为什么手动解锁屏幕时我的Activity 不显示?
【问题讨论】:
-
是否安装了任何设备策略管理器?检查doc。如果安装了 DPM,它就不起作用
-
我想你误会了。使用
KeyguardLock.disableKeyguard()工作正常。这是解决问题的方法。 -
@Eliezer 你解决过这个问题吗?我面临着完全相同的问题,无论我如何弄乱窗口标志,键盘保护都不会禁用......
-
@brandall 不幸的是我还没有解决这个问题,虽然我有一段时间没有真正专注于那个应用程序。如果找到解决方案,我会更新。
-
@Eliezer - 谢谢。经过一夜的努力,我设法在没有使用 Keyguard 许可的情况下解决了它。我将在今天晚些时候发布我的答案
标签: android android-activity android-screen android-windowmanager