выполнить нажатие кнопки «Назад» из окна наложения — android

#android #android-accessibility #android-overlay

#Android #Специальные возможности #android-наложение

Вопрос:

У меня есть вид наложения (LinearLayout), добавленный к WindowManager следующему набору параметров:

 private void setWindowParams(WindowManager.LayoutParams params) {
    params.height = WindowManager.LayoutParams.WRAP_CONTENT;
    params.width = WindowManager.LayoutParams.WRAP_CONTENT;
    params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
    params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
    params.format = PixelFormat.TRANSLUCENT;
    params.gravity = Gravity.CENTER;
}
  

Это линейное описание содержит три кнопки «HOME», «RECENTS», «BACK»

Я реализовал onKeyEvent() удаление этого вида наложения из диспетчера окон при нажатии кнопки «Назад» на телефоне.

Когда кнопка «Назад» нажата в моем макете наложения, я вызываю свою службу специальных возможностей, и она работает нормально. Теперь, когда я нажимаю кнопку «Назад» на своем телефоне, мой вид наложения сохраняется. Потому что он не получает ключевые события с тех пор, как у меня был WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE установлен этот флаг в параметрах.

Но когда я не установил этот флаг, нажатие кнопки «Назад» из overlay просто скрывает само наложение, а не выполняет обратное действие под ним.

Я хочу, чтобы мое наложение скрывалось при нажатии кнопки «Назад» на телефоне. А также для выполнения функции кнопки «Назад» при нажатии кнопки «Назад» из моего наложения.

Есть ли какой-либо способ отличить фактическое нажатие кнопки от нажатия кнопки, запускаемой программным performGlobalAction(MyAccessibilityService.ACTION_BACK) обеспечением? Любые предложения о том, как правильно это реализовать?

Ответ №1:

вы не можете этого сделать, потому что контекст диалогового окна будет уничтожен при прекращении действия, вы можете использовать WindowManager

Комментарии:

1. Спасибо за ответ. Я упомянул об этом в своем вопросе в качестве второго подхода. Тем не менее, это не сработало полностью

2. просто используйте removeview , чтобы удалить это диалоговое окно

3. Надеюсь, я понял свой вопрос. Я знал, что использование removeView () удалит его из окна. Но просто хочу знать, как вызвать это, когда нажата кнопка «Назад» системы, не затрагивая кнопку «Назад» моего наложения