Как отключить домашние и другие системные кнопки в Android?
мне нужно отключить домашние и другие системные кнопки в моем приложении для Android.
пример:MX Player ( смотрите в Google Play) - вы можете нажать значок "блокировка" на экране проигрывателя, и он блокирует все аппаратные и программные кнопки системы.
Он отлично работает без укоренения.
Я тестировал его на некоторых устройствах с различными версиями Android. Я попытался разобрать Kids Lock (плагин), но пока не знаю, как это работает.
I нужно же решение, как дети блокировки (плагин) для MX Player:
- отключить Home, Back и все другие системные кнопки.
какие предложения?
18 ответов:
во-первых, Пожалуйста, подумайте долго и упорно, если вы действительно хотите отключить
Homeкнопка или любая другая кнопка в этом отношении (например,), это не то, что должно быть сделано (по крайней мере, в большинстве случаев, это плохой дизайн). Я могу говорить только за себя, но если я загрузил приложение, которое не позволяет мне делать что-то вроде нажатия кнопки ОС, следующее, что я делаю, это удалить это приложение и оставить очень плохой обзор. Я также считаю, что ваше приложение не будет отображаться на магазин app Store.сейчас...
обратите внимание, что
MX Playerпросил разрешения рисовать поверх других приложений:
Так как вы не можете переопределить наAndroidустройство (по крайней мере, нет в последних версиях ОС).MX Playerрисует себя поверх вашей пусковой установки, когда вы "блокируете" приложение и нажимаете на .
Чтобы увидеть пример этого немного проще и прямо вперед, чтобы понять, вы можете увидеть Facebook Messenger App.как меня попросили предоставить дополнительную информацию о MX Player
Status BarиNavigation Bar"переопределение", я редактирую свой ответ, чтобы включить эти темы тоже.во-первых, MX Player использует Захватывающий Полноэкранный Режим ( DevBytes Video) на
KitKat.
Android 4.4 (уровень API 19) представляет новый SYSTEM_UI_FLAG_IMMERSIVE флаг setSystemUiVisibility () что позволяет приложение действительно "на весь экран."Этот флаг в сочетании с SYSTEM_UI_FLAG_HIDE_NAVIGATION и SYSTEM_UI_FLAG_FULLSCREEN флаги, скрывает навигации и строки состояния и позволяет фиксировать все события касания на экране.когда включен полноэкранный режим погружения, ваша активность продолжает получать все события касания. Пользователь может открыть системные панели с помощью внутреннего свайпа вдоль области, где обычно появляются системные панели. Этот очищает SYSTEM_UI_FLAG_HIDE_NAVIGATION флаг (и SYSTEM_UI_FLAG_FULLSCREEN флаг, если применяется), так что системные бары становятся видимыми. Это также вызывает вид.OnSystemUiVisibilityChangeListener, если установлено. Однако, если вы хотите, чтобы системные панели автоматически скрывались снова через несколько минут, вы можете вместо этого использовать SYSTEM_UI_FLAG_IMMERSIVE_STICKY флаг. Обратите внимание, что "липкая" версия флага не вызывает никаких прослушиватели, так как системные бары, временно показанные в этом режиме, находятся в переходном состоянии.
второй: скрытие строки состояния
Третье: скрытие панели навигации
Обратите внимание, что хотя использование immersive full screen только дляKitKat, спрятавStatus BarиNavigation Barне толькоKitKat.мне нечего сказать о 2-м и 3-м, вы понимаете, что я считаю, это быстро читается в любом случае. Просто убедитесь, что вы обратите пристальное внимание на вид.OnSystemUiVisibilityChangeListener.
я добавил суть, что объясняет, что я имел в виду, это не полный и нуждается в некоторой фиксации, но вы получите идею. https://gist.github.com/Epsiloni/8303531
удачи реализации этого, и получайте удовольствие!
я следовал shaobin0604 это!--5--> и мне наконец удалось заблокировать кнопку HOME, добавив:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />до
AndroidManifest.xmlвсе, что вам нужно сделать, это скопироватьHomeKeyLocker.javaС шаобинь это Либ в свой проект и реализовать его как в шаобинь это. Кстати: Android-версия моего AVD-это Android 4.0.3.
можно использовать Android-HomeKey-Locker чтобы отключить ключ HOME и другие системные клавиши (например, клавиша BACK и клавиша меню)
надеюсь, что это поможет вам в вашем приложении. Спасибо.
вы можете отключить кнопку home и recents Android 5.0, используя упомянутую функцию закрепления экрана здесь:
Android 5.0 представляет новый API закрепления экрана, который позволяет вам временно запретить пользователям покидать вашу задачу или прерываться по уведомлениям. Это может быть использовано, например, если вы разработка образовательного приложения для поддержки оценки высоких ставок требования на Android, или одноцелевое или киоск-приложение. Однажды ваше приложение активирует закрепление экрана, пользователи не могут видеть уведомления, доступ к другим приложениям или возврат на главный экран, пока ваше приложение выходит из режима.
вы можете заблокировать устройство, чтобы быть в киоске. Панель навигации не скрыта, но кнопки home и recents могут быть удалены или отключены в зависимости от того, как вы активируете режим. Я написал некоторую информацию после тестирования этой функции здесь.
просто догадка, но я думаю с SYSTEM_ALERT_WINDOW разрешения (отображается как "рисовать поверх других приложений", см. здесь) это может быть возможно: отображение вашего приложения в полноэкранном режиме,система оповещения типа
Это раньше можно было отключить кнопку Home, но теперь это не так. Это из-за вредоносной программы, которая перехватывала пользователя.
вы можете увидеть больше деталей здесь:отключить кнопку Home в Android 4.0+
наконец, кнопка Назад может быть отключена, как вы можете видеть в этом другом вопросе:отключить кнопку Назад в android
Я тоже искал это какое-то время и, наконец, смог сделать это так, как мне нужно, т. е. панель навигации недоступна, строка состояния недоступна, даже если вы долго нажимаете кнопку питания, ни меню питания, ни кнопки навигации не отображаются. Благодаря @Assaf Gamliel, его ответ привел меня на правильный путь. Я последовал этой учебник с некоторыми незначительными изменениями. При указании типа, я указал
WindowManager.LayoutParams.TYPE_SYSTEM_ERRORвместоWindowManager.LayoutParams.TYPE_PHONE, иначе наш "оверлей" не скроет систему палка. Вы можете поиграть с флагами, высотой, шириной и т. д., чтобы он вел себя так, как вы хотите.
Я не знаю, как diable кнопку Домой. пока мои знания я получил следующую ссылку.
см. ссылку: - http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HOME
константа кода ключа: домашний ключ. Этот ключ обрабатывается платформой и никогда не доставляется в приложения.
но, мы можем diable кнопку Назад. надеемся, что следующий код поможет вам.
@Override public void onBackPressed() { //return nothing return; }
сначала создайте способ :
public void hideNavigationBar() { final View decorView = this.getWindow().getDecorView(); final int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { YourActivityName.this.runOnUiThread(new Runnable() { @Override public void run() { decorView.setSystemUiVisibility(uiOptions); } }); } }; timer.scheduleAtFixedRate(task, 1, 2); }тогда вы вызываете его на
onCreate()метод вашей деятельности. Вызовите его снова наonResume()метод. Затем вы можете добавить еще один метод в свою деятельность следующим образом:@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); hideNavigationBar(); }вот и все. Помните, что он будет блокировать экран до следующего прикосновения пользователя к экрану, в классе таймера вы можете изменить задержку, и это позволит вам изменить вещи для этого экземпляра.Затем он снова заблокирует экран.
вы не можете отключить кнопку Home из ICS onwords, но можете отключить другие кнопки следующим образом
@Override public boolean dispatchKeyEvent(KeyEvent keyEvent){ return true; }
Post ICS т. е. Android 4+, переопределение HomeButton было удалено по соображениям безопасности, чтобы позволить пользователю выйти в случае, если приложение окажется вредоносным.
плюс, это не очень хорошая практика, чтобы не позволить пользователю выйти из приложения. Но, так как вы делаете приложение блокировки экрана, что вы можете сделать , это объявить активность в качестве пусковой установки, так что при нажатии HomeButton он просто перезапустит приложение и останется там сам (пользователи не заметят ничего, кроме небольшого мерцания на экране).
вы можете перейти по следующей ссылке:
http://dharmendra4android.blogspot.in/2012/05/override-home-button-in-android.html
откровенно говоря, невозможно отключить кнопку home, по крайней мере , на новых уровнях api, то есть с 4.0 и далее. Также не рекомендуется делать это. Однако вы можете заблокировать кнопку Назад, переопределив
public void onBackPressed() { // do not call super onBackPressed. }чтобы переопределить кнопку home, вы можете использовать таймер, например, и после каждого раза проверять, является ли главный экран вашим экраном или нет, или ваш пакет находится сверху или нет (я уверен, что вы получите ссылки на него), и отображать свою активность с помощью флага single_top.
таким образом, даже если кнопка home нажата, вы сможете вывести свое приложение на вершину.
также убедитесь, что приложение имеет способ выхода, потому что такие приложения могут действительно раздражать и никогда не должны разрабатываться.
удачи в кодировании.
P. S: невозможно перехватить событие home, когда нажата кнопка home.
вы можете использовать методы прикрепления к окну, а также методы keyguard, но не для уровни API, начиная с версии 4.0.
использование вращения вызывает исключение, поэтому я исправил свою активность, используя это:
HomeKeyLocker locker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_splash); locker = new HomeKeyLocker(); locker.lock(this); } @Override protected void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); locker.unlock(); } @Override public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged(config); locker.lock(this); }вы должны использовать предложение @Ле Зуй Куанг.
обновление старой теме. Мне удалось добиться того, что моя активность не складывается при нажатии кнопки home (физической или виртуальной). Вот мой код для деятельности
onCreate()способ:super.onCreate(savedInstanceState); setContentView(R.layout.activity_alarm_screen); context = getApplicationContext(); int windowType; if (Build.VERSION.SDK_INT>=26) windowType = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; else windowType = WindowManager.LayoutParams.TYPE_TOAST; final WindowManager.LayoutParams params = new WindowManager.LayoutParams( windowType, WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_FULLSCREEN, PixelFormat.TRANSLUCENT ); wm = (WindowManager) getApplicationContext() .getSystemService(Context.WINDOW_SERVICE); mTopView = (ViewGroup) getLayoutInflater().inflate(R.layout.activity_alarm_screen, null); getWindow().setAttributes(params); //Set up your views here testView = mTopView.findViewById(R.id.test); wm.addView(mTopView, params);на API 26 и выше вам нужно получить разрешение на наложение экрана от пользователя. Протестировано на Android 7 и 8.
Я работаю над приложением, которое должно заблокировать планшет только для приложения. Сначала я помещаю свое приложение в качестве MainLauncher, затем я блокирую панель задач с помощью AndroidView. Наконец я блокирую планшет. Это не функция, которую я указываю для использования в нескольких моделях планшетов, так как каждая модель устройства имеет функцию ее блокировки.
но в целом это работает для всех. Вы можете использовать команды
Java.Lang.Runtime.GetRuntime().Exec("su -c sed -i '/VOLUME_UP/s/^# //g' /system/usr/keylayout/Generic.kl");в качестве примера для отключения кнопки. Но все основано на изменение системных файлов, внутри папки " / system / usr / keylayout/...". Примечание: работает только на корневых устройствах.
другой способ, который я пытаюсь, хотя все еще разрабатываю, использует StreamWrite и StreamReader для доступа к корневому каталогу и перезаписи всего файла, чтобы отключить и включить кнопки.
надеюсь, что это помогает.
и какие вопросы остаются доступными.
для тех, кто хочет полностью удалите soft-nav на корневом (или пользовательском ПЗУ) android устройство, вы можете изменить
build.propтекстовый файл в системную папку.установите следующую переменную / значение:
gemu.hw.mainkeys=1это то, что поставщики используют для отключения мягкой навигации, когда у них есть физические кнопки.
извините за ответ через 2-3 года. но вы можете скрыть активность всех системных кнопок. Просто проверьте это мои ответы Как отключить кнопку виртуального дома в любой деятельности?.

Comments