7
votes

Mode Kiosque Android - Empêcher les utilisateurs de "non autorisé" impulser l'application

Je suis plutôt nouveau à Android et je développe actuellement une application Android qui devrait exécuter dans Kioskmode, de sorte qu'un utilisateur normal ne puisse pas quitter l'application ou faire quelque chose en dehors de celui-ci.
Ce que j'ai déjà fait:

  • Je fixe mon application en tant que propriétaire de périphérique li>
  • i "Pin de l'écran" L'application dans l'Oncreate () - Méthode de la MainActivité en tant que propriétaire de l'appareil LI>
  • J'ai un bouton dans la MainActivity qui permet ensuite à un administrateur de sortir en entrant un mot de passe. Appelle stoplocktask () li> ul>

    Le problème que j'ai rencontré est que tout utilisateur puisse quitter l'écran d'épingler en appuyant simultanément sur les boutons "BACK" et "MULTITASKING" simultanément, car la tablette sur laquelle l'application doit fonctionner a du matériel que je peux ne pas simplement désactiver. (au moins je ne sais pas comment faire cela sans enraciner l'appareil)
    Ainsi est-il un moyen de désactiver cette combinaison de boutons pour la sortie de l'écran, ou une solution de contournement soignée? Une approche que j'ai pensé de repiquer l'application dans ma classe Adminreceiver dans l'ONLOCKTASKMODEXITOIT (), mais je suis toujours coincé sur la façon de faire cela. P>

    Voici quelques extraits de code de ma maigrativité et de la classe AdminReceiver :
    adminreceiver.java strong> p> xxx pré>

    } p>

    MainActivity.java strong>

    P>

    public class MainActivity extends Activity {
    
    private DevicePolicyManager mDpm;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ComponentName deviceAdmin = new ComponentName(this, AdminReceiver.class);
        mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
    
        if (!mDpm.isAdminActive(deviceAdmin)) {
            Toast.makeText(this, getString(R.string.not_device_admin), Toast.LENGTH_SHORT).show();
        }
    
    
        if (mDpm.isDeviceOwnerApp(getPackageName())) {
            Toast.makeText(this, getString(R.string.device_owner), Toast.LENGTH_SHORT).show();
    
            mDpm.setLockTaskPackages(deviceAdmin, new String[]{getPackageName()});
            startLockTask();
        } else {
            Toast.makeText(this, getString(R.string.not_device_owner), Toast.LENGTH_SHORT).show();
        }
    
        Button exit = (Button) findViewById(R.id.exit);
        exit.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                stopLockTask();
            }
        });}
    


2 commentaires

Comment définissez-vous votre application en tant que propriétaire de l'appareil? Si votre application est réellement définie comme propriétaire de périphérique, le bouton récent sera également masqué. Voir l'exemple DPC pour plus d'informations.


@Phil, oui comment avez-vous défini le propriétaire de l'appareil?


3 Réponses :


0
votes

Redémarrez simplement votre activité et reprochez l'écran si le mode de la tâche de verrouillage est sorti sans intention. XXX


0 commentaires

2
votes

Si l'activité est définie comme défaut home xxx

Chaque fois que l'utilisateur appuyez sur le bouton Accueil, l'activité peut réactiver Le verrouillage sur Oncreate , Onresume ou OnStart . Si l'application n'était imputée avec force à l'aide d'une vue d'ensemble et de la touche Retour et que la liste d'activités récente est vide, l'utilisateur ne peut appuyer que sur le bouton HOME qui permettra de réactiver la serrure.

Comme la question est de 12 mois, Je suis aussi toujours à la recherche d'une solution plus efficace.


2 commentaires

Pourriez-vous donner un exemple avec cela? Je suis un développeur indigène réagissant, donc je suis un peu perdu. Merci! J'ai la restriction que je ne peux pas définir l'application en tant que propriétaire de l'appareil.


@hadiifikri Avez-vous été capable de trouver une solution pour cela?



0
votes

J'ai eu cette question et j'ai essayé des réponses dans ce fil. Je ne recommanderais pas la réponse de Xavier Lin car elle finit par créer plusieurs instances de votre application.

Heureusement, j'ai eu une solution à moi-même.

dans votre classe qui s'étend à DeviceadminRecefer, remplace OnlocktaSaskModeexitter et gérer le Pin code là-bas. xxx


0 commentaires