Ответ на видео-вызов Whatsapp программно

Есть ли способ автоматического ответа на вызов whatsapp с помощью AccessibilityService в Android?

ИЛИ есть ли способ стимулировать щелчок на кнопке ответа на гарнитуру /bluetooth? Как я могу получить идентификатор кнопки ответа? выполнить клик с помощью службы доступности

Я знаю, что начиная с Android 8.0 Oreo у нас есть разрешение ANSWER_PHONE_CALLS, но для моего проекта я хочу использовать старое устройство для удаленного мониторинга.

Любая помощь будет оценена!

----- Обновление: благодаря ответу г-на гемисфира и г-на Кахбази, приложение может ответить на звонок, но должно быть системным приложением для работы! есть ли способ заставить его работать, не будучи системным приложением? без взлома кнопки гарнитуры?

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

    }
}

Ответ 1

Я не думаю, что ты можешь делать то, что хочешь. Используя AccessibilityService, вы можете узнать, когда приходит видеовызов:

@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" );
                }
            }
        }
    }
}

Тем не менее, я никогда не мог ответить на вызов программным путем. Вопрос о том, как входящие звонки могут быть запрошены программным способом в Android 5.0 (Lollipop)? отлично справляется с перечислением всех возможных опций, но большинство из них требует root и/или является системным приложением.

Ответ 2

Вы можете использовать метод sendKeyDownUpSync из класса Instrumentation.

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

если этот код не работает, попробуйте использовать другой KeyEvent чтобы найти правильный.

Вы можете увидеть список KeyEvent по этой ссылке: https://developer.android.com/reference/android/view/KeyEvent.html

Вы можете узнать больше информации здесь: Instrumentation