60 votes

Comment un service d'écoute pour les gestes/les événements?

Je me demande comment des applications comme SwipePad et Vagues Lanceur sont capables de détecter des gestes tactiles/événements par le biais d'un service. Ces applications sont capables de détecter les gestes, même si elle n'est pas dans leur propre Activité. J'ai regardé partout sur Internet et n'ai pas trouvé comment ils peuvent le faire.

Ma principale question est de savoir comment un service peut écouter sur la touche guestures/événements comme une Activité régulière peut recevoir MotionEvents même si elle peut ne pas être à l'origine de l'Activité ou du contexte. Je suis essentiellement en essayant de construire une application qui va recongize une sensibilité particulière geste de l'utilisateur, indépendamment de l'Activité qui est sur le dessus et de faire quelque chose lorsque ce geste est recongized. Le toucher recongition sera un thread en cours d'exécution en arrière-plan comme un service.

18voto

pypmannetjies Points 493

J'ai eu ce même problème et j'ai enfin compris! Grâce à ce post: la création d'un système de superposition (toujours en haut) bouton dans android. Vous avez besoin d'utiliser une fenêtre d'alerte au lieu d'une superposition (et cela signifie également que vous pouvez l'utiliser dans Android ICS):

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);

Ensuite, il suffit de fixer un GestureListener de cette manière:

GestureDetector gestureDetector = new GestureDetector(this, new AwesomeGestureListener());
View.OnTouchListener gestureListener = new View.OnTouchListener() {
      public boolean onTouch(View v, MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
      }
};

overlayView.setOnTouchListener(gestureListener);

Yay!!!

5voto

Knickedi Points 5881

Question intéressante. Je ne sais pas comment ils l'ont fait et j'ai trouvé google groupe les postes qui me disent qu'il n'existe aucun toucher l'auditeur. Mais j'ai une idée de toute façon...

J'ai trouvé ce post où quelqu'un réussit à afficher un popupwindow à partir d'un service. Si je fais que pop-up transparent et en plein écran, je suis sûr que je puisse capter la touche depuis que je suis autorisé à établir un contact de l'intercepteur.

Edit: Merci de rapporter les résultats lorsque vous essayez de faire cela, ce serait intéressant de savoir si cela fonctionne...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X