正如标题所说,我很惊讶地发现FLAG_DISMISS_KEYGUARD标志在API 21(Lollipop)上不再起作用。
在kitkat中,设置此标志会消除不安全的键盘锁。
这是一个功能还是一个bug?什么是解决方法?
通过PowerManager类禁用键盘锁是一个选项,但它不能像解雇样式一样工作。可以吗?
答案 0 :(得分:3)
第一:这是一个错误。
第二,有解决方法吗?是。
因为我弄乱了这个问题甚至谷歌都不知道这个问题, 我就如何解决这个问题做了大量的研究。 这很容易。据推测,这个bug是注册的两个 时间安卓实习生。
诀窍是正手启动预运行活动,听取 在广播屏幕上,解雇键盘并开始真正的意图 活性。
代码:
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;
}
}
}
在您的真实活动中,您还必须添加解雇标记!
问候。