8
votes

Sur Android, comment détecter une boîte de dialogue système s'affiche (options d'alimentation, applications récentes, batterie faible ...)?

J'aimerais attraper tout ce qui entraîne l'affichage de mon activité d'obtenir même partiellement caché, par exemple. Options d'alimentation, plateau d'applications récentes, notification de batterie faible, etc. et je suis difficile de détecter ces événements système.

J'étais à peu près sûr que l'onpaause () serait appelée lorsque de tels événements se produisent, mais cela semble être faux ... ou est-ce moi?

Une autre idée? ... Je ne manquerais de préférence pas l'action de diffusion de chaque système individuellement, car j'aimerais être aussi générique que possible (et réagir à tout ce qui cache mon activité).


4 commentaires

Étrange. Selon les docs Onparause () devrait être juste la voie à suivre: "En pause:" Une autre activité est au premier plan et axée sur celui-ci, mais celui-ci est toujours visible. C'est une autre activité est visible sur Le dessus de celui-ci et cette activité est partiellement transparente ou ne couvre pas l'écran entier. "


Yup, je penserais que l'onpaause () devrait fonctionner comment vous voulez. N'est-ce pas en train de fonctionner de cette façon pour vous? Si oui, quel appareil êtes-vous? et quelles dialogues système avez-vous spécifiquement vues qui ne déclenchent pas votre surpée ()?


Juste aussi incrédule que vous les gars, mais je passe sur une large gamme d'appareils (HTC / Samsung / Sony Ericsson) Aucun d'autres appellent Onpause () lorsque je clique sur le bouton d'alimentation ou le bouton Accueil. Encore une pause () est appelée si je clique simplement sur eux! Me bat...


Je voudrais avoir une réponse à un cas similaire; Lors du couplage avec un appareil BT, j'aimerais savoir si Android apparaît sur la confirmation de l'utilisateur ou la boîte de dialogue PassKeky. Parfois, ce n'est pas le cas. Si ce n'est pas le cas, je veux le faire et si cela le fait, je veux laisser Android reprendre et ne rien faire.


3 Réponses :


0
votes

J'étais à peu près sûr que l'onpaause () serait appelée lorsque de tels événements se produisent, mais cela semble être faux ... ou est-ce moi?

OnaAUSE () sera appelé si une autre activité prend en charge au premier plan. Donc, si une application tierce est venue au premier plan, même avec une activité sur le thème du dialogue, onpaause () serait appelé.

Il n'y a pas d'exigence pour Onpause () à appeler des composants OS, cependant.

Je ne manquerais de préférence pas sur chaque action de diffusion système individuellement, car j'aimerais être aussi générique que possible (et réagir à tout ce qui cache mon activité).

Ce que vous voulez n'est pas possible. Toutes les choses que vous indiquez ont diffusé intention , et il existe d'autres techniques que les personnes peuvent utiliser (par exemple, toasts ) qui masquera une partie de votre activité que vous allez n'ont aucune connaissance.


2 commentaires

Bonjour Commonconsware, merci pour votre réponse :) Bon point, je n'ai pas à me soucier des toasts. Mais il est étrange pour moi que nous ne pouvons pas réagir aux événements qui affichent des couches à écran complet, comme le plateau "Applications récentes" ou les "options d'alimentation", qui sont même floues et assombrissent le fond ... peut-être que je peux expliquer mon Utilisation spécifique: je travaille sur un lecteur vidéo et tout ce que je veux faire est de mettre en pause la lecture lorsqu'il n'est tout simplement pas visible pour l'utilisateur. Est-ce trop demander? ...


@WOUZZ: J'imagine que c'est en partie une mesure de sécurité, donc les malwares ne détectent pas ces événements et publient leur propre chose au-dessus de l'autre chose pour tenter de tromper les utilisateurs. Bien que votre objectif soit noble, je vous concentrerais simplement sur une belle option commode de reatteurs-by-10 secondes, afin que les utilisateurs qui pensent avoir manqué quelque chose puisse facilement revenir à temps.



7
votes

On travaille sur une application de style kiosque, je sais que certains dialogues viennent au premier plan et peuvent être détectés par xxx

un exemple de la boîte de dialogue de liaison Bluetooth qui apporte le com. Android.Settings au premier plan.

Un contre-exemple est la boîte de dialogue Bouton Power (éteindre, redémarrer, etc.) qui ne vient pas au premier plan.

Notez que vous pouvez Fermer les boîtes de dialogue système (même la boîte de dialogue Bouton de puissance) avec cette émission: xxx

mais sur la plupart (tous les plus récents?) Cet émission fermera même le clavier du logiciel, de sorte qu'il Il n'est pas conseillé de faire fonctionner un service qui l'envoie fréquemment car l'utilisateur ne parviendra alors à entrer dans un champ de texte.

Notez que ce comportement permettra de satisfaire définitivement votre application comme un logiciel malveillant, en gardant de la beeing publiée sur Google Play.


0 commentaires

0
votes

La meilleure solution que je suis arrivée jusqu'à présent est de mettre en œuvre dans votre activité Onwindowfocuschanged

HTTPS: // développeur.android.com/reference/andrroid/app/activity#onwindowfocuschanged(booldean)

in kotlin: xxx

car cela peut être appelé beaucoup de fois que vous pouvez débonder cet événement lors d'une animation


0 commentaires