J'essaie d'envoyer un événement de presse arrière du système via le AccessibilityService
et cela fonctionne très bien, mais seulement si je ne suis pas dans ma propre application. Je reçois toujours true
de performGlobalAction
, peu importe si je suis dans ma propre application ou non, mais je vois seulement que l'événement est vraiment exécuté si je ne suis pas dans ma propre application mais dans toute autre application (dans le sens où l'activité précédente est montrée ou similaire)AccessibilityService - performGlobalAction ne fonctionne pas dans sa propre application
Des idées pour lesquelles cela se produit? Mon application est une application de barre latérale avec une superposition dessinée en haut dans le WindowManager
et tout fonctionne (AccessibilityService
est en cours d'exécution et gère mes événements personnalisés et le service renvoie toujours des messages de réussite pour mes événements, mais ma propre application ne réagit pas à l'arrière événement de bouton).
Mon service ressemble à ce qui suit:
public class MyAccessibilityService extends AccessibilityService {
public static void sendBackIntent(Context context) {
Intent intent = new Intent(context, MyAccessibilityService.class);
intent.putExtra("action", GLOBAL_ACTION_BACK);
context.startService(intent);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle extras = intent.getExtras();
Integer action = null;
if (extras != null) {
action = extras.getInt("action");
}
if (action != null) {
switch (action) {
case GLOBAL_ACTION_BACK:
boolean result = performGlobalAction(action);
L.d("Action %d executed: %b", action, result);
break;
default:
L.e("Unhandled action %d", action);
break;
}
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
@Override
public void onInterrupt() {
}
}
Modifier
Pour que ce soit clair:
- Je ne commence pas ce service via
MyAccessibilityService.sendBackIntent(context)
, j'envoie l'intention comme suit :if (isAccessibilityserviceRunning) MyAccessibilityService.sendBackIntent(context)
- Je commence mon service via le système J'ai activé le menu de service en l'activant simplement et en le laissant ensuite démarrer automatiquement
- J'ai tout paramétré pour le
AccessibilityService
dans unaccessibilityservice.xml
et je l'utilise pour définir mes paramètres de services et cela fonctionne parfaitement bien, tous les événements I veulent recevoir sont reçus de manière fiable et correcte
EDIT 2
on dirait que dans mon cas, ma superposition est en train de voler encore l'accent rendant focalisable et non a des problèmes de synchronisation qui font parfois des problèmes. Pourtant, ma solution peut être améliorée en utilisant BroadcastReceiver
pour communiquer avec le service, comme l'appel startService
n'est pas sûr comme indiqué dans la réponse
Les commentaires ne concernent pas les sessions de discussion ou de débogage étendues; cette conversation a été [déplacée pour discuter] (http://chat.stackoverflow.com/rooms/154466/discussion-on-answer-by-chriscm-accessibilityservice-performglobalaction-not-w). S'il y a des informations importantes ici, elles devraient être éditées dans la question ou la réponse. –
Donc, à un certain moment dans cette menace, j'ai posté un commentaire sur la suppression des commentaires après avoir déplacé une partie de ce contenu. Quelqu'un l'a nuké cependant et maintenant c'est parti. Des avertissements avant de supprimer autant de contenu seraient appréciés. @ prom85: si vous avez une autre question à poser sur un autre post, je pense que c'est la bonne réponse (ou du moins l'information qui doit être vue par d'autres personnes confondues avec des problèmes similaires) pour cette question particulière. – ChrisCM
Je ne vois rien de ce que vous avez posté à ce sujet parmi les commentaires supprimés. Quoi qu'il en soit, l'information n'a pas été * effacée *; il a été archivé dans le chat. Il n'y a pas vraiment de moyen de vous en avertir sauf de laisser un autre commentaire bruyant, ce que nous sommes fortement découragés de faire. Nous obtenons des drapeaux automatiques lorsqu'un fil de commentaire devient trop long, et le plan d'action suggéré est de le déplacer pour discuter. Si vous avez des suggestions sur la façon d'améliorer le flux de travail, ou un problème avec la politique, vous pouvez poster une question sur [Meta]. La ligne que vous allez obtenir est fondamentalement que les commentaires sont temporaires et non pour la discussion. –