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