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

y a-t-il un moyen de répondre automatiquement à un appel vidéo whatsapp en utilisant Accessibilyservice sur Android?

ou y a-t-il un moyen de stimuler un clic sur le bouton de réponse d'appel Casque/bluetooth? Comment puis-je obtenir l'identification 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 la permission ANSWER_PHONE_CALLS, mais pour mon projet je veux utiliser un vieux dispositif 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 en mesure de répondre à l'appel,mais il doit être un système app pour travailler! est-il possible de le faire fonctionner sans un système d'application? sans le hack du bouton du casque?

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
demandé sur Nizar 2018-04-11 15:56:13

3 réponses

Je ne pense pas que tu puisses faire ce que tu veux. En utilisant le Service 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 été en mesure de répondre à l'appel programmatically. La question à comment répondre aux appels entrants programmatically dans Android 5.0 (Lollipop)? fait un excellent travail d'énumérer toutes les options possibles, mais la plupart nécessitent root et/ou être une application système.

11
répondu hemisphire 2018-05-02 10:52:34

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

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

si ce code n'a pas fonctionné, 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 consulter plus d'informations ici: Instrumentation

6
répondu Kahbazi 2018-04-19 13:55:58

une manière classique d'y parvenir est d'observer les notifications en utilisant le NotificationListenerService et d'agir sur le action pertinente de la notification .

6
répondu rds 2018-04-19 22:09:19