Wie deaktiviere ich Home und andere Systemtasten in Android?

80

Ich muss die Home- und andere Systemschaltflächen in meiner Android-Anwendung deaktivieren.

Beispiel: MX Player ( siehe bei Google Play ) - Sie können das "Sperren" -Symbol auf dem Player-Bildschirm drücken und alle Hardware- und Software-Systemtasten sperren.

Es funktioniert gut ohne Wurzeln.

Ich habe es auf einigen Geräten mit verschiedenen Android-Versionen getestet. Ich habe versucht, Kids Lock (Plugin) zu zerlegen, habe aber noch keine Ahnung, wie es funktioniert.

Ich benötige dieselbe Lösung wie das Kids Lock (Plugin) für MX Player: - Deaktivieren von Home, Back und allen anderen Systemtasten.

Irgendwelche Vorschläge?

user1024
quelle
1
stackoverflow.com/questions/17183905/… . Sie können die Home-Taste nicht deaktivieren.
Raghunandan
2
@ user1024 hast du eine lösung für deine frage gefunden? Da möchte ich auch die gleiche Funktionalität wie im MX Player machen.
Chirag Shah
2
Der MX Player Weg ist ziemlich interessant. Sie unterdrücken tatsächlich die Rückkehr der Navigationsleiste.
Nhaarman
Haben Sie jemals eine Lösung für dieses Problem gefunden? Ich muss auch herausfinden, wie diese Schaltflächen deaktiviert werden können. Wie kann ich zumindest die Multitasking-Schaltfläche verwalten?
Portfoliobuilder
Sie können meine Antwort überprüfen, ich denke, wird Ihnen helfen, das zu erreichen, was Sie wollen stackoverflow.com/a/28603790/3300883
Miguel

Antworten:

91

Denken Sie zunächst bitte lange und gründlich darüber nach, ob Sie die HomeSchaltfläche oder eine andere Schaltfläche (z. B. die BackSchaltfläche) wirklich deaktivieren möchten. Dies sollte nicht getan werden (zumindest in den meisten Fällen ist dies ein schlechtes Design ). Ich kann nur für mich selbst sprechen, aber wenn ich eine App heruntergeladen habe, mit der ich nicht auf eine Betriebssystemschaltfläche klicken kann, deinstalliere ich diese App als Nächstes und hinterlasse eine sehr schlechte Bewertung. Ich glaube auch, dass Ihre App nicht im App Store angeboten wird.

Jetzt...

Beachten Sie, dass Sie MX Playerum die Erlaubnis gebeten werden, über andere Anwendungen zu zeichnen: MX Player-Berechtigungen
Da Sie die HomeSchaltfläche auf dem AndroidGerät nicht überschreiben können (zumindest nicht in den neuesten Betriebssystemversionen). MX PlayerZeichnet sich auf Ihren Launcher, wenn Sie die App "sperren" und auf die HomeSchaltfläche klicken .
Um ein Beispiel dafür zu sehen, das etwas einfacher und einfacher zu verstehen ist, können Sie die Facebook Messenger App sehen .

Da ich gebeten wurde, weitere Informationen zu MX Player Status Barund Navigation Bar"Überschreiben" bereitzustellen , bearbeite ich meine Antwort, um auch diese Themen aufzunehmen.

Als erstes verwendet MX Player den immersiven Vollbildmodus ( DevBytes Video ) KitKat.
Android 4.4 (API Level 19) führt ein neues SYSTEM_UI_FLAG_IMMERSIVE- Flag für setSystemUiVisibility () ein , mit dem Ihre App wirklich "Vollbild" wird. Dieses Flag verbirgt in Kombination mit den Flags SYSTEM_UI_FLAG_HIDE_NAVIGATION und SYSTEM_UI_FLAG_FULLSCREEN die Navigations- und Statusleisten und lässt Ihre App alle Berührungsereignisse auf dem Bildschirm erfassen.

Wenn der immersive Vollbildmodus aktiviert ist, empfängt Ihre Aktivität weiterhin alle Berührungsereignisse. Der Benutzer kann die Systemleisten mit einem Wisch nach innen entlang des Bereichs anzeigen, in dem die Systemleisten normalerweise angezeigt werden. Dadurch wird das Flag SYSTEM_UI_FLAG_HIDE_NAVIGATION (und das Flag SYSTEM_UI_FLAG_FULLSCREEN , falls angewendet) gelöscht , sodass die Systemleisten sichtbar werden. Dies löst auch Ihren View.OnSystemUiVisibilityChangeListener aus , falls festgelegt. Wenn Sie jedoch möchten, dass die Systemleisten nach einigen Augenblicken automatisch wieder ausgeblendet werden , können Sie stattdessen das Flag SYSTEM_UI_FLAG_IMMERSIVE_STICKY verwenden. Beachten Sie, dass die "Sticky" -Version des Flags keine Listener auslöst, da sich die in diesem Modus vorübergehend angezeigten Systemleisten in einem vorübergehenden Zustand befinden.

Zweitens: Ausblenden der Statusleiste
Drittens: Ausblenden der Navigationsleiste
Bitte beachten Sie, dass die Verwendung des immersiven Vollbilds nur für KitKat, das Ausblenden der Status Barund Navigation Barnicht nur für KitKat.

Ich habe nicht viel zu sagen über die 2. und 3. Sie haben die Idee, ich glaube, es ist auf jeden Fall eine schnelle Lektüre. Achten Sie einfach genau auf View.OnSystemUiVisibilityChangeListener .

Ich habe eine Übersicht hinzugefügt, die erklärt, was ich meinte. Sie ist nicht vollständig und muss repariert werden, aber Sie werden auf die Idee kommen. https://gist.github.com/Epsiloni/8303531

Viel Glück bei der Umsetzung und viel Spaß!

Assaf Gamliel
quelle
1
Wie wird die Navigationsleiste ausgeblendet und verhindert , dass sie beim Berühren des Bildschirms wieder angezeigt wird? Und wenn Sie eine Wischbewegung ausführen, um den immersiven Modus zu verlassen, wird die Navigationsleiste sofort ein- und ausgeblendet. Darüber hinaus ist es nicht möglich, das Benachrichtigungsfeld im gesperrten Zustand herauszuziehen, selbst wenn durch das "immersive Wischen" die Statusleiste angezeigt wird. Wie macht es das?
Nhaarman
2
Okay, das hilft sehr, aber wir sind noch nicht ganz da. Ich werde zwei Kommentare abgeben, einen für KitKat und einen für Jelly Bean. Für KitKat, mit den Fahnen TYPE_SYSTEM_ALERT, SYSTEM_UI_FLAG_HIDE_NAVIGATIONund SYSTEM_UI_FLAG_IMMERSIVE_STICKYgibt es keine Möglichkeit , die App von verlassen. Beide Systemleisten bleiben ausgeblendet. Es sei denn, das Power-Menü ist geöffnet. Dann erscheint die Navigationsleiste erneut und die Home-Taste wird funktionsfähig. MX Player schafft es in diesem Fall, die Navigationsleiste ausgeblendet zu halten. Für Geräte, auf denen KitKat ausgeführt wird, müssen wir dies noch beheben.
Nhaarman
1
Für Jelly Bean (16+) IMMERSIVE_STICKYfunktioniert das nicht. Daher ist es möglich, die Navigationsleiste anzuzeigen (Statusleiste bleibt wegen ausgeblendet SYSTEM_ALERT). Wir können dies mit dem erkennen OnSystemUiVisibilityChangeListenerund die Flags wieder aktivieren. Aus irgendeinem Grund funktioniert dies jedoch erst nach etwa einer Sekunde. Dies ist mehr als genug Zeit, um die Home-Taste zu drücken. MX Player wird nicht verwendet IMMERSIVE STICKY(Balken erscheinen auf Kitkat), aber die Balken verschwinden wieder, bevor Sie es wissen.
Nhaarman
1
Github Gist für KitKat: gist.github.com/nhaarman/8291022 . Github Gist für Jelly Bean: gist.github.com/nhaarman/8291070 .
Nhaarman
7
Zu Ihrer Information Assaf, einige Apps müssen gesperrt werden. Zum Beispiel Apps vom Typ Kiosk, bei denen der Eigentümer temporären Zugriff auf die Hardware zulässt. Ich erstelle gerade eine Fotokabinen-App und möchte nicht, dass der Benutzer (die Person, die sich fotografieren lässt) etwas anderes tun kann, als ein Foto zu machen (und ein paar andere Dinge). Der Besitzer kann über eine Software-Schaltfläche entsperren, muss aber ansonsten heruntergefahren werden. Es tut mir leid, aber Ihr "mütterlicher Rat" zu Beginn Ihrer Antwort hat mich (und ich bin sicher, andere, einschließlich des OP) in die falsche Richtung gerieben. Vielen Dank für Ihre Antwort, ich werde mich darum kümmern.
ntgCleaner
13

Ich folgte der Antwort von shaobin0604 und schaffte es schließlich, die HOME-Taste zu sperren, indem ich hinzufügte:

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

um AndroidManifest.xmlAlles , was Sie tun müssen, ist kopieren HomeKeyLocker.javavon Shaobins lib zu Ihrem Projekt und es wie in implementieren Shaobins Vorbild . Übrigens: Die Android-Version meiner AVD ist Android 4.0.3 .

Lê Quang Duy
quelle
Funktioniert es in Android 4.4.4? Weil es in meinem Moto G versucht wurde, das in 4.4.4 läuft. Bei mir hat es nicht funktioniert.
Venkat
1
Diese Bibliothek deaktiviert nur die Hard-Home-Taste. Foto G hat eine Soft-Home-Taste, so dass es nicht funktioniert. @ Venkat
Harry Sharma
Ein Alarm ist eine gute Lösung, wenn nicht die beste, aber denken Sie daran, dass dies auf einigen Geräten (Nexus 4, dh) nicht funktioniert und die Home-Taste weiterhin verwendet werden kann!
JacksOnF1re
12

Sie können Android-HomeKey-Locker verwenden , um HOME KEY und andere Systemschlüssel (wie BACK KEY und MENU KEY) zu deaktivieren.

Ich hoffe, dies hilft Ihnen bei Ihrer Bewerbung. Vielen Dank.

shaobin0604
quelle
1
Dies deaktiviert nur die Hard Home-Taste ... !!
Harry Sharma
Hat perfekt für mich funktioniert. Ich möchte wahrscheinlich tatsächlich alle physischen Schaltflächen deaktivieren ... Verwenden Sie diese Option für Google Cardboard, um die Home-Schaltfläche zu deaktivieren, da mein Fall darauf trifft.
Matt Cruikshank
So deaktivieren Sie die Schaltfläche "
Letzte
# shaobin0604 Ihr Github-Code funktioniert auf einem Motorola-Gerät nicht.
Brajendra Pandey
11

Sie können die Home- und Recents-Schaltfläche Android 5.0 mithilfe der hier genannten Funktion zum Fixieren des Bildschirms deaktivieren :

Android 5.0 führt eine neue Bildschirm-Pinning-API ein, mit der Sie Benutzer vorübergehend daran hindern können, Ihre Aufgabe zu verlassen oder durch Benachrichtigungen unterbrochen zu werden. Dies kann beispielsweise verwendet werden, wenn Sie eine Bildungs-App entwickeln, um die Anforderungen an die Bewertung hoher Einsätze unter Android oder eine Einzweck- oder Kiosk-Anwendung zu unterstützen. Sobald Ihre App das Anheften des Bildschirms aktiviert hat, können Benutzer keine Benachrichtigungen mehr sehen, auf andere Apps zugreifen oder zum Startbildschirm zurückkehren, bis Ihre App den Modus verlässt.

Sie können das Gerät als Kiosk sperren. Die Navigationsleiste ist nicht ausgeblendet, aber die Schaltflächen "Startseite" und "Letzte" können entweder entfernt oder deaktiviert werden, je nachdem, wie Sie den Modus aktivieren. Ich habe einige Informationen geschrieben, nachdem ich diese Funktion hier getestet habe .

tagy22
quelle
6

Nur eine Vermutung, aber ich denke, mit der Berechtigung SYSTEM_ALERT_WINDOW (angezeigt als "Über andere Apps zeichnen", siehe hier ) könnte es möglich sein: Zeigen Sie Ihre App als Vollbildfenster für Systemwarnungen an . Auf diese Weise werden alle anderen Apps, auch der Startbildschirm, ausgeblendet. Wenn Sie also auf Start drücken, wird es nicht wirklich deaktiviert, nur ohne sichtbaren Effekt.

MX Player hat diese Berechtigung deklariert, und Facebook Messenger hat sie auch, um " Chat-Köpfe " über irgendetwas anzuzeigen - also könnte es die Lösung sein.

Update (aus meinen Kommentaren hinzugefügt): Verwenden Sie als Nächstes SYSTEM_UI_FLAG_HIDE_NAVIGATION in Verbindung mit der Erfassung von Berührungsereignissen / verwenden Sie OnSystemUiVisibilityChangeListener, um das Standardverhalten zu überschreiben (Navigationsleiste wird bei Berührung angezeigt). Da Sie sagten, dass die immersive Geste zum Beenden nicht funktioniert, können Sie auch versuchen, SYSTEM_UI_FLAG_IMMERSIVE_STICKY festzulegen (mit SYSTEM_UI_FLAG_FULLSCREEN und SYSTEM_UI_FLAG_HIDE_NAVIGATION).

Molnarm
quelle
Ein schneller Test - Hinzufügen der Berechtigung und Aufrufen getWindow().addFlags(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);- zeigt, dass dadurch die Statusleiste ausgeblendet wird (und die Wischbewegung nach unten, mit der der immersive Vollbildmodus beendet wird, nicht funktioniert), nicht jedoch die Navigationsleiste. Die Schaltflächen in dieser Leiste sind weiterhin funktionsfähig.
Nhaarman
Ich habe das SDK jetzt nicht, aber meine nächste Idee wäre, SYSTEM_UI_FLAG_HIDE_NAVIGATION in Verbindung mit der Erfassung von Berührungsereignissen zu verwenden / OnSystemUiVisibilityChangeListener zu verwenden, um das Standardverhalten zu überschreiben (Navigationsleiste wird bei Berührung angezeigt).
Molnarm
Da Sie sagten, dass die immersive Geste zum Beenden nicht funktioniert, können Sie auch versuchen, SYSTEM_UI_FLAG_IMMERSIVE_STICKY festzulegen (mit SYSTEM_UI_FLAG_FULLSCREEN und SYSTEM_UI_FLAG_HIDE_NAVIGATION).
Molnarm
4

Früher war es möglich, die Home-Taste zu deaktivieren, jetzt ist dies nicht mehr der Fall. Es liegt an bösartiger Software, die den Benutzer fangen würde.

Weitere Details finden Sie hier: Deaktivieren Sie die Home-Schaltfläche in Android 4.0+

Schließlich kann die Schaltfläche Zurück deaktiviert werden, wie Sie in dieser anderen Frage sehen können: Deaktivieren Sie die Schaltfläche Zurück in Android

Alvaro Cavalcanti
quelle
2
Ich habe gerade den MX-Player getestet, wie er auf einem Nexus 4 sagte, und er hat den Home-Button wirklich gesperrt = S
Pozzo Apps
Die Zurück-Taste soll so funktionieren, wie sie entwickelt wurde. Ich würde empfehlen, die Zurück-Taste nicht zu deaktivieren.
Raghunandan
Ich verstehe Ihren Standpunkt, @Raghunandan, und stimme ihm zu. Trotzdem die Zurück - Taste kann deaktiviert werden, und ich glaube , die Entwickler dies auf Rechnung zu tragen. Wenn es ihm gelingt, die Benutzerfreundlichkeit der App zu beeinträchtigen, werden ihn seine Benutzer darüber informieren.
Alvaro Cavalcanti
Versuchen Sie, MX Player zu installieren und zu testen. Es deaktiviert die HOME-Taste. Es deaktiviert alle Systemtasten. MX Player verwendet Kids Lock (Plugin). Ich habe versucht, Kids Lock (Plugin) zu zerlegen, habe aber noch keine Ahnung, wie es funktioniert. Deshalb stelle ich diese Frage.
user1024
1
Beachten Sie, dass diese Antwort nicht die Art und Weise bietet, wie mx player diese Funktion implementiert.
Nhaarman
3

Wenn Sie auf Android 5.0 und höher abzielen. Du könntest benutzen:

Activity.startLockTask()
Lowolfne
quelle
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klarstellung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag. Sie können jederzeit Ihre eigenen Beiträge kommentieren. Sobald Sie einen ausreichenden Ruf haben, können Sie jeden Beitrag kommentieren . - Von der Überprüfung
user1140237
1
@ user1140237 Warum nicht?
Trilarion
Dies kann nur durchgeführt werden, wenn Sie ein Geräteadministrator sind, was eine normale App nicht sein sollte
Ron
3

Erstellen Sie zunächst eine Methode:

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

    }

Dann rufen Sie es auf onCreate()Methode Ihrer Aktivität. Rufen Sie es bei der onResume()Methode erneut auf . Dann können Sie Ihrer Aktivität eine weitere Methode wie die folgende hinzufügen:

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

Das wird es sein. Denken Sie daran, dass der Bildschirm gesperrt wird, bis der Benutzer das nächste Mal den Bildschirm berührt. In der Timer-Klasse können Sie die Verzögerung ändern und die Änderungen für diese Instanz vornehmen. Anschließend wird der Bildschirm erneut gesperrt.

DalveerSinghDaiya
quelle
2

Auch ich habe einige Zeit danach gesucht und konnte es schließlich nach Bedarf tun, dh die Navigationsleiste ist nicht zugänglich, die Statusleiste ist nicht zugänglich, selbst wenn Sie die Ein- / Aus-Taste lange drücken, werden weder das Ein / Aus-Menü noch die Navigationstasten angezeigt. Dank @Assaf Gamliel brachte mich seine Antwort auf den richtigen Weg. Ich folgte diesem Tutorial mit einigen geringfügigen Änderungen. Während Typ Angabe angegeben ich WindowManager.LayoutParams.TYPE_SYSTEM_ERRORstatt WindowManager.LayoutParams.TYPE_PHONE, sonst unser „Overlay“ wird die Systemleisten nicht verbergen. Sie können mit den Flaggen, der Höhe, der Breite usw. herumspielen, damit sie sich so verhalten, wie Sie es möchten.

aravindsagar
quelle
1

Ich weiß nicht, wie man die Home-Taste deaktiviert. Solange ich weiß, habe ich folgenden Link.

Verweisen Sie auf den Link: - http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_HOME

Schlüsselcodekonstante: Home-Taste. Dieser Schlüssel wird vom Framework verwaltet und niemals an Anwendungen geliefert.

Aber wir können den Zurück-Knopf deaktivieren. Ich hoffe, der folgende Code hilft Ihnen dabei.

@Override
public void onBackPressed() {
    //return nothing 
    return;
}
Harshal Benake
quelle
2
Die Frage ist, die MX-Player-Funktionalität spezifisch nachzuahmen.
Nhaarman
1

Ein altes Thema aktualisieren. Ich konnte erreichen, dass meine Aktivität nicht klappt, wenn die Home-Taste (physisch oder virtuell) gedrückt wird. Hier ist mein Code für die Aktivitätsmethode 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);

Unter API 26 und höher müssen Sie vom Benutzer die Berechtigung zur Bildschirmüberlagerung erhalten. Getestet auf Android 7 und 8.

Dmitri Borohhov
quelle
0

Sie können die Home-Schaltfläche in ICS-Onwords nicht deaktivieren, andere Schaltflächen jedoch wie folgt deaktivieren

@Override
public boolean dispatchKeyEvent(KeyEvent keyEvent){
   return true;
}
CR Sardar
quelle
1
Die Frage ist, die MX-Player-Funktionalität spezifisch nachzuahmen.
Nhaarman
0

Nach ICS, dh Android 4+, wurde das Überschreiben des HomeButton aus Sicherheitsgründen entfernt, um den Benutzerexit zu ermöglichen, falls sich herausstellt, dass es sich bei der Anwendung um eine Malware handelt.

Außerdem ist es keine gute Vorgehensweise, den Benutzer nicht von der Anwendung weg navigieren zu lassen. Da Sie jedoch eine Sperrbildschirmanwendung erstellen, können Sie die Aktivität als Starter deklarieren, sodass beim Drücken der HomeButton-Taste Ihre Anwendung einfach neu gestartet wird und dort selbst verbleibt (die Benutzer würden nur ein leichtes Flackern bemerken auf dem Bildschirm).

Sie können über den folgenden Link gehen:

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

Rishabh Srivastava
quelle
Die Frage ist, die MX-Player-Funktionalität spezifisch nachzuahmen.
Nhaarman
0

Ehrlich gesagt ist es nicht möglich, die Home-Taste zumindest in neuen API-Levels, dh ab 4.0, zu deaktivieren. Es ist auch nicht ratsam, dies zu tun. Sie können die Zurück-Schaltfläche jedoch blockieren, indem Sie die überschreiben

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

Um die Home-Schaltfläche zu überschreiben, können Sie beispielsweise einen Timer verwenden und nach jedem Mal überprüfen, ob der Hauptbildschirm Ihr Bildschirm ist oder nicht oder ob Ihr Paket oben ist oder nicht (ich bin sicher, Sie erhalten Links dazu ) und zeigen Sie Ihre Aktivität mit dem Flag single_top an.

Auf diese Weise können Sie Ihre App auch dann nach oben bringen, wenn Sie die Home-Taste drücken.

Stellen Sie außerdem sicher, dass die App beendet werden kann, da solche Apps wirklich ärgerlich sein können und niemals entwickelt werden sollten.

Viel Spaß beim Codieren.

PS: Es ist nicht möglich, das Home-Ereignis abzufangen, wenn die Home-Taste gedrückt wird.

Sie können On-Attach-to-Window-Methoden und auch Keyguard-Methoden verwenden, jedoch nicht für API-Levels ab 4.0.

Ratat-a-tat-a-tat Ratatouille
quelle
Die Frage ist, die MX-Player-Funktionalität spezifisch nachzuahmen.
Nhaarman
@NiekHaarman, nicht wirklich. Die Frage lautet: "Deaktivieren Sie Home, Back und alle anderen Systemtasten." Speziell wie MX-Player, nicht MIMIC.
Adam
@adam nein, die Prämie, die ich auf die Frage gestellt habe, die diese Antwort ausgelöst hat, wurde speziell gestellt, um die Funktionalität des MX-Players nachzuahmen.
Nhaarman
0

Die Verwendung von Rotation verursacht eine Ausnahme. Daher habe ich meine Aktivität folgendermaßen behoben:

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

Sie müssen den @ Lê Quang Duy-Vorschlag verwenden.

Oscar Romero
quelle
0

Ich arbeite an einer Anwendung, die das Tablet nur für die Anwendung sperren muss. Zuerst stelle ich meine App als MainLauncher ein, dann sperre ich die Taskleiste mit einem AndroidView. Schließlich blockiere ich das Tablet. Es ist keine Funktion, die ich für mehrere Tablet-Modelle verwenden möchte, da jedes Gerätemodell über eine Funktion zum Blockieren verfügt.

Aber insgesamt funktioniert es für alle. Sie können die Befehle verwenden

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

als Beispiel zum Deaktivieren der Schaltflächen. Aber alles basiert auf dem Ändern der Systemdateien im Ordner "/ system / usr / keylayout / ...". HINWEIS: Funktioniert nur auf gerooteten Geräten.

Eine andere Möglichkeit, die ich versuche, obwohl ich sie noch entwickle, besteht darin, StreamWrite und StreamReader zu verwenden, um auf das RootDirectory zuzugreifen und die gesamte Datei neu zu schreiben, um die Schaltflächen zu deaktivieren und zu aktivieren.

Hoffe das hilft.

Und alle Fragen bleiben verfügbar.

Renan Eberle Costella
quelle
0

Für alle, die das Soft-Nav auf einem gerooteten (oder benutzerdefinierten ROM) Android-Gerät vollständig entfernen möchten, können Sie die build.propTextdatei im Systemordner ändern .

Stellen Sie die folgende Variable / den folgenden Wert ein:

gemu.hw.mainkeys=1

Dies ist, was Anbieter verwenden, um die Soft-Navigation zu deaktivieren, wenn sie über physische Tasten verfügen.

Le-roy Staines
quelle