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() {
}
}
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.
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
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 .