Полноэкранное приложение для Android — запретить доступ к строке состояния

Я создаю полноэкранное приложение, которое будет работать в режиме «киоска», поэтому пользователь не сможет выйти. Приложение определяется как лаунчер (домашний экран).

Activity в манифесте определяется с помощью:

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

Кроме того, Activity обеспечивает полноэкранный режим со следующим в onCreate():

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

Однако кажется, что строка состояния все еще доступна. По умолчанию он скрыт, но его все равно можно отобразить, коснувшись и потянув верхнюю часть экрана (где он отображается с полупрозрачным фоном вместо обычного сплошного черного).

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

Я уверен, что все это работало нормально и не позволяло отображать строку состояния, не прибегая к хакерству. Но что-то где-то изменилось. Я обновился до последней стоковой прошивки и системного ПО - возможно, это что-то изменило?

В настоящее время устройство работает Android 4.4.4. Я полагаю, что это могло быть на 4.4.1 раньше.

Было ли это когда-либо возможно? Скорее всего, что-то изменилось в Android или я что-то сломал, или это все время ломалось, а я только сейчас заметил?

Обратите внимание, что это относится к специализированному промышленному устройству (Honeywell Dolphin 75e), которое не может быть рутировано.


person SystemParadox    schedule 22.07.2016    source источник
comment
привет, я работаю над тем же типом приложения, не могли бы вы помочь. Я пытаюсь отключить строку состояния, кнопку «домой» и «история».   -  person    schedule 13.12.2020
comment
В итоге мне пришлось придерживаться прозрачного наложения в моем приложении, которое перехватывает события касания.   -  person SystemParadox    schedule 14.12.2020
comment
Не могли бы вы поделиться со мной кодом, потому что я пробовал это, но навигация отображается над палкой   -  person    schedule 14.12.2020


Ответы (2)


Однако кажется, что строка состояния все еще доступна.

Да, потому что запущен пакет com.android.systemui, который отвечает за строку состояния и панель навигации программного обеспечения. Ниже приведено несколько решений по отключению пакета. Обратите внимание для использования решений необходимы расширенные привилегии (в идеале root).

Перезагрузите постоянное решение

Переименуйте расширение apk в /system/app/SystemUI.apk или полностью удалите файл. Вы должны перемонтировать раздел /system, так как по умолчанию он доступен только для чтения. После переименования/удаления системы скорее всего удалите пакет /data/data/com.android.systemui. Если нет, сделайте это вручную, затем перезагрузитесь.

Перезагрузите непостоянное решение

Отключите/включите службу платформы во время выполнения (например, при запуске вашего приложения) с помощью вызовов (действительных по крайней мере до KitKat) для:

service call activity 42 s16 com.android.systemui  // disable status bar

и

am startservice -n com.android.systemui/.SystemUIService  // enable status bar

Обратите внимание, что решение не сохраняется при перезагрузке.

person Onik    schedule 22.07.2016

поместите этот код в метод oncreate

int myflag= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;

getWindow().getDecorView().setSystemUiVisibility(myflag);

подробнее https://developer.android.com/training/system-ui/immersive.html

person sajjad muhammadi    schedule 22.07.2016
comment
Кажется, это не имеет никакого значения, строка состояния по-прежнему становится видимой, если ее потянуть вниз сверху. На иммерсивной странице: пользователь может открыть системные панели, проведя пальцем внутрь по области, где системные панели обычно появляются. - person SystemParadox; 27.07.2016