Программный ответ на видеозвонок в 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() {

    }
}
25
0
6 922
3

Ответы 3

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

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

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

Посмотреть список KeyEvent можно по этой ссылке: https://developer.android.com/reference/android/view/KeyEvent.html

Вы можете проверить дополнительную информацию здесь: Приборы

Классический способ добиться этого - наблюдать за уведомлениями с помощью NotificationListenerService и действовать в соответствии с соответствующим действие уведомления.

Не могли бы вы уточнить подробности?

Nizar 03.05.2018 12:28

Вы рекомендуете другое программное обеспечение с API? Whatsapp кажется сложным ..

Nizar 03.05.2018 12:37

Я не думаю, что ты можешь делать то, что хочешь. Используя 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 и / или системное приложение.

Другие вопросы по теме