我有一个广播接收器(BroadcastReceiver),它启动了一个活动(Activity)。如果屏幕开着时启动该活动,则会显示一切正常。但是,在ICS和JB设备上(我尚未测试GB或HC,但在Froyo上不存在此问题),如果在屏幕关闭时启动该活动,则锁屏不会被禁用,并且在手机解锁时不会显示该活动(无论是手动解锁还是使用我放置的代码后Froyo设备)。
在 AlarmGoneOffActivity.onCreate() 方法中:
为什么至少在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()
之前一直处于禁用状态,这很不方便。有什么解决办法吗?
编辑2: 我现在可以确认该问题仅存在于ICS及以上版本中。是否有什么更改防止键盘锁被禁用?即使有,为什么我的Activity
在屏幕被手动解锁时也没有显示?
KeyguardLock.disableKeyguard()
是有效的,这是解决问题的方法。 - Eliezer