web-dev-qa-db-fra.com

Répondre à un appel vidéo Whatsapp par programmation

Existe-t-il un moyen de répondre automatiquement aux appels vidéo WhatsApp en utilisant AccessibilityService dans Android?

OU existe-t-il un moyen de stimuler un clic sur le bouton de réponse d'appel du casque/bluetooth? Comment puis-je obtenir l'identifiant du bouton de réponse ?? pour effectuer un clic avec le service d'accessibilité

Je sais qu'à partir de Android 8.0 Oreo, nous avons l'autorisation ANSWER_PHONE_CALLS, mais pour mon projet, je veux utiliser un ancien appareil pour la surveillance à distance.

Toute aide serait appréciée!

----- Mise à jour: Grâce à la réponse de M. Hemisphire et M. Kahbazi, l'application est capable de répondre à l'appel, mais doit être une application système pour fonctionner! existe-t-il un moyen de le faire fonctionner sans être une application système? sans le bouton du casque pirater?

public class AnswerCall  extends AccessibilityService {
    @Override
    public void onAccessibilityEvent( AccessibilityEvent event )
    {
        if(event.getEventType() == TYPE_WINDOW_CONTENT_CHANGED)
        {

            if(event.getPackageName().equals("com.whatsapp"))
            {

                Thread thread = new Thread() {
                    @Override
                    public void run() {
                        try {
                            while(true) {
                                Instrumentation inst = new Instrumentation();
                                inst.sendKeyDownUpSync(KeyEvent.KEYCODE_HEADSETHOOK);
                            }
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                };

                thread.start();
                StringBuilder sb = new StringBuilder();
                List<CharSequence> texts = event.getText();
                if (!texts.isEmpty())
                {
                    for (CharSequence s : event.getText()) {
                        sb.append(s);
                    }
                    if(sb.toString().equals("Incoming video call"))
                        Log.d( "onAccessibilityEvent", "whatsapp video call" );

                }
            }
        }
    }

    @Override
    public void onInterrupt() {

    }
}
24
Nizar

Je ne pense pas que vous puissiez faire ce que vous voulez. En utilisant le service d'accessibilité, vous pouvez savoir quand l'appel vidéo arrive:

@Override
public void onAccessibilityEvent( AccessibilityEvent event )
{
    if(event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED)
    {
        if(event.getPackageName().equals("com.whatsapp"))
        {
            StringBuilder sb = new StringBuilder();
            List<CharSequence> texts = event.getText();
            if (!texts.isEmpty()) 
            {
                for (CharSequence s : event.getText()) 
                {
                    sb.append(s);
                }
                if(sb.toString().equals("Incoming video call"))
                {
                    Log.d( "onAccessibilityEvent", "whatsapp video call" );
                }
            }
        }
    }
}

Cependant, je n'ai jamais pu répondre à l'appel par programmation. La question à Comment peut-on répondre par programmation aux appels entrants dans Android 5.0 (Lollipop)? fait un excellent travail d'énumération de toutes les options possibles, mais la plupart nécessitent root et/ou étant une application système.

11
hemisphire

Vous pouvez utiliser la méthode sendKeyDownUpSync de la classe Instrumentation.

Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_HEADSETHOOK);

si ce code ne fonctionne pas, essayez d'utiliser un autre KeyEvent pour trouver le bon.

Vous pouvez voir la liste de KeyEvent à partir de ce lien: https://developer.Android.com/reference/Android/view/KeyEvent.html

Vous pouvez vérifier plus d'informations d'ici: Instrumentation

6
Kahbazi

Une manière classique d'y parvenir est d'observer les notifications à l'aide de NotificationListenerService et d'agir sur les action de la notification pertinentes.

6
rds