С активным защитным ключом переход между действиями странный

У меня есть основное действие A, и когда пользователь нажимает кнопку, я открываю другое действие B. Но когда это происходит, B не просто появляется поверх A:

  • А исчезает
  • появляется защищенная клавиатура
  • Б появляется

И когда я избавляюсь от B, происходит то же самое. Это раздражает, потому что на экране много беспричинного мерцания. Есть ли способ добиться прямого перехода от A к B, когда keyguard активен, не объединяя 2 действия в 1?

Вот что я делаю в onCreate для обоих действий:

getWindow().addFlags(
        WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

И вот как я начинаю деятельность:

        final Intent intent = new Intent(Sand.this, EditRule.class);
        intent.putExtra(DB.KEY_PARENT_ID, id);
        intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        startActivityForResult(intent, 0);
        overridePendingTransition(0, 0);

Я также попытался установить null android:windowAnimationStyle в теме активности, но не повезло.

ОБНОВЛЕНИЕ: я сообщил об этой ошибке: https://code.google.com/p/android/issues/detail?id=68465&thanks=68465&ts=1397301860

Спасибо, Тео


person Sandman    schedule 29.03.2014    source источник
comment
Та же проблема (stackoverflow.com/questions/22389765/), но решения пока нет. Мне будет интересно посмотреть, найдете ли вы решение.   -  person Randy    schedule 06.04.2014
comment
Я уже начал думать, что я единственный на планете с этой проблемой :) На самом деле я ищу решение уже больше года. Я увидел действительно тонкий эффект с Intent.FLAG_ACTIVITY_NO_ANIMATION, который в моих тестах немного ускоряет «мерцание», но не устраняет его. Если в конце награды не будет решения, я думаю, что отправлю сообщение об ошибке.   -  person Sandman    schedule 06.04.2014
comment
Просто убедитесь, что я понимаю это, когда вы переключаетесь между действием A и действием B, ваш экран блокировки появляется, затем закрывается, а затем появляется ваше новое действие?   -  person zgc7009    schedule 11.04.2014
comment
У вас была возможность посмотреть этот пост? stackoverflow.com/questions/22389765/   -  person zgc7009    schedule 11.04.2014
comment
Да, это то, что происходит (и я видел этот пост, Рэнди ссылался на тот же пост в первом комментарии :) я пробовал все в нем, но не повезло. Если на самом деле нет решения, я думаю, что можно с уверенностью рассматривать это как ошибку, потому что блокировка клавиатуры «украла» фокус. Приложение не теряет фокус, если блокировка клавиатуры разблокирована. ИМХО, возможно, способ установки WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | Проблема заключается в флагах WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED для каждого действия. Пока активность не успела установить эти флаги, часть ее уже загрузилась без этих флагов...   -  person Sandman    schedule 11.04.2014
comment
... значит, охранник считает, что можно идти вперед. Возможно, мы должны каким-то образом установить эти флаги для всего приложения.   -  person Sandman    schedule 11.04.2014


Ответы (1)


Я тщательно изучил это (с парой других инженеров) год назад или около того на ICS и JB. Не удалось избежать мерцания, которое, я сильно подозреваю, все еще имеет место в KitKat. Вы должны зарегистрировать эту ошибку.

(Если вы посмотрите на исходный код, связанный с Keyguard в Android, то увидите, что это довольно... изрядная масса кода/политики, пронизанная особыми случаями. Поскольку этот случай нигде явно не задокументирован, даже если вы можете заставить его работать на одной версии, я бы не стал полагаться на то, что он будет работать стабильно.)

В конце концов, мы решили эту проблему, объединив весь наш пользовательский интерфейс, который не должен мерцать на экране блокировки, в одно действие. Было неприятно, но сработало.

person mik3y    schedule 11.04.2014