Mode tâche verrouillée

Ce guide du développeur explique comment des appareils dédiés peuvent être verrouillés sur un seul une application ou un ensemble d'applications. Si vous êtes un fournisseur de services de gestion de la mobilité en entreprise (EMM) le développeur ou l'intégrateur de solutions lisez ce guide pour ajouter le mode tâches verrouillées à votre solution.

Présentation

Android peut exécuter des tâches de façon immersive, comme un kiosque, appelée tâche de verrouillage mode. Vous pouvez utiliser le mode tâches verrouillées si vous développez une application kiosque ou un lanceur d'applications pour présenter un ensemble d'applications. Lorsque le système s'exécute dans une tâche de verrouillage les utilisateurs ne peuvent généralement pas voir les notifications, accéder aux appareils non autorisés applications ou à l'écran d'accueil (sauf s'il figure sur la liste d'autorisation).

Seules les applications ajoutées à la liste d'autorisation par un outil de contrôle des règles relatives aux appareils (DPC) peuvent s'exécuter lorsque le système est en mode tâches verrouillées. Les applications sont ajoutées à la liste d'autorisation, car la personne qui utilisent l'appareil ne peuvent pas toujours quitter le mode tâches verrouillées.

Comment combiner l'application ajoutée à la liste d'autorisation pour le mode tâches verrouillées et le DPC de la liste d'autorisation dépendra du problème que vous souhaitez résoudre. Voici quelques exemples :

  • Un seul package d'application qui associe un kiosque (pour présenter du contenu) et un mini DPC (pour se connecter automatiquement à la liste d'autorisation pour le mode tâches verrouillées).
  • Une DPC qui fait partie d'une solution de gestion de la mobilité en entreprise, lançant le les applications mobiles du client en mode tâches verrouillées.

Disponibilité

Le système peut s'exécuter en mode tâches verrouillées sous Android 5.0 ou version ultérieure. Le tableau 1 montre les versions d'Android compatibles avec l'ajout d'applications à la liste d'autorisation par utilisateur.

Tableau 1. Compatibilité des versions d'Android avec les modes d'administration DPC
Version d'Android L'outil DPC administre Notes
Android 5.0 (niveau d'API 21) ou version ultérieure Appareil entièrement géré
Android 8.0 (niveau d'API 26) ou version ultérieure Utilisateur secondaire affilié L'utilisateur secondaire doit être affilié à l'utilisateur principal. Voir utilisateurs multiples.
Android 9.0 (niveau d'API 28) ou version ultérieure Utilisateur secondaire

Sous Android 9.0 ou version ultérieure, un DPC peut lancer l'activité de n'importe quelle application en mode tâches verrouillées. Dans les versions antérieures, l'application doit déjà prendre en charge le démarrage de sa propre activité dans mode tâches verrouillées.

Ajouter des applications à la liste d'autorisation

Un DPC doit ajouter les applications à la liste d'autorisation avant de pouvoir les utiliser en mode tâches verrouillées. Appeler DevicePolicyManager.setLockTaskPackages() jusqu'à liste d'autorisation des applications pour le mode tâches verrouillées, comme illustré dans l'exemple suivant:

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

Pour savoir les applications précédemment ajoutées à la liste d'autorisation pour le mode tâches verrouillées, un DPC peut appeler DevicePolicyManager.getLockTaskPackages() Autre les applications peuvent appeler DevicePolicyManager.isLockTaskPermitted() pour confirmer qu'un package d'application prend en charge le mode tâches verrouillées.

Démarrer le mode tâches verrouillées

Sous Android 9.0 (niveau d'API 28) ou version ultérieure, vous pouvez démarrer l'activité d'une autre application dans mode tâches verrouillées. Si une activité est déjà en cours d'exécution au premier plan ou arrière-plan, vous devez relancer l'activité. Appeler ActivityOptions.setLockTaskEnabled() et fournissez ces lors du démarrage de l'activité. L'extrait suivant vous montre comment procédez comme suit:

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

Dans les versions d'Android antérieures à la version 9.0, une application démarre ses propres activités dans une tâche de verrouillage en appelant Activity.startLockTask(). Pour appeler cela , l'activité doit s'exécuter au premier plan (voir Activité-Cycle de vie ). Nous vous suggérons donc d'appeler la méthode Méthode onResume() d'une Activity ou Fragment Pour appeler startLockTask():

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.
  }
}

Ne pas lancer le mode tâches verrouillées lorsque l'appareil est verrouillé, car l'utilisateur pourrait ne pas pouvoir déverrouiller l’appareil. Vous pouvez appeler des méthodes KeyguardManager pour déterminer si l'appareil est verrouillé et utiliser un cycle de vie Activity (comme onResume() appelé après le déverrouillage) pour démarrer le mode tâches verrouillées.

Une application en mode tâches verrouillées peut démarrer de nouvelles activités à condition qu'elles soient ne lance pas de nouvelle tâche, sauf celles qui lancent une application figurant sur la liste d'autorisation. À comment les tâches sont liées aux activités, consultez le guide Comprendre les tâches Pile "Retour".

Vous pouvez également déclarer dans le fichier manifeste de votre application fichier le comportement attendu d'une activité le système s'exécute en mode tâches verrouillées. Pour que le système s'exécute automatiquement votre activité en mode tâches verrouillées, définissez le android:lockTaskMode à if_whitelisted en tant que illustré dans l'exemple suivant:

<activity
    android:name=".MainActivity"
    android:lockTaskMode="if_whitelisted">
    <!-- ... -->
</activity>

Pour en savoir plus sur la déclaration d'options dans le fichier manifeste de l'application, consultez la référence lockTaskMode.

Arrêter le mode tâches verrouillées

Un DPC peut arrêter à distance le mode tâches verrouillées en supprimant le package de l'application du liste d'autorisation. Appeler DevicePolicyManager.setLockTaskPackages(), dans Android 6.0 (niveau d'API 23) ou version ultérieure, et omettez le nom du package dans le liste d'autorisation. Lorsque vous mettez à jour la liste d'autorisation, l'application revient à la de la pile.

Si une activité appelait auparavant startLockTask(), l'activité peut appeler Activity.stopLockTask() pour arrêter le mode tâches verrouillées. Cette méthode ne fonctionne que pour l'activité qui a lancé le mode tâches verrouillées.

Rappels de cycle de vie

Votre DPC peut trouver utile de savoir quand une application (s'exécutant dans le même utilisateur) active et quitte le mode tâches verrouillées. Pour recevoir des rappels, remplacez les éléments suivants : de rappel dans la sous-classe DeviceAdminReceiver de votre DPC:

onLockTaskModeEntering()
Appelée après qu'une application est passée en mode tâches verrouillées. Vous pouvez obtenir le nom de package d'un application à partir de l'argument pkg.
onLockTaskModeExiting()
Appelée après qu'une application a quitté le mode tâches verrouillées. Ce rappel ne reçoit aucun des informations sur l'application.

Si vous lancez une autre application en mode tâches verrouillées, vous devez suivre l'exécution dans votre propre application. Vérifier si l'application actuelle s'exécute dans une tâche de verrouillage utilisez les méthodes sur ActivityManager, comme indiqué ci-dessous Exemple:

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 ...
}

Personnaliser l'UI

Lorsqu'une application s'exécute en mode tâches verrouillées, l'interface utilisateur (UI) du système change dans de différentes manières:

  • La barre d'état est vide. Les notifications et les informations système sont masquées.
  • Les boutons "Accueil" et "Aperçu" sont masqués.
  • Les autres applications ne peuvent pas lancer de nouvelles activités.
  • L'écran de verrouillage (s'il est défini) est désactivé.

Sur Android 9.0 ou version ultérieure, lorsque le mode tâches verrouillées est activé, votre DPC peut activer certaines fonctionnalités d'UI du système sur l'appareil, ce qui peut être utile aux développeurs qui créent un lanceur d'applications. Appeler DevicePolicyManager.setLockTaskFeatures() comme indiqué dans l'extrait suivant:

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

Le système désactive toutes les fonctionnalités que vous n'incluez pas dans l'argument flags. La les fonctionnalités d'interface utilisateur activées persistent entre les lancements en mode tâches verrouillées. Si l'appareil est déjà en mode tâches verrouillées, toute modification apportée aux fonctionnalités de tâches de verrouillage s'affichent immédiatement. Le tableau 2 décrit les fonctionnalités de l'interface utilisateur que vous pouvez personnaliser.

Tableau 2. Fonctionnalités personnalisables de l'UI du système en mode tâches verrouillées
Fonctionnalité de l'UI du système Description
LOCK_TASK_FEATURE_HOME Affiche le bouton "Accueil". Activer pour les lanceurs d'applications personnalisés : appuyer sur un Le bouton d'accueil n'a aucune action, sauf si vous ajoutez l'Android par défaut à la liste d'autorisation lanceur d'applications.
LOCK_TASK_FEATURE_OVERVIEW Affiche le bouton "Aperçu" (le fait d'appuyer sur ce bouton permet d'ouvrir Récents). Si vous activer ce bouton, vous devez aussi activer le bouton Accueil.
LOCK_TASK_FEATURE_GLOBAL_ACTIONS Active la boîte de dialogue des actions globales qui s'affiche lorsque vous appuyez de manière prolongée sur bouton Marche/Arrêt. La seule fonctionnalité activée setLockTaskFeatures() n'a pas été appelé. Un utilisateur ne peut généralement pas éteindre l'appareil si vous désactiver cette boîte de dialogue.
LOCK_TASK_FEATURE_NOTIFICATIONS Active les notifications pour toutes les applications. Les icônes de notification s'affichent la barre d'état, les notifications prioritaires et le volet des notifications à développer. Si vous activez ce bouton, vous devez également activer le bouton Accueil. Appuyer les actions de notification et les boutons qui ouvrent de nouveaux panneaux, ne fonctionnent pas en mode verrouillé les tâches.
LOCK_TASK_FEATURE_SYSTEM_INFO Active la zone d'informations système de la barre d'état qui contient des indicateurs tels que comme la connectivité, la batterie, et le son et le vibreur.
LOCK_TASK_FEATURE_KEYGUARD Active tout écran de verrouillage pouvant être défini sur l'appareil. En règle générale, non pour les appareils destinés à un usage public, comme les kiosques d'information ou la signalétique numérique.
LOCK_TASK_FEATURE_NONE Désactive toutes les fonctionnalités de l'interface utilisateur du système répertoriées ci-dessus.

Un DPC peut appeler DevicePolicyManager.getLockTaskFeatures() pour obtenir la liste des fonctionnalités disponibles sur un appareil lorsque le mode tâches verrouillées est activé. Quand ? lorsqu'un appareil quitte le mode tâches verrouillées, l'interface utilisateur revient à l'état exigé par les règles existantes relatives aux appareils.

Bloquer les fenêtres et les superpositions

Lorsqu'une application s'exécute en mode tâches verrouillées, d'autres applications et services en arrière-plan peuvent créer de nouvelles fenêtres qu'Android affiche devant l'application en mode tâches verrouillées. Les applications et les services créent ces fenêtres pour afficher des toasts, des boîtes de dialogue et des superpositions pour la personne qui utilise l'appareil. Votre DPC peut les empêcher en ajoutant le Restriction utilisateur DISALLOW_CREATE_WINDOWS. L'exemple suivant vous montre comment procéder dans le Rappel onLockTaskModeEntering():

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

Votre DPC peut supprimer la restriction utilisateur lorsque l'appareil quitte le mode tâches verrouillées.

Ressources supplémentaires

Pour en savoir plus sur les appareils dédiés, consultez les documents suivants: