2017-09-07 4 views
3

J'écris une application Android pour le mode kiosque. J'utilise ce tutoriel pour créer le mode kiosque: http://www.andreas-schrade.de/2015/02/16/android-tutorial-how-to-create-a-kiosk-mode-in-android/Mode Kiosque Android - Autoriser la sortie

Cependant, dans le tutoriel, l'utilisateur peut toujours cliquer sur home, puis sur l'application après 2 secondes. Donc, j'ai fait un peu de modification pour désactiver le bouton d'accueil en faisant mon application comme une maison. Je l'ai fait en le mettant dans mon manifeste:

<activity android:name=".MainActivity" 
      android:launchMode="singleInstance"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.HOME"/> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

Tout fonctionne bien. Mais lorsque l'utilisateur essaie de quitter (c'est-à-dire que l'utilisateur se connecte en tant qu'administrateur), mon application est de retour. Je suspecte parce que je l'ai placé comme HOME.

Ma question est, comment autoriser mon application à quitter. Est-il possible de retourner à la maison quand mon application sort? Si ce n'est pas le cas, y a-t-il une meilleure façon d'aborder ce problème domestique (par exemple, désactiver le bouton d'accueil et ne pas le définir comme étant à la maison)?

+0

Il existe un "vrai" mode Kiosque dans Android que vous pouvez déclencher en tant que propriétaire de l'appareil. Ceci est un très gros sujet, vous pouvez en lire plus à ce sujet si vous êtes intéressé ici: https://developer.android.com/work/cosu.html –

Répondre

4

Vous avez installé plusieurs écrans HOME (celui par défaut fourni par le fabricant du périphérique et votre application). L'utilisateur doit avoir choisi que votre application soit l'écran HOME par défaut (cela se produit généralement au démarrage). Ce que vous voulez maintenant faire est de supprimer ce paramètre "préféré" afin que l'utilisateur puisse choisir un autre écran d'accueil "par défaut" (c'est-à-dire: l'application du fabricant). Faire comme ceci:

PackageManager pm = getPackageManager(); 
pm.clearPackagePreferredActivities ("your.package.name"); 

puis finish() votre MainActivity.


EDIT: solution alternative

En tant que solution de rechange, si vous voulez "exit" votre application, il vous suffit de lancer l'option par défaut écran HOME à la place. Pour ce faire, vous devez soit connaître le package et le nom de classe de l'écran d'accueil par défaut et hardcode que, ou vous pouvez numériser pour cette information en utilisant PackageManager comme ceci:

PackageManager pm = getPackageManager(); 
Intent homeIntent = new Intent(Intent.ACTION_MAIN); 
homeIntent.addCategory(Intent.CATEGORY_HOME); 
List<ResolveInfo> infoList = pm.queryIntentActivities(homeIntent, PackageManager.MATCH_DEFAULT_ONLY); 
// Scan the list to find the first match that isn't my own app 
for (ResolveInfo info : infoList) { 
    if (!"my.package.name".equals(info.activityInfo.packageName)) { 
     // This is the first match that isn't my package, so copy the 
     // package and class names into to the HOME Intent 
     homeIntent.setClassName(info.activityInfo.packageName, 
         info.activityInfo.name); 
     break; 
    } 
} 
// Launch the default HOME screen 
startActivity(homeIntent); 
finish(); 

Dans ce cas, votre application est toujours défini comme l'écran HOME par défaut, donc si l'utilisateur appuie à nouveau sur la touche HOME, votre application sera démarrée. Mais l'utilisateur peut alors "quitter" votre application pour revenir à l'écran HOME original.

+0

C'est exactement ce que je cherche! Mais 1 problème (peut-être une solution facile), comment définir mon application comme une maison pour le prochain lancement? Parce que quand je fais 'pm.clearPackagePreferredActivities', mon application n'est plus un Home et l'utilisateur peut maintenant utiliser le bouton" Home ". Je dois toujours empêcher l'utilisateur d'appuyer sur le bouton "Home" (c'est-à-dire que le bouton "Home" ne fait rien lorsque l'utilisateur appuie dessus) – Sam

+0

J'imagine que vous devez dire à l'utilisateur de redémarrer. Au démarrage, l'utilisateur devrait être invité à choisir un écran HOME. –

+0

J'ai ajouté une solution alternative que vous pouvez essayer. Peut-être que cela correspond mieux à vos besoins. –

1

Vous pouvez utiliser les fonctionnalités du propriétaire de l'appareil présentées dans Android 5.0 pour gérer entièrement un appareil Android et l'utiliser comme un kiosque. Entre autres choses, cela vous permet d'empêcher l'utilisateur de quitter l'application en appuyant sur le bouton d'accueil.

La manière la plus simple de configurer un kiosque de propriétaire de périphérique consiste à utiliser le Android Management API et à configurer un kiosk policy.

+0

Salut Fred, le problème que j'ai, c'est que je ne peux pas fermer bas ou quitter l'application actuelle. Je dois activer "Administrateur" pour arrêter (ou quitter) de l'application. Cet arrêt (ou sortie de l'application) ne doit être disponible que pour "Administrateur" auquel ils se connecteront via mon application. – Sam

+0

Si vous utilisez l'API Android Management, vous pouvez modifier la stratégie pour désactiver le mode kiosque lorsque l'administrateur se connecte à votre application, pour quitter l'application, puis modifier à nouveau la stratégie pour réactiver le mode kiosque une fois l'administrateur terminé. – Fred

+0

Salut Fred, je ne pense pas que ce soit pratique dans mon cas. Donc, fondamentalement, notre application est utilisée dans l'entrepôt.À la fin de la journée, la femme qui travaillait dans l'administration collectera toutes les tablettes et utilisera son code-barres pour se connecter. Ensuite, elle aura beaucoup de boutons de menu et l'un d'entre eux est "Exit" bouton. J'ai cherché comment changer la politique par programme sans succès. Ainsi, à moins que je ne puisse modifier la stratégie par programme, je ne peux pas utiliser l'API de gestion Android :( – Sam