Une fois la propriété de l'appareil acquise, j'essaie d'implémenter une méthode pour lui demander de verrouiller une application donnée en mode kiosque (ou en mode épinglage d'écran). Depuis que je possède un appareil, l'utilisateur n'est pas invité à le faire.
Sur le site Web du développeur, une brève description m'indique qu'il est possible de faire ce que j'essaie:
http://developer.Android.com/about/versions/Android-5.0.html#ScreenPinning
Programmation: pour activer le repérage d'écran par programme, appelez StartLockTask () à partir de votre application. Si l'application demandeuse n'est pas un propriétaire de périphérique , L'utilisateur est invité à confirmer. Une application propriétaire de périphérique peut Appeler la méthode setLockTaskPackages () pour permettre aux applications d'être rattachées Sans l'étape de confirmation de l'utilisateur.
Cela indique qu'en tant qu'application propriétaire d'appareil, je peux épingler d'autres applications sans confirmation de l'utilisateur ... mais je ne sais pas comment.
J'ai pu mettre ma propre application en mode épinglé.
Toute aide serait appréciée.
La setLockTaskPackages()
est utilisée pour spécifier les applications (par leurs noms de package) qui pourront être épinglées par programme sans confirmation de l'utilisateur . La setLockTaskPackages()
est appelée à partir de votre application du propriétaire du périphérique ( très probablement dans votre méthode onEnabled()
de DeviceAdminReceiver
).
Ainsi, dans votre application propriétaire, vous obtiendrez quelque chose comme:
mDPM.setLockTaskPackages("com.foo.myapp");
et ensuite, dans votre application "com.foo.myapp", vous serez autorisé à appeler:
startLockTask();
Votre application entrera immédiatement en mode Pinning, sans aucune confirmation de l'utilisateur.
Si vous n'avez pas d'abord register
votre application avec setLockTaskPackages
, l'application sera épinglée mais l'utilisateur devra d'abord confirmer.
Notez également que lorsqu'une application est registered
avec setLockTaskPackages()
, elle a des comportements différents de ceux du pin manuel:
stopLockTask()
par programme;Je n'ai pas assez de réputation pour un commentaire, mais je vous ferai remarquer que pour les appareils dotés de boutons physiques (comme le Samsung Galaxy Tab A mentionné par @chairman), l'un des moyens de gérer le désépinglage forcé de votre application consiste à implémenter dans votre classe DeviceAdminReceiver Suivant:
@Override public void onLockTaskModeExiting (contexte de contexte, intention de l'intention )
Donc, si votre utilisateur le souhaite, vous pouvez toujours re-épingler votre application;)
Voici un extrait de code qui devrait vous aider à démarrer:
DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);
if (myDevicePolicyManager.isDeviceOwnerApp(this.getPackageName())) {
// Device owner
String[] packages = {this.getPackageName()};
myDevicePolicyManager.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
// Not a device owner - Prompt user or show error
}
if (myDevicePolicyManager.isLockTaskPermitted(this.getPackageName())) {
// Lock allowed
startLockTask();
} else {
// Lock not allowed - show error or something useful here
}