FLAG_DISMISS_KEYGUARD不再使用Android Lollipop了吗?

时间:2015-01-14 17:00:56

标签: android

正如标题所说,我很惊讶地发现FLAG_DISMISS_KEYGUARD标志在API 21(Lollipop)上不再起作用。

在kitkat中,设置此标志会消除不安全的键盘锁。

这是一个功能还是一个bug?什么是解决方法?

通过PowerManager类禁用键盘锁是一个选项,但它不能像解雇样式一样工作。可以吗?

1 个答案:

答案 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;
        }
    }
}

在您的真实活动中,您还必须添加解雇标记!

问候。