( Modifier: mis à jour après quelques tests supplémentaires)
Consultez la dernière documentation .
Cette fonctionnalité semble être appelée épinglage d'écran maintenant, et l'application n'a pas besoin d'être le propriétaire de l'appareil. Si le propriétaire de l'appareil n'est pas défini, l'utilisateur sera invité à accepter. Mais il y a des problèmes avec cela pour l'utilisation du kiosque, mentionnés ci-dessous.
Il existe deux façons d'activer l'épinglage d'écran:
Manuellement: les utilisateurs peuvent activer l'épinglage d'écran dans Paramètres> Sécurité> Épinglage d'écran et sélectionner les tâches qu'ils souhaitent épingler en appuyant sur l'icône d'épingle verte dans l'écran récent. Par programme: pour activer l'épinglage d'écran par programme, appelez startLockTask () à partir de votre application. Si l'application demandeuse n'est pas propriétaire d'un appareil, l'utilisateur est invité à confirmer. Une application propriétaire d'appareil peut appeler la méthode setLockTaskPackages () pour permettre aux applications d'être épinglables sans l'étape de confirmation de l'utilisateur.
Si vous activez l'épinglage d'écran par programme (application non propriétaire de l'appareil) ou sur l'appareil à l'aide de la broche dans les recents, vous obtenez le comportement suivant:
Une boîte de dialogue apparaît, demandant à l'utilisateur s'il souhaite activer l'épinglage d'écran et s'il souhaite exiger un mot de passe pour quitter. S'ils appuient sur Oui, la barre d'état et les notifications disparaissent, les boutons Précédent, Accueil et Récents ne disparaissent PAS. Le fait d'appuyer sur la maison ou les récents fait apparaître un toast pour indiquer à l'utilisateur comment quitter l'épinglage d'écran.
L'utilisateur peut alors maintenir la touche enfoncée et recents pour quitter l'épinglage d'écran. Si l'utilisateur a choisi d'exiger un mot de passe, il sera renvoyé directement sur l'écran de verrouillage. Ce comportement signifie qu'il ne convient pas à une imo de kiosque. Comme il est trop facile pour les utilisateurs du kiosque de regarder l'écran de verrouillage.
Pour obtenir un mode de kiosque approprié, nous devons définir le propriétaire de l'appareil. La documentation de Google indique que vous devez le faire avec NFC:
Pour déployer et activer un propriétaire d'appareil, vous devez effectuer un transfert de données NFC d'une application de programmation vers l'appareil pendant que l'appareil est dans son état non provisionné.
L'utilisation de NFC pour ce faire semble un peu complexe (et si un appareil n'a pas de NFC?). Je n'ai pas encore enquêté sur cela, donc si quelqu'un peut fournir des informations sur la façon dont vous définissez le propriétaire de l'appareil par NFC? Ce qui devient maintenant le point principal de votre question. (c'est-à-dire définir le propriétaire de l'appareil sur un appareil non rooté)
Mais pour confirmer le comportement est comme prévu si vous rootez un appareil, vous pouvez définir le propriétaire de l'appareil selon les instructions précédentes de Google (en ajoutant un device_owner.xml) comme je l'ai mentionné ici
Vous pouvez maintenant verrouiller correctement l'application, aucune boîte de dialogue n'apparaît pour que l'utilisateur l'accepte, une fois activé, le bouton recents et home disparaît et l'utilisateur ne peut quitter l'application que si votre application se déverrouille. Un mode kiosque approprié. J'ai testé cela sur un Nexus 7 2013 avec la dernière version de Lollipop.
L'extrait suivant active le verrou:
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");
}