Во-первых: Это ошибка.
Во-вторых, есть ли обходной путь? Да.
Потому что я наткнулся на эту проблему, и даже Google не знал этой проблемы, Я сделал потрясающее исследование о том, как обойти это. Это довольно легко. Вероятно, ошибка связана с тем, что keyguard зарегистрирован двумя раз.
Хитрость заключается в том, чтобы начать предварительно работает активность в переда, слушая экрана на передачах, увольнении и блокировки клавиатуры начать свой реальный intented активность.
Код:
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;
}
}
}
В вашей реальной деятельности вы должны добавить уволить флаг, тоже!
Приветствия.
Кто-нибудь? Я удивлен, что разработчики писали об этой проблеме в своих заметках о выпуске, но об этом не упоминается во всем Интернете. Никто даже не признает это официально – anandbibek
Это ошибка. https://code.google.com/p/android-developer-preview/issues/detail?id=1902 – JacksOnF1re