In diesem Entwicklerhandbuch wird erläutert, wie zweckbestimmte Geräte an einen einzigen App oder eine Reihe von Apps. Wenn Sie ein Enterprise Mobility Management (EMM) sind Entwickler oder Lösungsintegrator: Lesen Sie diesen Leitfaden, um den Modus „Sperren“ Lösung.
Übersicht
Android kann Aufgaben in einer immersiven, kioskähnlichen Form ausführen, die als Sperraufgabe bezeichnet wird. Modus an. Sie können den Modus zum Sperren von Aufgaben verwenden, wenn Sie eine Kioskanwendung entwickeln oder Launcher, in dem eine Sammlung von Apps präsentiert wird. Wenn das System in der Sperraufgabe ausgeführt wird Gerätenutzer können normalerweise keine Benachrichtigungen sehen und auf Inhalte zugreifen, die nicht auf der Zulassungsliste stehen oder kehren Sie zum Startbildschirm zurück (sofern der Startbildschirm nicht auf der Zulassungsliste steht).
Nur Apps, die von einem Device Policy Controller (DPC) auf die Zulassungsliste gesetzt wurden, können ausgeführt werden wenn sich das System im Modus „Gesperrte Aufgabe“ befindet. Apps stehen auf der Zulassungsliste, weil die Person kann nicht immer den Modus zum Sperren von Aufgaben verlassen.
So kombinieren Sie die App, die für den Sperraufgabenmodus auf die Zulassungsliste gesetzt wurde, und den DPC, der auf die Zulassungsliste gesetzt wurde hängt davon ab, welches Problem Sie lösen möchten. Hier einige Beispiele:
- Ein einzelnes App-Paket, das einen Kiosk (zur Präsentation von Inhalten) und einen Mini-DPC kombiniert (um sich selbst für den Modus „Gesperrte Aufgabe“ auf die Zulassungsliste zu setzen).
- Ein DPC, der Teil einer Enterprise-Mobility-Management-Lösung ist, mit dem die der mobilen Apps des Kunden im Modus „Gesperrt“.
Verfügbarkeit
Das System kann ab Android 5.0 im Modus „Gesperrte Aufgabe“ ausgeführt werden. Tabelle 1 enthält welche Android-Versionen die Zulassungsliste von Apps nach Nutzer unterstützen.
Android-Version | DPC-Administratoren | Hinweise |
---|---|---|
Android 5.0 (API-Level 21) oder höher | Vollständig verwaltetes Gerät | |
Android 8.0 (API-Level 26) oder höher | Verknüpfter sekundärer Nutzer | Der sekundäre Nutzer muss mit dem primären Nutzer verknüpft sein. Weitere Informationen finden Sie unter für mehrere Nutzer. |
Android 9.0 (API-Level 28) oder höher | Sekundärer Nutzer |
Unter Android 9.0 oder höher kann ein DPC die Aktivität einer beliebigen App im Modus „Gesperrte Aufgabe“ starten. In früheren Versionen muss die App bereits den Start einer eigenen Aktivität in Modus „Gesperrt“.
Apps auf die Zulassungsliste setzen
Ein DPC muss Apps auf die Zulassungsliste setzen, bevor sie im Modus „Gesperrte Aufgabe“ verwendet werden können. Anruf
DevicePolicyManager.setLockTaskPackages()
bis
Apps für den Sperrmodusmodus auf die Zulassungsliste setzen, wie im folgenden Beispiel gezeigt:
Kotlin
// Allowlist two apps. private val KIOSK_PACKAGE = "com.example.kiosk" private val PLAYER_PACKAGE = "com.example.player" private val APP_PACKAGES = arrayOf(KIOSK_PACKAGE, PLAYER_PACKAGE) // ... val context = context val dpm = context.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val adminName = getComponentName(context) dpm.setLockTaskPackages(adminName, APP_PACKAGES)
Java
// Allowlist two apps. private static final String KIOSK_PACKAGE = "com.example.kiosk"; private static final String PLAYER_PACKAGE = "com.example.player"; private static final String[] APP_PACKAGES = {KIOSK_PACKAGE, PLAYER_PACKAGE}; // ... Context context = getContext(); DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName adminName = getComponentName(context); dpm.setLockTaskPackages(adminName, APP_PACKAGES);
Um herauszufinden, welche Apps zuvor für den Sperraufgabenmodus auf die Zulassungsliste gesetzt wurden, kann ein DPC Folgendes aufrufen:
DevicePolicyManager.getLockTaskPackages()
Sonstiges
Apps können Anrufe tätigen
DevicePolicyManager.isLockTaskPermitted()
zur Bestätigung
dass ein App-Paket den Modus „Gesperrte Aufgabe“ unterstützt.
Modus zum Sperren von Aufgaben starten
Ab Android 9.0 (API-Level 28) kannst du die Aktivitäten einer anderen App starten in
Modus „Gesperrt“. Wenn eine Aktivität bereits im Vordergrund läuft oder
müssen Sie die Aktivität neu starten. Anruf
ActivityOptions.setLockTaskEnabled()
und stellen Sie diese bereit
beim Starten der Aktivität auswählen. Das folgende Snippet zeigt eine Möglichkeit,
Gehen Sie wie folgt vor:
Kotlin
// Set an option to turn on lock task mode when starting the activity. val options = ActivityOptions.makeBasic() options.setLockTaskEnabled(true) // Start our kiosk app's main activity with our lock task mode option. val packageManager = context.packageManager val launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE) if (launchIntent != null) { context.startActivity(launchIntent, options.toBundle()) }
Java
// Set an option to turn on lock task mode when starting the activity. ActivityOptions options = ActivityOptions.makeBasic(); options.setLockTaskEnabled(true); // Start our kiosk app's main activity with our lock task mode option. PackageManager packageManager = context.getPackageManager(); Intent launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE); if (launchIntent != null) { context.startActivity(launchIntent, options.toBundle()); }
In Android-Versionen vor 9.0 startet eine App eigene Aktivitäten in der Sperraufgabe
indem Sie Activity.startLockTask()
aufrufen. So rufen Sie diese Funktion auf:
muss die Aktivität im Vordergrund ausgeführt werden (siehe Aktivitätslebenszyklus).
Konzepte. Daher empfehlen wir den Aufruf des
onResume()
-Methode eines Activity
- oder
Fragment
So können Sie startLockTask()
anrufen:
Kotlin
// In our Fragment subclass. override fun onResume() { super.onResume() // First, confirm that this package is allowlisted to run in lock task mode. if (dpm.isLockTaskPermitted(context.packageName)) { activity.startLockTask() } else { // Because the package isn't allowlisted, calling startLockTask() here // would put the activity into screen pinning mode. } }
Java
// In our Fragment subclass. @Override public void onResume() { super.onResume(); // First, confirm that this package is allowlisted to run in lock task mode. if (dpm.isLockTaskPermitted(context.getPackageName())) { getActivity().startLockTask(); } else { // Because the package isn't allowlisted, calling startLockTask() here // would put the activity into screen pinning mode. } }
Modus zum Sperren von Aufgaben nicht starten, wenn das Gerät gesperrt ist, da der Nutzer dies möglicherweise
das Gerät entsperren können. Sie können KeyguardManager
-Methoden aufrufen, um
herausfinden, ob das Gerät gesperrt ist, und einen Activity
-Lebenszyklus verwenden
Callback-Funktion (z. B. onResume()
, die nach dem Entsperren angerufen wird)
Modus zum Sperren von Aufgaben starten.
Eine App, die sich im Modus „Aufgaben sperren“ befindet, kann neue Aktivitäten starten, solange die Aktivität keine neue Aufgabe startet – außer Aufgaben, die eine App auf der Zulassungsliste starten. Bis wie Aufgaben mit Aktivitäten zusammenhängen, lesen Sie den Leitfaden Aufgaben verstehen und Back Stack
Alternativ können Sie dies in Ihrem App-Manifest
Datei wie sich eine Aktivität verhalten soll,
das System im Modus „Gesperrte Aufgabe“ ausgeführt wird. Damit das System automatisch ausgeführt wird
Ihre Aktivität im Modus „Aufgaben sperren“
Attribut android:lockTaskMode
auf if_whitelisted
als
Beispiel:
<activity
android:name=".MainActivity"
android:lockTaskMode="if_whitelisted">
<!-- ... -->
</activity>
Weitere Informationen zum Deklarieren von Optionen in der Manifestdatei der App finden Sie unter
Referenz zu lockTaskMode
Modus zum Sperren von Aufgaben beenden
Ein DPC kann den Modus zum Sperren von Aufgaben per Fernzugriff beenden, indem er das App-Paket aus dem
auf die Zulassungsliste setzen. Anruf
DevicePolicyManager.setLockTaskPackages()
, in
Android 6.0 (API-Level 23) oder höher und lassen Sie den Paketnamen im
Zulassungsliste-Array. Wenn Sie die Zulassungsliste aktualisieren, kehrt die App zur vorherigen
im Stack an.
Wenn eine Aktivität zuvor als startLockTask()
aufgerufen wurde, kann die Aktivität
Mit Activity.stopLockTask()
beenden Sie den Modus zum Sperren. Diese Methode
funktioniert nur für die Aktivität, mit der der Modus „Task sperren“ gestartet wurde.
Lebenszyklus-Callbacks
Für Ihren DPC ist es möglicherweise hilfreich zu wissen, wann eine App, die im selben Nutzer ausgeführt wird,
betritt und beendet den Modus zum Sperren von Aufgaben. Um Callbacks zu erhalten, musst du Folgendes überschreiben
-Callback-Methoden in der DeviceAdminReceiver
-Unterklasse Ihres DPCs:
onLockTaskModeEntering()
- Wird aufgerufen, nachdem eine App den Modus zum Sperren von Aufgaben aktiviert hat. Sie können den Paketnamen
App aus dem Argument
pkg
. onLockTaskModeExiting()
- Wird aufgerufen, nachdem eine App den Modus zum Sperren von Aufgaben beendet hat. Dieser Rückruf empfängt keine Informationen zur App.
Wenn Sie eine andere App im Modus „Gesperrte Aufgabe“ starten, müssen Sie die laufende
in Ihrer eigenen App. Prüfen, ob die aktuelle App in der Sperraufgabe ausgeführt wird
verwenden, verwenden Sie die Methoden in ActivityManager
, wie unten gezeigt
Beispiel:
Kotlin
// Check if this app is in lock task mode. Screen pinning doesn't count. var isLockTaskModeRunning = false val activityManager = context .getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { isLockTaskModeRunning = activityManager.lockTaskModeState == ActivityManager.LOCK_TASK_MODE_LOCKED } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Deprecated in API level 23. isLockTaskModeRunning = activityManager.isInLockTaskMode } if (isLockTaskModeRunning) { // Show the exit button ... }
Java
// Check if this app is in lock task mode. Screen pinning doesn't count. boolean isLockTaskModeRunning = false; ActivityManager activityManager = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { isLockTaskModeRunning = activityManager.getLockTaskModeState() == ActivityManager.LOCK_TASK_MODE_LOCKED; } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Deprecated in API level 23. isLockTaskModeRunning = activityManager.isInLockTaskMode(); } if (isLockTaskModeRunning) { // Show the exit button ... }
Benutzeroberfläche anpassen
Wenn eine App im Modus „Gesperrte Aufgabe“ ausgeführt wird, ändert sich die Benutzeroberfläche des Systems auf folgende Arten:
- Die Statusleiste ist leer und Benachrichtigungen werden ausgeblendet und Systeminformationen werden ausgeblendet.
- Die Schaltflächen „Startseite“ und „Übersicht“ sind ausgeblendet.
- Andere Apps können keine neuen Aktivitäten starten.
- Der Sperrbildschirm (falls eingerichtet) ist deaktiviert.
Wenn der Modus „Task sperren“ aktiviert ist, kann Ihr DPC unter Android 9.0 oder höher
bestimmte Funktionen der System-Benutzeroberfläche auf dem Gerät. Dies ist nützlich für Entwickler,
Launcher. Anruf
DevicePolicyManager.setLockTaskFeatures()
wie gezeigt
im folgenden Snippet einfügen:
Kotlin
// Enable the Home and Overview buttons so that our custom launcher can respond // using our custom activities. Implicitly disables all other features. dpm.setLockTaskFeatures( adminName, DevicePolicyManager.LOCK_TASK_FEATURE_HOME or DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW)
Java
// Enable the Home and Overview buttons so that our custom launcher can respond // using our custom activities. Implicitly disables all other features. dpm.setLockTaskFeatures(adminName, DevicePolicyManager.LOCK_TASK_FEATURE_HOME | DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW);
Das System deaktiviert alle Funktionen, die Sie nicht im Argument flags
aufnehmen. Die
aktivierte UI-Funktionen bleiben zwischen Starts des Modus zum Sperren von Aufgaben erhalten. Wenn das Gerät
befindet sich bereits im Modus „Aufgaben sperren“, alle Änderungen, die Sie an den Funktionen zum Sperren von Aufgaben vornehmen
sofort angezeigt werden. In Tabelle 2 werden die UI-Funktionen beschrieben, die Sie anpassen können.
System-UI-Funktion | Beschreibung |
---|---|
LOCK_TASK_FEATURE_HOME
|
Zeigt die Startbildschirmtaste an. Für benutzerdefinierte Launcher aktivieren: Tippen Sie auf ein aktiviertes Die Startbildschirmtaste hat nur dann eine Aktion, wenn Sie die standardmäßige Android-App auf die Zulassungsliste setzen Launcher. |
LOCK_TASK_FEATURE_OVERVIEW
|
Zeigt die Schaltfläche "Übersicht" an. Durch Tippen auf diese Schaltfläche wird das Letzte. Wenn Sie um diese Schaltfläche zu aktivieren, musst du auch die Home-Schaltfläche aktivieren. |
LOCK_TASK_FEATURE_GLOBAL_ACTIONS
|
Aktiviert das globale Dialogfeld für Aktionen, das angezeigt wird, wenn die
Ein/Aus-Taste. Die einzige Funktion, die aktiviert wird,
setLockTaskFeatures()
nicht angerufen wurde. Nutzer können das Gerät in der Regel nicht ausschalten, wenn Sie
deaktivieren Sie dieses Dialogfeld. |
LOCK_TASK_FEATURE_NOTIFICATIONS
|
Aktiviert Benachrichtigungen für alle Apps. Daraufhin werden die Benachrichtigungssymbole Statusleiste, Vorabbenachrichtigungen und der erweiterbaren Benachrichtigungsleiste. Wenn Sie diese Schaltfläche aktivieren, müssen Sie auch die Home-Schaltfläche aktivieren. Gewindebohrer Benachrichtigungsaktionen und Schaltflächen zum Öffnen neuer Bereiche, funktionieren im Schloss nicht Aufgabenmodus. |
LOCK_TASK_FEATURE_SYSTEM_INFO
|
Aktiviert den Bereich mit den Systeminformationen in der Statusleiste, der Indikatoren wie als Optionen für Konnektivität, Akku, Ton und Vibration. |
LOCK_TASK_FEATURE_KEYGUARD
|
Aktiviert einen beliebigen Sperrbildschirm, der möglicherweise auf dem Gerät eingerichtet ist. Normalerweise nicht für öffentliche Nutzer wie Informationskiosks oder digitale Beschilderung. |
LOCK_TASK_FEATURE_NONE
|
Deaktiviert alle oben aufgeführten Funktionen der System-Benutzeroberfläche. |
Ein DPC kann einen Aufruf
DevicePolicyManager.getLockTaskFeatures()
, um
Die Liste der Funktionen, die auf einem Gerät verfügbar sind, wenn der Modus „Aufgaben sperren“ aktiviert ist. Wann?
ein Gerät den Modus „Gesperrte Aufgabe“ beendet, kehrt die Benutzeroberfläche zum festgelegten Status zurück.
durch bestehende Geräterichtlinien.
Fenster und Overlays blockieren
Wenn eine App im Modus „Gesperrte Aufgabe“ ausgeführt wird, können andere Apps und Hintergrunddienste
neue Fenster erstellen, die Android im Modus „Gesperrte Aufgabe“ vor der App anzeigt.
Apps und Dienste erstellen diese Fenster, um Toasts, Dialogfelder und Overlays für
die Person, die das Gerät verwendet. Ihr DPC kann dies verhindern, indem er den Parameter
DISALLOW_CREATE_WINDOWS
-Nutzereinschränkung.
Das folgende Beispiel zeigt, wie Sie dies in der
onLockTaskModeEntering()
-Callback:
Kotlin
// Called just after entering lock task mode. override fun onLockTaskModeEntering(context: Context, intent: Intent) { val dpm = getManager(context) val admin = getWho(context) dpm.addUserRestriction(admin, UserManager.DISALLOW_CREATE_WINDOWS) }
Java
// Called just after entering lock task mode. public void onLockTaskModeEntering(Context context, Intent intent) { DevicePolicyManager dpm = getManager(context); ComponentName admin = getWho(context); dpm.addUserRestriction(admin, UserManager.DISALLOW_CREATE_WINDOWS); }
Ihr DPC kann die Nutzerbeschränkung aufheben, wenn das Gerät den Modus zum Sperren von Aufgaben beendet.
Weitere Informationen
Weitere Informationen zu zweckbestimmten Geräten finden Sie in den folgenden Dokumenten:
- Cookbook zu zweckbestimmten Geräten mit weiteren Beispielen zur Einschränkung Geräte und verbessern die User Experience.
- Die Übersicht zu zweckbestimmten Geräten bietet einen Überblick über zweckbestimmte Geräte.
- Unter Mehrere Nutzer verwalten wird erläutert, wie Sie Geräte gemeinsam mit anderen nutzen können. Nutzenden.