( Bearbeiten: Nach einigen weiteren Tests aktualisiert)
Überprüfen Sie die neueste Dokumentation .
Diese Funktion wird anscheinend als "Screen Pinning" bezeichnet, und die App muss nicht mehr der Gerätebesitzer sein. Wenn der Geräteeigentümer nicht festgelegt ist, wird der Benutzer aufgefordert, zu akzeptieren. Es gibt jedoch Probleme bei der Nutzung des Kiosks, die weiter unten erwähnt werden.
Es gibt zwei Möglichkeiten, das Anheften des Bildschirms zu aktivieren:
Manuell: Benutzer können das Anheften von Bildschirmen unter Einstellungen> Sicherheit> Anheften von Bildschirmen aktivieren und die Aufgaben auswählen, die sie anheften möchten, indem sie auf das grüne Anheftungssymbol im Bildschirm "Letzte Änderungen" tippen. Programmgesteuert: Um die Bildschirmfixierung programmgesteuert zu aktivieren, rufen Sie in Ihrer App startLockTask () auf. Wenn die anfordernde App kein Gerätebesitzer ist, wird der Benutzer zur Bestätigung aufgefordert. Eine Geräteeigner-App kann die setLockTaskPackages () -Methode aufrufen, um zu ermöglichen, dass Apps ohne den Benutzer-Bestätigungsschritt fixiert werden können.
Wenn Sie das Anheften des Bildschirms programmgesteuert (App ohne Geräteeigentümer) oder auf dem Gerät mithilfe des in den letzten Abschnitten angegebenen Stifts aktivieren, tritt folgendes Verhalten auf:
Es wird ein Dialogfeld angezeigt, in dem der Benutzer gefragt wird, ob das Anheften des Bildschirms aktiviert werden soll und ob zum Beenden ein Kennwort erforderlich ist. Wenn sie auf "Ja" klicken, werden die Statusleiste und die Benachrichtigungen ausgeblendet. Die Schaltflächen "Zurück", "Startseite" und "Letzte" werden NICHT ausgeblendet. Wenn Sie auf "Zuhause" oder "Neu" tippen, wird ein Toast angezeigt, der den Benutzer darüber informiert, wie das Fixieren des Bildschirms beendet wird.
Der Benutzer kann dann die Taste gedrückt halten, um das Fixieren des Bildschirms zu beenden. Wenn der Benutzer ein Passwort verlangt, wird er direkt zum Sperrbildschirm geführt. Dieses Verhalten bedeutet, dass es nicht für einen Kiosk imo geeignet ist. Da es für Kioskbenutzer zu einfach ist, auf den Sperrbildschirm zu schauen.
Um einen ordnungsgemäßen Kioskmodus zu erhalten, müssen wir den Geräteeigentümer festlegen. Die Dokumentation von Google besagt, dass Sie dies mit NFC tun müssen:
Um einen Gerätebesitzer bereitzustellen und zu aktivieren, müssen Sie eine NFC-Datenübertragung von einer Programmieranwendung auf das Gerät durchführen, während sich das Gerät im nicht bereitgestellten Zustand befindet.
Die Verwendung von NFC zu diesem Zweck erscheint etwas komplex (was ist, wenn ein Gerät nicht über NFC verfügt?). Ich habe dies noch nicht untersucht. Kann also jemand Informationen darüber bereitstellen, wie Sie den Geräteeigentümer über NFC festlegen? Welches wird jetzt der Hauptpunkt Ihrer Frage. (dh Festlegen des Gerätebesitzers auf einem nicht gerooteten Gerät)
Aber das Verhalten zu bestätigen , ist wie erwartet , wenn Sie ein Gerät verankern Sie das Gerät Eigentümer als pro Googles vorherige Anweisungen einstellen ( das Hinzufügen eines device_owner.xml) wie ich bereits erwähnt hier
Jetzt können Sie die App ordnungsgemäß sperren. Es wird kein Dialogfeld mehr angezeigt, das der Benutzer akzeptieren kann. Wenn diese Option aktiviert ist, werden die Schaltflächen "Letzte" und "Startseite" ausgeblendet, und der Benutzer kann die App nur verlassen, wenn sich die App selbst entsperrt. Ein richtiger Kiosk-Modus. Ich habe dies auf einem Nexus 7 2013 mit dem neuesten Lollipop-Build getestet.
Das folgende Snippet aktiviert die Sperre:
mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);
if (mDPM.isDeviceOwnerApp(this.getPackageName())) {
Log.d(TAG, "isDeviceOwnerApp: YES");
String[] packages = {this.getPackageName()};
mDPM.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
Log.d(TAG, "isDeviceOwnerApp: NO");
}
if (mDPM.isLockTaskPermitted(this.getPackageName())) {
Log.d(TAG, "isLockTaskPermitted: ALLOWED");
startLockTask();
} else {
Log.d(TAG, "isLockTaskPermitted: NOT ALLOWED");
}