Простой способ скрыть системную панель на Android ICS
Я передам свои планшеты ICS пользователям, которые будут заполнять опрос, поэтому я бы хотел, чтобы пользователь работал только с моим приложением. Они не должны иметь возможность переключаться на домашний экран, нажимать кнопки назад и т. Д., Поэтому я хотел бы полностью скрыть системную панель.
Мой планшет рутирован, и я знаю, что такое приложение может помочь мне, но мне не нужны все дополнительные функции этого приложения.
Я нашел этот учебник, который мог бы помочь мне, но если бы я мог добавить код, чтобы сделать его самостоятельно, было бы здорово.
8 ответов
HideBar имеет режим киоска специально для этого случая использования.
Бесплатная загрузка доступна на http://ppareit.github.com/HideBar/. Вы также можете найти его на рынке по адресу https://play.google.com/store/apps/details?id=be.ppareit.hidebar.
Если вы хотите включить его в свое приложение для тестирования / опроса, вы всегда можете связаться с разработчиком (см. Ссылки по электронной почте). Код может быть объяснен или Intent
чтобы скрыться можно было бы обеспечить.
После долгих поисков в Интернете мне удалось скрыть системную панель и отобразить ее на устройстве 4.2 с помощью:
Прятаться:
Runtime.getRuntime().exec("service call activity 42 s16 com.android.systemui");
Или используйте 79 вместо 42 для API менее 14. Вам также может потребоваться включить разрешение SET_DEBUG_APP, в этом случае вам необходимо подписать приложение с помощью системного ключа или установить в каталог / system / app /.
Показывать:
Runtime.getRuntime().exec("am startservice --user 0 -n com.android.systemui/.SystemUIService");
Кроме того, некоторые люди использовали опцию -a (вместо -n), хотя это вызывало ошибку на моем устройстве:
Ошибка не найдена; служба не запущена
В Android 4.4 появилась новая функция, которая называется режимом погружения, которая скрывает как систему, так и строки состояния. Пользовательский интерфейс системы переключается пользователем с помощью прокрутки края сверху или снизу экрана. Для более подробной информации взгляните на:
http://developer.android.com/reference/android/view/View.html
Использование нового режима IMMERSIVE в Android KitKat
Например:
getWindow().getDecorView().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
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE)
Проверьте эту ссылку: (требуется root) http://android.serverbox.ch/?p=306
Подобный вопрос был размещен здесь также: есть ли способ скрыть системную панель в Android 3.0? Это внутреннее устройство, и я управляю навигацией
или попробуйте HideBar http://ppareit.github.com/HideBar/
На самом деле вы можете просто перевести системную панель в режим "Отключение", кнопки и уведомления на системной панели будут недоступны.
View v = findViewById(R.id.view_id);
v.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
Я хочу добавить некоторую информацию в существующие ответы, надеясь, что она будет кому-то полезна.
Чтобы получить настоящий полноэкранный режим, работающий на моих недорогих планшетах China, мне нужно отредактировать файл, расположенный в
system/build.prop
заменить текст
ro.property.tabletUI=true
с
#ro.property.tabletUI=true
(Комментирую строчку). После этого я могу получить полный экран, используя
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
за каждое действие в файле minfest.xml
Это решение подходит только в том случае, если вы продаете планшеты вместе со своим приложением и нуждаетесь в привилегиях root для редактирования system/build.prop
, Так что это не решение для всех, поэтому, пожалуйста, не уменьшайте этот маленький вклад.
РЕДАКТИРОВАТЬ: я заметил, что на моих планшетах есть аппаратные кнопки (дома, меню и обратно) на рамах. Таким образом, Android позволяет мне скрыть системную панель. Я пробовал с другими планшетами, у которых нет аппаратных кнопок без успеха.
Google планирует использовать Android только для потребителей. Они плотнее интегрировали панель System UI в Android ICS (4.0), чтобы люди не могли рутировать устройство и таким образом убивать панель. Попытка удалить процесс системной панели помешает полной загрузке ОС.
Если вы хотите ограничить доступ пользователей к домашнему экрану, то вам не повезло с Android ICS. Я бы посоветовал найти производителя планшетов, который будет предварительно загружать устройство с Android 2.3. Либо так, либо используйте рутованное устройство Android 3.x.
Если вы намереваетесь использовать Android для киосков или заблокированных устройств, вам лучше ориентироваться на более открытую ОС.
Я нашел решение, которое, в моем случае использования, работает как чудо, скрывая строку меню даже на устройстве НЕ ROOTED:
установка этого флага
layoutparams.flags = 0x80000000 | layoutparams.flags;
с параметрами макета моего окна просто делает свое дело!
Вот полный фрагмент, который я использовал:
Window window = getWindow();
android.view.WindowManager.LayoutParams layoutparams = window.getAttributes();
layoutparams.flags = 0x80000000 | layoutparams.flags;
window.setAttributes(layoutparams);
в моей деятельности по созданию.
Чтобы выяснить это, я обратил внимание на несистемный Apk, который я нашел и каким-то образом смог сделать.
Согласно официальной документации:
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html
что "0x80000000" - это FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, представленный как системная константа на уровне 21 API, и это в основном указывает, что "это окно отвечает за отрисовку фона для системных панелей". и поскольку я не рисую вручную системную панель, строка меню не отображается.
Я тестировал это только на паре Moverio BT-200 под управлением Android ICS 4.0.3, потому что это устройство, над которым я сейчас работаю, а также потому, что сейчас у меня под рукой нет другого устройства с уровнями Api до 19. чтобы проверить это.
Существует обходной путь для отключения строки меню (не скрытия) во всех большинстве всех планшетов без рута. Но это немного сложно, но работает чисто. Несколько хорошо известных на данный момент приложений, использующих эту стратегию для достижения этой функции отключения панели меню для своих приложений.
- Предоставьте привилегии администратора (для активации требуется однократное участие пользователя).
- Установите пароль и заблокируйте устройство с помощью API-интерфейса устройства.
- Затем загрузите все пользовательские интерфейсы поверх экрана блокировки. (Конечно, при каждом переходе между действиями будет отображаться экран блокировки фона. Но если логика организована хорошо, она будет плавной и менее заметной для пользователя)
- Когда необходимо включить обратно, сбросьте пароль на "", используя resetPassword("", 0) объекта диспетчера политики устройств.
Чтобы дополнить уже предоставленные ответы, и в случае, если это полезно для кого-то, нуждающегося в аналогичном поведении, есть это руководство для устройств Android версии 4.0 и выше, в котором рассказывается, как скрыть панель навигации и строку состояния (они появятся, когда снова коснулся экрана):
https://developer.android.com/training/system-ui/navigation.html
Я понимаю, что это не то, что вам нужно, но может быть полезно для кого-то, кто смотрит на эту проблему.