Mode kiosque sur Android

je suis en train d'évaluer si et comment une application CF .NET enterprise peut être portée pour fonctionner sur des appareils Android. L'application sur les téléphones mobiles Windows sont exécutés en mode kiosque où l'application autostart en mode plein écran après le démarrage et avec les utilisateurs incapables d'accéder accidentellement ou volontairement toute autre partie du téléphone.

"

est-il possible sur Android d'avoir une seule application autostart après le démarrage et d'empêcher les utilisateurs de (accidentellement ou volontairement) l'accès à d'autres parties de l'appareil Android?

101
demandé sur Joshua Pinter 2010-01-15 01:40:13

10 réponses

vous pouvez lancer automatiquement des applications au démarrage en écoutant l'intention android.intent.action.BOOT_COMPLETED dans un diffuseur et commencer votre activité à partir de là. Dans L'activité, vous pouvez vous enregistrer comme le nouvel écran d'accueil par défaut[1] et gérer les clés.

je pense qu'il y a des cas que vous ne pouvez pas gérer sans modifier le framework (comme longpress on Home pour afficher les Applications actuellement actives) - je pourrais aussi me tromper.

mais pour un un prototype qui pourrait suffire.

amusez-vous bien à bricoler!

[1]:

<intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.HOME" />
 <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
25
répondu Valentin 2010-01-15 11:56:37

vous pouvez personnaliser ceci (désactiver l'accès au menu, limiter l'ajout d'application, etc) pour activer le kiosque. http://code.google.com/p/android-launcher-plus/

17
répondu rbot 2012-04-25 11:49:47

dans la nouvelle Preview Android L, Google a annoncé verrouillage des tâches , qui fait exactement cela. Il ne semble pas avoir besoin de la racine.

L'aperçu du développeur L introduit une nouvelle API de verrouillage des tâches qui permet vous empêchez temporairement les utilisateurs de quitter votre application ou d'être interrompu par des notifications. Cela pourrait être utilisé, par exemple, si vous sont en train de développer une application d'éducation pour soutenir l'évaluation des enjeux élevés exigence sur Android. Une fois que votre application activera ce mode, les utilisateurs ne pas être en mesure de voir les notifications, accéder à d'autres applications, ou revenir à la Écran d'accueil, jusqu'à ce que votre application quitte le mode.

pour empêcher une utilisation non autorisée, seules les applications autorisées peuvent activer la tâche verrouillage. En outre, l'autorisation de verrouillage des tâches doit être accordée par un l'application propriétaire de périphérique spécialement configurée, via le android.app.admin.DevicePolicyManager.setLockTaskComponents() la méthode.

pour mettre en place un propriétaire d'appareil, suivez ces étapes:

  • fixez un appareil exécutant un Android userdebug construire à votre développement machine.
  • installez votre application propriétaire d'appareil.
  • créer un "fichier 151930920" et enregistrez - le dans le répertoire /data/system de l'appareil.
$ adb root
$ adb shell stop
$ rm /tmp/device_owner.xml
$ echo "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>" >> /tmp/device_owner.xml
$ echo "&device-owner package=\"<your_device_owner_package>\" name=\"*<your_organization_name>\" />" >> /tmp/device_owner.xml
$ adb push /tmp/device_owner.xml /data/system/device_owner.xml
$ adb reboot

avant d'utiliser L'API de verrouillage des tâches dans votre application, vérifiez que votre l'activité est autorisé en appelant DevicePolicyManager.isLockTaskPermitted ().

pour activer le verrouillage des tâches, appelez android.app.Activity.startLockTask() à partir de votre activité autorisée.

lorsque le verrouillage des tâches est actif, le comportement suivant prend effet:

  • la barre d'état est vide, et les notifications d'utilisateurs et les informations de statut est caché.
  • les boutons Home et Recent Apps sont cachés.
  • D'autres applications peuvent ne pas lancer de nouvelles activités.
  • l'application actuelle peut commencer de nouvelles activités, tant que cela ne crée pas de nouvelles tâches.
  • L'utilisateur reste verrouillé sur votre application jusqu'à ce qu'une activité autorisée appelle Activity.stopLockTask() .
16
répondu nhaarman 2014-07-02 20:01:46

Après avoir cherché pendant un moment j'ai trouvé une bonne solution. Cela ne fonctionne que sur les appareils enracinés, mais je suppose que si c'est juste pour cette application alors enracinement il ne devrait pas être un problème.

consultez Également http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/ une autre façon

9
répondu matt_lethargic 2017-05-23 12:02:58

mettre en place des appareils à usage unique Page de développeur android ont décrit ces choses que vous pouvez facilement obtenir pour savoir plus de choses à partir de là.

maintenant, il est facile de configurer Android 6.0 Marshmallow et plus tard appareils en tant que propriété de l'entreprise, appareils à usage unique (COSU).

3
répondu Manifest 2016-10-03 12:46:51

a trouvé une autre technique possible dans ce forum post . Citant ce billet:

http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/10839-android-kiosk-mode-tutorial.html

en Utilisant les méthodes suivantes vous pouvez construire une application qui va éviter les "réguliers" utilisateurs de jouer avec autre chose que votre application.

l'application est faite de deux modules. L'activité principale et une service. Le service est configuré pour démarrer au démarrage. Lorsque le service il vérifie si l'activité est en cours ou non. Si elle n'est pas l'exécution utilise un minuteur pour démarrer l'activité principale.

lorsque l'activité est en pause il prévoit le service de commencer dans un deuxième: Code:

Sub Activity_Pause (UserClosed As Boolean)
    If kiosk Then StartServiceAt(KioskService, DateTime.Now + 1 * DateTime.TicksPerSecond, false)    
End Sub

Si l'utilisateur appuie sur la maison l'écran, l'écran d'accueil apparaît pendant plusieurs secondes. Toutefois, votre demande sera de retour à l'avant après quelques secondes, et l'utilisateur ne sera pas en mesure d'interagir avec n'importe quel d'autres applications ou modifier les paramètres.

le service est prévu pour être un service de premier plan. Cela empêche Android de tuer notre service. Appuyez sur le bouton d'Arrêt pour désactiver le kiosque mode.

il semble y avoir un exemple code de kiosque fichier ZIP disponible pour le téléchargement , aussi.

2
répondu Big Rich 2013-11-18 11:50:33

démarrer votre application au démarrage

la meilleure façon d'accomplir ceci est de configurer votre application comme lanceur

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

verrouiller votre application

le moyen le plus fiable est d'utiliser un dispositif avec sucette ou plus et de faire usage de

startLockTask

vous devez d'abord configurer votre application en tant que propriétaire de l'appareil. N.B. votre appareil doit être non visionné: si vous l'avez enregistré, vous devez faire une réinitialisation d'usine et sauter le enregistrement de Compte.

pour pouvoir enregistrer votre application, vous devez d'abord configurer un composant DeviceAdminReceiver:

package com.example.myapp;

public class MyDeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver {
    @Override
    public void onEnabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission received", Toast.LENGTH_SHORT).show();
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return "are you sure?";
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission revoked", Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onLockTaskModeExiting(Context context, Intent intent) {
        // here you must re-lock your app. make your activity know of this event and make it call startLockTask again!
    }
}

une fois que vous avez un appareil non prévu, vous pouvez lancer la commande suivante de adb ( no root required )

adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver

pour éviter android demander à l'utilisateur les permissions d'épingler votre application, vous devez appeler setLockTaskPackages

enfin!

@Override
public void onResume(){
    super.onResume();
    DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(
            Context.DEVICE_POLICY_SERVICE);
    ComponentName mAdminComponentName = new ComponentName(getApplicationContext(), MyDeviceAdminReceiver.class);
    mDevicePolicyManager.setLockTaskPackages(mAdminComponentName, new String[]{getPackageName()});
    startLockTask();
}
@Override
public void finish(){
    stopLockTask();
    super.finish();
}
2
répondu nonsensei 2016-07-27 08:36:29

Google a récemment publié le Android Management API qui permet de configurer facilement le mode kiosk pour tous les appareils Android exécutant Android 5.1 ou supérieur, et aussi de définir diverses autres politiques.

2
répondu Fred 2017-10-03 10:49:09

Xposed framework ne peut le faire. Il a besoin de root et il est possible qu'il ne fonctionne pas sur toutes les plateformes. Rechercher disable () méthode dans la classe android.App.StatusBarManager .

ici dans le code source Android

Regardez ici comment écrire votre propre module: tutoriel de développement Xposé

c'est beaucoup plus facile qu'à première vue. Bonne Chance!

1
répondu JohnyTex 2015-08-20 08:46:45

avec la mise en place de votre application avec un récepteur de démarrage, et cette réponse pour empêcher l'expansion de barre d'état, Cette solution fonctionne sur 4.4 et au-dessus comme une application de kiosque complète:

Place dans votre onCreate():

    final View view = (View) findViewById(android.R.id.content);
    if (view != null) {
        //"hides" back, home and return button on screen. 
        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                   View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                   View.SYSTEM_UI_FLAG_FULLSCREEN);
        view.setOnSystemUiVisibilityChangeListener
                (new View.OnSystemUiVisibilityChangeListener() {
                    @Override
                    public void onSystemUiVisibilityChange(int visibility) {
                        // Note that system bars will only be "visible" if none of the
                        // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
                        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                    View.SYSTEM_UI_FLAG_FULLSCREEN);
                        }
                    }
                });
    }

cela masquera complètement le bouton back, les applications et le bouton home.

0
répondu Kristy Welsh 2017-05-23 12:02:58