Wie kann ich die Android App im Kiosk-Modus ausführen, den abgesicherten Modus deaktivieren und das Gerät vor dem Zurücksetzen des Geräts schützen?
Ich habe folgende 3 Voraussetzungen für meine App:
Zeigen Sie den Schülern im normalen Modus des Geräts nur bestimmte Apps an. Dies kann durch Deaktivieren des Standardstartprogramms und Aktivieren von Kiosk Launcher möglich sein.
Deaktivieren Sie das Kennwort, oder setzen Sie es in den abgesicherten Modus, um die Verwendung von System-Apps oder integrierten Apps (YouTube, Videoplayer, Musik-App usw.) zu vermeiden.
Beschränken Sie den Hard-Reset eines Geräts, indem Sie die langen Tasten (Netzschalter, Lautstärketasten) eines Geräts deaktivieren.
Ich habe diese Anforderungen interpretiert und habe unten ein detailliertes Verständnis gefunden.
Wir können die Schüler-App neu gestalten, um eine Launcher-App zu erstellen, die im Kiosk-Modus ausgeführt wird. Dies bedeutet, dass wir keine anderen Starter-Apps (Testversion) benötigen.
Wir können den Zugriff im abgesicherten Modus auf das System oder Apps von Drittanbietern über die App AppLock oder ähnliche Apps deaktivieren. Es wird nur bis Android Marshmallow 6.0 funktionieren. Es gibt jedoch eine Einschränkung für Android - es funktioniert auf Nougat/Oreo-Geräten nicht. Alternativ haben wir versucht, das Drücken der Einschalttaste zu betätigen, um zu verhindern, dass das Gerät in den abgesicherten Modus wechselt. Android erlaubt jedoch nicht den Zugriff oder das Drücken der Einschalttaste aus unserer App gemäß dieser Link und verschiedenen anderen.
WICHTIGER HINWEIS FÜR Android 7.0 (NOUGAT) UND 8.0 (OREO) - Link hier
Laut MMGuardian App kann die Abgesperrte Sperre für Telefone unter Android 7.0 oder 8.0 derzeit nicht aktiviert werden. Wenn ein älteres Telefon, für das die Sperre für den abgesicherten Modus zuvor aktiviert wurde, auf diese Android-Versionen aktualisiert wird, wird die Funktion für die Sperre des abgesicherten Modus deaktiviert.
Kann mir jemand helfen, mir weitere Gedanken zu geben, damit ich diese Situation genauer verstehen kann?
Bin ich in die richtige Richtung? oder habe ich es richtig angegeben?
Werfen Sie einen Blick auf Android Management API , es kann nicht mehr ohne benutzerdefinierte Gerätefirmware gemacht werden.
100% Kiosk-Modus nicht möglich.
Hard Reset zurücksetzen: Die Option Hard Reset ist Teil des Bootloaders. Es kann daher nur schwer verhindert werden, dass das Gerät auf den Werksreset zurückgesetzt wird.
Ich hatte eine Lösung, funktioniert aber nur, wenn das Gerät gerootet ist
Harte Zurücksetzung einschränken: kopiere deine apk-Datei nach system/app. Wenn das Gerät wiederhergestellt wurde, installiert Android automatisch alle Apps aus dem Ordner system/app
Deaktivieren Sie die System-APP: , um System-Apps zu deaktivieren oder bei Apps, die einen Shell-Befehl ausführen
pm disable <package name>
Interpretieren der Lautstärketasten: Um dies auszuführen, benötigen Sie keinen Root-Zugriff. Verwenden Sie diesen Code in Ihrer Aktivitätsklasse
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
// TODO Auto-generated method stub
if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN))
{
// Do what ever you want
}
if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP))
{
// Do what ever you want
}
return true;
}
Bonus deaktivieren Navigationsleiste und Statusleiste
Verstecken
private void hideNavigationBar(){
try {
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("pm disable com.Android.systemui\n");
os.flush();
try {
Process process = null;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("reboot\n");
os.flush();
process.waitFor();
}
catch (IOException e) {
e.printStackTrace();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}catch (IOException e) {
e.printStackTrace();
}
}
Wiederherstellen normal
private void showNavigationBar(){
try {
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("pm enable com.Android.systemui\n");
os.flush();
os.writeBytes("reboot\n");
os.flush();
process.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Hinweis: Das Gerät wird nach dem Ausführen von Shell-Befehlen neu gestartet
Du spielst mit root, also du und deine eigene, wenn es Zweifel gibt, bitte den Befehl vor dem Programmieren
Können Sie Ihre App als DeviceOwner entwerfen und dann bereitstellen? Dies bietet Ihnen die größten Möglichkeiten auf dem Gerät, die Bereitstellung kann jedoch je nach Kontext schmerzhaft sein: Nicht für eine öffentliche Version geeignet, aber machbar, wenn Sie die Geräteflotte verwalten können.