有没有一种方法可以在Android中使用AccessibilityService自动接听whatsapp视频通话?

或者,是否有一种方法可以激发对耳机/蓝牙的调用应答按钮的单击? 如何获取应答按钮的ID?使用无障碍服务执行点击

我知道从Android 8.0 Oreo开始,我们具有ANSWER_PHONE_CALLS权限,但是对于我的项目,我想使用旧设备进行远程监控。

任何帮助,将不胜感激!

-----更新:感谢hemisphire先生和Kahbazi先生的回答,该应用程序可以接听电话,但需要是系统应用程序才能正常工作!有没有什么方法可以使它在没有系统应用程序的情况下正常工作?没有耳机的按钮破解?

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

    }
}

最佳答案

我不认为你可以做你想做的。使用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" );
                }
            }
        }
    }
}

但是,我从未能够通过编程方式接听电话。 How can incoming calls be answered programmatically in Android 5.0 (Lollipop)?上的问题在枚举所有可能的选项方面做得很好,但是大多数都需要root和/或成为系统应用程序。

关于android - 以编程方式接听Whatsapp视频通话,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49775772/

10-12 01:21