Aufgabenmodus sperren

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.

Tabelle 1. Unterstützung von Android-Versionen für DPC-Administratormodi
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.

Tabelle 2. Anpassbare System-UI-Funktionen im Modus „Gesperrte Aufgabe“
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: