Что это за таинственное место «коснись и держи», которое минимизирует мое приложение, и могу ли я его отключить? - PullRequest
0 голосов
/ 28 марта 2020

Я разработал игровой движок для Android в Java, и он предназначен для создания двумерных платформерных игр. Главный персонаж перемещается влево или вправо в ответ на то, что пользователь касается и удерживает палец в одной из двух невидимых «полос», проходящих вертикально вдоль левой и правой границ экрана. Игра предназначена для работы как в книжной, так и в альбомной ориентации, и местоположение невидимых полос обновляется соответствующим образом.

Во время инициализации я делаю следующее с моим объектом SurfaceView:

// Set the content to appear full screen, and to allow the navigation bars
// to be pulled up from offscreen with a swipe action at the screen's edge.
a_GameView.setSystemUiVisibility(
   View.SYSTEM_UI_FLAG_LAYOUT_STABLE
 | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
 | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
 | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION        // hide nav bar
 | View.SYSTEM_UI_FLAG_FULLSCREEN             // hide status bar
 | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
   );

В портретном режиме играет как во сне. Проблема возникает, когда вы играете в альбомной ориентации. Допустим, я повернул свой телефон на 90 градусов по часовой стрелке - теперь то, что раньше было верхней частью моего экрана, - это то, где находится моя правая полоса, а то, что раньше было нижней частью моего экрана, - это то, где находится моя левая полоса. Перемещение персонажа влево работает ~ 99% времени, но если вы нажмете пальцем на одну точку (точно там, где будет кнопка «Домой», если бы мое приложение не скрывало ее), вы получите нежелательную реакцию. Когда-то телефон вибрирует очень легко, приложение продолжает работать, но как только вы даете go, вы получаете второе легкое колебание, и приложение минимизируется, возвращая вас на главный экран.

Это не так Похоже, это то же самое, что и нажатие кнопки «Домой», потому что это происходит только при нажатии и удерживании. Это не может быть вызвано быстрым нажатием на сладкое пятно.

Мой вопрос : кто-нибудь может объяснить мне, какой механизм ОС Android контролирует эту реакцию, и возможно ли это для меня отключить только этот механизм?

Очевидно, я хочу, чтобы пользователь мог выйти из приложения в любое время, но я хочу добиться того, чтобы он выполнял пролистывание вверх к ' потяните вверх панель навигации, чтобы выйти. Я не хочу, чтобы это одно приятное место существовало, потому что я не хочу, чтобы пользователь случайно свернул игру при попытке переместить своего персонажа.

Любое понимание высоко ценится, спасибо!

РЕДАКТИРОВАТЬ: С момента публикации я подтвердил, что это не происходит на LG G5. Это происходит только на Samsung Galaxy S8 +, который я использовал для разработки, поэтому он, кажется, уникален для указания c аромата (ов) Android.

1 Ответ

0 голосов
/ 05 апреля 2020

После дополнительных исследований я наконец нашел ответ. Таинственное сладкое пятно является результатом функции «Жесткая кнопка Домой» в Samsung Galaxy S8 +. Его можно отключить в: Настройки -> Дисплей -> Панель навигации.

Эта функция позволяет нажимать кнопку «Домой» даже в том случае, если ее не видно, применяя большее давление, чем обычно. Это дополнительное давление, которое вызывает это, а не «касание и удержание», как я первоначально описал.

...