Легкий способ скрыть системную панель на Android ICS

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

Мой планшет укоренен, и я знаю, что такое приложение может мне помочь, но мне не нужны все дополнительные функции этого приложения.

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

У 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 есть новая функция, называемая режимом immersive, которая скрывает как системные, так и статусные бары. Пользовательский интерфейс системы переключается пользователем с помощью прокручивания края сверху или снизу экрана. Для более подробной информации смотрите:

http://developer.android.com/reference/android/view/View.html#setSystemUiVisibility(int)

Использование нового режима 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); 

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

Чтобы получить реальный полный экран, работающий на моих недорогих планшетах в Китае, мне нужно отредактировать файл, расположенный в

 system/build.prop 

Заменить текст

 ro.property.tabletUI=true 

с

 #ro.property.tabletUI=true 

(Я комментирую строку). После этого я могу получить полный экран, используя

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

Для каждого действия в minfest.xml

Это решение хорошо, только если вы продаете планшеты с вашим приложением и system/build.prop привилегиях root для редактирования system/build.prop . Таким образом, это не решение для всех , поэтому, пожалуйста, не уменьшайте этот небольшой вклад.

EDIT: Я заметил, что у моих планшетов есть аппаратные кнопки (Home, menù и back) на фреймах. Таким образом, Android позволяет мне скрывать системную панель. Я пробовал с другими планшетами, у которых нет аппаратных кнопок без успеха .

Google предполагает, что Android будет использоваться только для потребителей. Они интегрировали панель UI системы более жестко в Android ICS (4.0), чтобы люди не укореняли устройство и не убивали планку таким образом. Попытка удалить процесс системной панели не позволит ОС полностью загрузиться.

Если вы хотите ограничить доступ пользователей к главному экрану, вам не повезло с Android ICS. Я бы предложил найти производство планшетов, которые предварительно загружают устройство с Android 2.3. Либо это, либо использовать корневое устройство Android 3.x.

Если вы намерены использовать Android для киосков или заблокированных устройств, вам лучше ориентироваться на OS, которая немного более открыта.

Я нашел решение, которое в моем случае работает, как шарм, скрывая панель меню даже на устройстве NOT ROOTED:

Установка этого флага

 layoutparams.flags = 0x80000000 | layoutparams.flags; 

К параметрам макета моего окна просто делает трюк!

Вот полный фрагмент, который я использовал:

  Window window = getWindow(); android.view.WindowManager.LayoutParams layoutparams = window.getAttributes(); layoutparams.flags = 0x80000000 | layoutparams.flags; window.setAttributes(layoutparams); 

В моей деятельности onCreate.

Чтобы узнать об этом, я обратил внимание на несистемный Apk, который обнаружил, что он как-то мог это сделать.

Согласно официальной документации:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

Что «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

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

Intereting Posts
Не удалось создать сообщение об ошибке класса BuildConfig в eclipse Запуск приложения Android в Eclipse вызывает NullPointerException Android :: Webview удаляет полосу прокрутки для DIV Синхронизировать данные приложения с Android-приложения на ПК С RecyclerView, Пикассо все еще необходим? ImageView getLayoutParams () возвращает null Android, как поставить диалоговое окно после нажатия кнопки «Назад» Карты Google не отображаются в подписанном apk Android ScrollView добавляет дополнительные дополнения в верхней и нижней части детского изображения Получение запроса разрешения «на автономный доступ» при вызове GoogleAuthUtil.getToken Обнаруживать, установлена ​​ли Flash на Android и встроить Flash-видео в действие Void android.support.v4.app.Fragment.setMenuVisibility (boolean) 'для ссылки на нулевой объект NDK не настроен на выпуск в андроид-студии Не удается отправить UDP-пакеты с компьютера разработки на Android-эмулятор Обработчики, инициализированные с помощью Looper.getMainLooper (), не отвечают на обратные вызовы сообщений