FLAG_DISMISS_KEYGUARD不再在Android棒棒糖上工作



正如标题所说,我惊讶地发现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;
        }
    }
}

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

问候。

最新更新