正如标题所说,我惊讶地发现FLAG_DISMISS_KEYGUARD标志在API 21(棒棒糖)上不再起作用。
在 kitkat 中,设置此标志将关闭不安全的键盘护罩。
那么这是一个功能还是一个错误?解决方法是什么?
通过PowerManager类禁用键盘锁是一种选择,但它不能像关闭样式那样工作。可以吗?
首先:这是一个错误。
其次,有解决方法吗?是的。
因为我偶然发现了这个问题,甚至谷歌也不知道这个问题,我对如何解决这个问题做了大量的研究。这很容易。该错误可能是键盘锁注册了两个时代安卓实习生。
诀窍是正手开始一个预赛活动,听屏幕在广播中,关闭键盘锁并开始您的真实意图活动。
法典:
public class KeyGuardDismissActivity extends Activity {
private ScreenOnReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LOG.d("Start keyguard dismisser!");
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
startActivity(new SomeOtherActivityIntent(getApplicationContext()));
finish();
return;
}
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
receiver = new ScreenOnReceiver();
registerReceiver(receiver, receiver.getFilter());
}
private void dismissingKeyguard() {
LOG.d("Dismissing keyguard!");
SomeOtherActivityIntent yourRealActivity = new SomeOtherActivityIntent(getApplicationContext(), this);
startActivity(yourRealActivity );
if (receiver != null) {
unregisterReceiver(receiver);
}
finish();
}
private class ScreenOnReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
LOG.d("Screen on, yay!");
dismissingKeyguard();
}
public IntentFilter getFilter() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
return filter;
}
}
}
在您的实际活动中,您还必须添加解雇标志!
问候。