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.
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.
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:
- Livre de recettes pour les appareils dédiés, avec d'autres exemples pour limiter l'utilisation appareils et d’améliorer l'expérience utilisateur.
- La présentation des appareils dédiés présente les appareils dédiés.
- Gérer plusieurs utilisateurs : explique comment partager des appareils entre utilisateurs.