我有一个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
手动解锁屏幕时我的不显示?