Jak wyłączyć Home i inne przyciski systemowe w Androidzie?

80

Muszę wyłączyć przycisk Home i inne przyciski systemowe w mojej aplikacji na Androida.

Przykład: MX Player ( patrz w Google Play ) - możesz nacisnąć ikonę "kłódki" na ekranie odtwarzacza i zablokuje ona wszystkie przyciski sprzętowe i systemowe.

Działa dobrze BEZ ROOTOWANIA.

Przetestowałem to na niektórych urządzeniach z różnymi wersjami Androida. Próbowałem zdemontować Kids Lock (wtyczkę), ale nie mam jeszcze pojęcia, jak to działa.

Potrzebuję tego samego rozwiązania, co Kids Lock (wtyczka) do MX Player: - wyłączania Home, Back i wszystkich innych przycisków systemowych.

Jakieś sugestie?

user1024
źródło
1
stackoverflow.com/questions/17183905/… . nie możesz wyłączyć przycisku Home.
Raghunandan
2
@ user1024 czy znalazłeś jakieś rozwiązanie dla swojego pytania? Ponieważ chcę również zrobić tę samą funkcjonalność, co w MX Player.
Chirag Shah
2
Sposób MX Player jest dość interesujący. W rzeczywistości powstrzymują powrót paska nawigacji.
nhaarman
Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? Muszę też dowiedzieć się, jak wyłączyć te przyciski. A przynajmniej jak mogę zarządzać przyciskiem wielozadaniowości.
portfoliobuilder
Możesz sprawdzić moją odpowiedź, myślę, że pomoże Ci osiągnąć to, czego chcesz stackoverflow.com/a/28603790/3300883
Miguel

Odpowiedzi:

91

Po pierwsze, zastanów się długo i intensywnie, jeśli naprawdę chcesz wyłączyć Homeprzycisk lub jakikolwiek inny przycisk w tej sprawie (np. BackPrzycisk), nie jest to coś, co należy robić (przynajmniej w większości przypadków jest to zły projekt ). Mogę mówić tylko za siebie, ale jeśli pobrałem aplikację, która nie pozwala mi zrobić czegoś takiego jak kliknięcie przycisku systemu operacyjnego, następną rzeczą, jaką robię, jest odinstalowanie tej aplikacji i pozostawienie bardzo złej recenzji. Uważam również, że Twoja aplikacja nie będzie prezentowana w App Store.

Teraz...

Zwróć uwagę, że MX Playerprosi się o pozwolenie na rysowanie na innych aplikacjach: MX Player permissions
Ponieważ nie możesz zastąpić Homeprzycisku na Androidurządzeniu (przynajmniej nie w najnowszych wersjach systemu operacyjnego). MX Playerrysuje się nad programem uruchamiającym po „zablokowaniu” aplikacji i kliknięciu Homeprzycisku.
Aby zobaczyć przykład tego, który jest nieco prostszy i bardziej zrozumiały, możesz zobaczyć aplikację Facebook Messenger .

Ponieważ poproszono mnie o podanie więcej informacji na temat MX Player Status Bari Navigation Bar„zastępowania”, edytuję moją odpowiedź, aby uwzględnić również te tematy.

Po pierwsze, MX Player korzysta z wciągającego trybu pełnoekranowego ( DevBytes Video ) KitKat.
Android 4.4 (poziom API 19) wprowadza nową flagę SYSTEM_UI_FLAG_IMMERSIVE dla setSystemUiVisibility () , dzięki której Twoja aplikacja może działać naprawdę „na pełnym ekranie”. Ta flaga w połączeniu z flagami SYSTEM_UI_FLAG_HIDE_NAVIGATION i SYSTEM_UI_FLAG_FULLSCREEN ukrywa paski nawigacji i stanu oraz umożliwia aplikacji przechwytywanie wszystkich zdarzeń dotykowych na ekranie.

Gdy włączony jest wciągający tryb pełnoekranowy, wszystkie zdarzenia dotyku są nadal odbierane podczas Twojej aktywności. Użytkownik może odsłonić paski systemowe, przesuwając palcem do wewnątrz w obszarze, w którym zwykle pojawiają się paski systemowe. Spowoduje to wyczyszczenie flagi SYSTEM_UI_FLAG_HIDE_NAVIGATION (i flagi SYSTEM_UI_FLAG_FULLSCREEN , jeśli jest stosowana), dzięki czemu paski systemowe staną się widoczne. Spowoduje to również wyzwolenie twojego View.OnSystemUiVisibilityChangeListener , jeśli jest ustawiony. Jeśli jednak chcesz, aby paski systemowe ponownie się automatycznie ukrywały po kilku chwilach, możesz zamiast tego użyć flagi SYSTEM_UI_FLAG_IMMERSIVE_STICKY . Zwróć uwagę, że „lepka” wersja flagi nie wyzwala żadnych nasłuchujących, ponieważ paski systemowe pokazane tymczasowo w tym trybie są w stanie przejściowym.

Po drugie: ukrycie paska stanu
Po trzecie: ukrycie paska nawigacji
Należy pamiętać, że chociaż korzystanie z wciągającego trybu pełnoekranowego służy tylko do KitKat, ukrywanie Status Bari Navigation Barnie tylko KitKat.

Nie mam wiele do powiedzenia na temat drugiego i trzeciego, rozumiesz, wierzę, że w każdym razie jest to szybka lektura. Tylko pamiętaj, aby zwrócić szczególną uwagę na View.OnSystemUiVisibilityChangeListener .

Dodałem streszczenie, które wyjaśnia, o co mi chodzi, nie jest kompletne i wymaga naprawy, ale masz pomysł. https://gist.github.com/Epsiloni/8303531

Powodzenia we wdrażaniu tego i dobrej zabawy!

Assaf Gamliel
źródło
1
Jak więc ukrywa pasek nawigacji i zapobiega ponownemu wyskakiwaniu po dotknięciu ekranu? A kiedy wykonujesz ruch przeciągnięcia, aby wyjść z trybu immersyjnego, pasek nawigacji natychmiast się pojawi i znika. Ponadto nie jest możliwe wyciągnięcie panelu powiadomień, gdy jest zablokowany, nawet jeśli „wciągające przesunięcie” wymusza wyświetlenie paska stanu. Jak to się dzieje?
nhaarman
2
Okej, to bardzo pomaga, ale jeszcze tam nie jesteśmy. Umieszczę dwa komentarze, jeden dla KitKat, drugi dla Jelly Bean. Dla KitKat, używając flagi TYPE_SYSTEM_ALERT, SYSTEM_UI_FLAG_HIDE_NAVIGATIONi SYSTEM_UI_FLAG_IMMERSIVE_STICKYnie ma mowy o wyjściu z aplikacji. Obie listwy systemowe pozostają ukryte. Chyba że menu zasilania jest otwarte. Następnie ponownie pojawia się pasek nawigacji, a przycisk strony głównej staje się funkcjonalny. MX Player udaje się w takim przypadku ukryć pasek nawigacji. Dlatego w przypadku urządzeń z systemem KitKat nadal musimy to naprawić.
nhaarman
1
W przypadku Jelly Bean (16+) IMMERSIVE_STICKYnie działa. Dlatego możliwe jest wyświetlenie paska nawigacji (pasek stanu pozostaje ukryty z powodu SYSTEM_ALERT). Możemy to wykryć za pomocą OnSystemUiVisibilityChangeListeneri ponownie włączyć flagi. Jednak z jakiegoś powodu działa to dopiero po sekundzie, czyli więcej niż wystarczająco dużo czasu, aby nacisnąć przycisk Home. MX Player nie używa IMMERSIVE STICKY(paski pojawiają się na KitKacie), ale paski ponownie znikają, zanim się zorientujesz.
nhaarman
1
Github Gist dla KitKat: gist.github.com/nhaarman/8291022 . Github Gist for Jelly Bean: gist.github.com/nhaarman/8291070 .
nhaarman
7
FYI Assaf, niektóre aplikacje MUSZĄ zostać zablokowane. Na przykład aplikacje typu kiosk, w których właściciel zezwala na tymczasowy dostęp do sprzętu. Tworzę teraz aplikację do fotobudki i nie chcę, aby użytkownik (osoba, której zrobiono zdjęcie) mógł robić cokolwiek oprócz zrobienia zdjęcia (i kilku innych rzeczy). Właściciel może odblokować za pomocą przycisku oprogramowania, ale w przeciwnym razie musi zostać zamknięty. Przykro mi, ale twoja „matczyna rada” na początku twojej odpowiedzi zraniła mnie (i jestem pewien, że inni, w tym OP) w złym kierunku. Dziękuję za odpowiedź, przyjrzę się temu.
ntgCleaner
13

Poszedłem za odpowiedzią shaobin0604 i ostatecznie udało mi się zablokować przycisk HOME, dodając:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

do AndroidManifest.xmlWszystko, co musisz zrobić, to skopiować HomeKeyLocker.javaz biblioteki shaobin do swojego projektu i zaimplementować go tak, jak w przykładzie shaobin . BTW: Wersja mojego AVD na Androida to Android 4.0.3 .

Lê Quang Duy
źródło
Czy to działa w systemie Android 4.4.4? Ponieważ wypróbowałem to w moim Moto G, które działa w 4.4.4. Dla mnie to nie zadziałało.
venkat
1
Ta biblioteka po prostu wyłącza przycisk hard home.Moto G ma przycisk soft home, więc nie działa .. @ venkat
Harry Sharma
Alert jest dobrym rozwiązaniem, jeśli nie najlepszym, ale pamiętaj, że na niektórych urządzeniach (Nexus 4 tj.) To nie zadziała, a przycisk Home jest nadal dostępny!
JacksOnF1re
12

Możesz użyć Android-HomeKey-Locker, aby wyłączyć HOME KEY i inne klawisze systemowe (takie jak BACK KEY i MENU KEY)

Mam nadzieję, że to pomoże Ci w aplikacji. Dzięki.

shaobin0604
źródło
1
To tylko wyłącz twardy przycisk home ... !!
Harry Sharma
U mnie zadziałało idealnie. Prawdopodobnie chcę wyłączyć wszystkie fizyczne przyciski, tak naprawdę ... Używając tego dla Google Cardboard, aby wyłączyć przycisk Home, ponieważ moja obudowa go uderza.
Matt Cruikshank
jak wyłączyć przycisk ostatnich aplikacji
user3106818
# shaobin0604 Twój kod na githubie nie działa na urządzeniu Motorola.
Brajendra Pandey
11

Możesz wyłączyć przycisk Home i Recents w systemie Android 5.0, korzystając z funkcji przypinania ekranu wymienionej tutaj :

Android 5.0 wprowadza nowy interfejs API do przypinania ekranu, który pozwala tymczasowo ograniczyć użytkownikom możliwość opuszczania zadania lub przerywania im powiadomień. Może to być wykorzystane, na przykład, jeśli tworzysz aplikację edukacyjną obsługującą wymagania oceniania wysokich stawek na Androida lub aplikację jednofunkcyjną lub kioskową. Gdy aplikacja aktywuje przypinanie ekranu, użytkownicy nie mogą zobaczyć powiadomień, uzyskać dostępu do innych aplikacji ani powrócić do ekranu głównego, dopóki aplikacja nie wyjdzie z tego trybu.

Możesz zablokować urządzenie, aby było kioskiem. Pasek nawigacji nie jest ukryty, ale przyciski Strona główna i Ostatnie można usunąć lub wyłączyć w zależności od sposobu aktywacji trybu. Napisałem trochę informacji po przetestowaniu tej funkcji tutaj .

tagy22
źródło
6

Zgaduję, ale myślę, że z uprawnieniem SYSTEM_ALERT_WINDOW (wyświetlanym jako „Rysuj na innych aplikacjach”, patrz tutaj ) byłoby to możliwe: wyświetlaj swoją aplikację jako pełnoekranowe okno typu alertu systemowego . W ten sposób ukryje wszystkie inne aplikacje, nawet ekran główny, więc jeśli naciśniesz przycisk Home, tak naprawdę nie zostanie wyłączony, po prostu bez widocznego efektu.

MX Player ma zadeklarowane to uprawnienie, a Facebook Messenger ma je również do wyświetlania „ czatów ” na czymkolwiek - więc może to być rozwiązanie.

Aktualizacja (dodana z moich komentarzy): Następnie użyj SYSTEM_UI_FLAG_HIDE_NAVIGATION w połączeniu z przechwytywaniem zdarzeń dotykowych / za pomocą OnSystemUiVisibilityChangeListener, aby nadpisać domyślne zachowanie (pasek nawigacyjny pojawia się po dotknięciu). Ponadto, ponieważ powiedziałeś, że immersyjny gest wyjścia nie działa, możesz spróbować ustawić SYSTEM_UI_FLAG_IMMERSIVE_STICKY (z SYSTEM_UI_FLAG_FULLSCREEN i SYSTEM_UI_FLAG_HIDE_NAVIGATION).

molnarm
źródło
Szybki test - dodanie uprawnień i wywołanie getWindow().addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);- pokazuje, że spowoduje to ukrycie paska stanu (a ruch przesuwania w dół używany do wychodzenia z pełnego ekranu nie działa), ale nie pasek nawigacji. Przyciski na tym pasku nadal działają.
nhaarman
Nie mam teraz zestawu SDK, ale mój następny pomysł polegałby na użyciu SYSTEM_UI_FLAG_HIDE_NAVIGATION w połączeniu z przechwytywaniem zdarzeń dotykowych / przy użyciu OnSystemUiVisibilityChangeListener do przesłonięcia domyślnego zachowania (pasek nawigacyjny pojawiający się po dotknięciu).
molnarm
Ponadto, ponieważ powiedziałeś, że immersyjny gest wyjścia nie działa, możesz spróbować ustawić SYSTEM_UI_FLAG_IMMERSIVE_STICKY (z SYSTEM_UI_FLAG_FULLSCREEN i SYSTEM_UI_FLAG_HIDE_NAVIGATION).
molnarm
4

Kiedyś można było wyłączyć przycisk Home, ale teraz nie jest. Jest to spowodowane złośliwym oprogramowaniem, które może uwięzić użytkownika.

Więcej szczegółów znajdziesz tutaj: Wyłącz przycisk Home w Androidzie 4.0+

Wreszcie przycisk Wstecz można wyłączyć, jak widać w tym drugim pytaniu: Wyłącz przycisk Wstecz w systemie Android

Alvaro Cavalcanti
źródło
2
Właśnie przetestowałem odtwarzacz MX, jak powiedział, na Nexusie 4 i naprawdę zablokował przycisk Home = S
Pozzo Apps,
przycisk Wstecz ma działać tak, jak został zaprojektowany. Sugerowałbym wyłączenie przycisku Wstecz.
Raghunandan
Rozumiem Twój punkt widzenia, @Raghunandan, i zgadzam się z tym. Mimo to przycisk Wstecz można wyłączyć i ufam, że programista weźmie to pod uwagę. Jeśli uda mu się złamać użyteczność swojej aplikacji, użytkownicy powiadomią go o tym.
Alvaro Cavalcanti
spróbuj zainstalować MX Player i przetestuj go. Wyłącza przycisk HOME. Wyłącza wszystkie przyciski systemowe. MX Player używa Kids Lock (wtyczki). Próbowałem zdemontować Kids Lock (wtyczkę), ale nie mam jeszcze pojęcia, jak to działa. Dlatego zadaję to pytanie.
user1024,
1
Zauważ, że ta odpowiedź nie przedstawia sposobu, w jaki odtwarzacz mx implementuje tę funkcję.
nhaarman
3

Jeśli kierujesz reklamy na Androida 5.0 lub nowszego. Możesz użyć:

Activity.startLockTask()
lowolfne
źródło
To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienie, zostaw komentarz pod jego postem - zawsze możesz komentować własne posty, a gdy zdobędziesz wystarczającą reputację , będziesz mógł skomentować każdy post . - Z recenzji
user1140237
1
@ user1140237 Dlaczego nie?
Trilarion
1
Można to zrobić tylko wtedy, gdy jesteś administratorem urządzenia, czego normalna aplikacja nie powinna być
Ron,
3

Najpierw utwórz metodę:

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);

    }

Następnie nazywasz to onCreate()metodą swojego działania. Wywołaj to ponownie w onResume()metodzie. Następnie możesz dodać inną metodę do swojej aktywności, taką jak ta:

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        hideNavigationBar();
    }

To będzie to. Pamiętaj, że zablokuje ekran do następnego dotknięcia ekranu przez użytkownika, w klasie Timer możesz zmienić opóźnienie i pozwoli ci to zmienić rzeczy dla tej instancji, a następnie ponownie zablokuje ekran.

DalveerSinghDaiya
źródło
2

Ja też szukałem tego przez jakiś czas i w końcu udało mi się to zrobić tak, jak potrzebowałem, tj. Pasek nawigacji jest niedostępny, pasek stanu jest niedostępny, nawet jeśli długo naciskasz przycisk zasilania, ani menu zasilania, ani przyciski nawigacyjne nie są wyświetlane. Dzięki @Assaf Gamliel jego odpowiedź zaprowadziła mnie na właściwą ścieżkę. Postępowałem zgodnie z tym samouczkiem z niewielkimi modyfikacjami. Podczas określania Typu podałem WindowManager.LayoutParams.TYPE_SYSTEM_ERRORzamiast WindowManager.LayoutParams.TYPE_PHONE, w przeciwnym razie nasza „nakładka” nie będzie ukrywać pasków systemowych. Możesz bawić się flagami, wysokością, szerokością itp., Aby zachowywał się tak, jak chcesz.

aravindsagar
źródło
1

nie wiem, jak zrobić przycisk Home. tak długo, jak moja wiedza, otrzymałem następujący link.

zapoznaj się z linkiem: - http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HOME

Stała kodu klucza: klucz Home. Ten klucz jest obsługiwany przez platformę i nigdy nie jest dostarczany do aplikacji.

Ale możemy diable przycisk Wstecz. mam nadzieję, że poniższy kod ci pomoże.

@Override
public void onBackPressed() {
    //return nothing 
    return;
}
Harshal Benake
źródło
2
Chodzi o to, aby konkretnie naśladować funkcjonalność odtwarzacza MX.
nhaarman
1

Odświeżam stary temat. Udało mi się osiągnąć, że moja aktywność nie zwija się po naciśnięciu przycisku Home (fizycznego lub wirtualnego). Oto mój kod onCreate()metody działania :

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);

W przypadku API 26 i wyżej musisz uzyskać od użytkownika uprawnienia do nakładania ekranu. Testowane na Androidzie 7 i 8.

Dmitri Borohhov
źródło
0

Nie możesz wyłączyć przycisku Początek w ICS onwords, ale możesz wyłączyć inne przyciski w następujący sposób

@Override
public boolean dispatchKeyEvent(KeyEvent keyEvent){
   return true;
}
CR Sardar
źródło
1
Chodzi o to, aby konkretnie naśladować funkcjonalność odtwarzacza MX.
nhaarman
0

Post ICS, czyli Android 4+, nadpisanie HomeButton zostało usunięte ze względów bezpieczeństwa, aby umożliwić użytkownikowi wyjście w przypadku, gdy aplikacja okaże się złośliwym oprogramowaniem.

Ponadto nie jest dobrym zwyczajem nie pozwalanie użytkownikowi na opuszczenie aplikacji. Ale ponieważ tworzysz aplikację na ekranie blokady, możesz zadeklarować aktywność jako Launcher, aby po naciśnięciu przycisku HomeButton po prostu ponownie uruchomił aplikację i sam tam pozostał (użytkownicy nie zauważyliby nic poza niewielkim migotaniem na ekranie).

Możesz przejść przez następujący link:

http://dharmendra4android.blogspot.in/2012/05/override-home-button-in-android.html

Rishabh Srivastava
źródło
Chodzi o to, aby konkretnie naśladować funkcjonalność odtwarzacza MX.
nhaarman
0

Szczerze mówiąc, nie można wyłączyć przycisku Home przynajmniej na nowych poziomach API, czyli od 4.0. Nie jest to również wskazane. Możesz jednak zablokować przycisk Wstecz, zastępując

public void onBackPressed() {
    // do not call super onBackPressed.
}

aby nadpisać przycisk home, możesz na przykład użyć timera i po każdym czasie sprawdzić, czy ekran główny jest twoim ekranem, czy też nie, czy twój pakiet jest na górze, czy nie (jestem pewien, że dostaniesz do niego linki ) i wyświetl swoją aktywność za pomocą flagi single_top.

W ten sposób, nawet jeśli zostanie naciśnięty przycisk Home, będziesz mógł przenieść swoją aplikację na górę.

Upewnij się również, że aplikacja ma sposób na wyjście, ponieważ takie aplikacje mogą być naprawdę denerwujące i nigdy nie powinny być tworzone.

Miłego kodowania.

PS: Nie można przechwycić zdarzenia domowego, gdy naciśnięty jest przycisk home.

Możesz używać metod dołączania do okna, a także metod blokady klawiatury, ale nie dla poziomów interfejsu API od 4.0.

Rat-a-tat-a-tat Ratatuj
źródło
Chodzi o to, aby konkretnie naśladować funkcjonalność odtwarzacza MX.
nhaarman
@NiekHaarman, niezupełnie. Chodzi o to, aby „wyłączyć przycisk Home, Back i wszystkie inne przyciski systemowe”. Konkretnie jak odtwarzacz MX, a nie MIMIC.
Adam
@adam nie, nagroda, jaką postawiłem za pytanie, które wywołało tę odpowiedź, zadana specjalnie w celu naśladowania funkcjonalności odtwarzacza MX.
nhaarman
0

Używanie rotacji powoduje wyjątek, więc naprawiłem swoją aktywność, używając tego:

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);
}

Będziesz musiał skorzystać z sugestii @ Lê Quang Duy.

Oscar Romero
źródło
0

Pracuję nad aplikacją, która musi blokować tablet tylko dla aplikacji. Najpierw ustawiam aplikację jako MainLauncher, a następnie blokuję pasek zadań za pomocą AndroidView. Wreszcie blokuję tablet. Nie jest to funkcja, którą wskazuję, aby używać w wielu modelach tabletów, ponieważ każdy model urządzenia ma funkcję, która ją blokuje.

Ale ogólnie to działa dla każdego. Możesz użyć poleceń

Java.Lang.Runtime.GetRuntime().Exec("su -c sed -i '/VOLUME_UP/s/^# //g' /system/usr/keylayout/Generic.kl");

jako przykład, aby wyłączyć przyciski. Ale wszystko opiera się na zmianie plików systemowych, w folderze „/ system / usr / keylayout / ...”. UWAGA: Działa tylko na zrootowanych urządzeniach.

Innym sposobem, który próbuję, choć wciąż się rozwijam, jest użycie StreamWrite i StreamReader, aby uzyskać dostęp do RootDirectory i przepisać cały plik, aby wyłączyć i włączyć przyciski.

Mam nadzieję że to pomoże.

Wszelkie pytania pozostają dostępne.

Renan Eberle Costella
źródło
0

Dla każdego, kto chce całkowicie usunąć soft-nav na zrootowanym (lub niestandardowym ROM) urządzeniu z Androidem, możesz zmodyfikować plikbuild.prop plik tekstowy w folderze systemowym.

Ustaw następującą zmienną / wartość:

gemu.hw.mainkeys=1

To jest to, czego używają sprzedawcy, aby wyłączyć miękką nawigację, gdy mają fizyczne przyciski.

Le-roy Staines
źródło