以编程方式回答WhatsApp视频电话

25
有没有一种方法可以使用AccessibilityService在Android中自动回答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() {

    }
}
3个回答

11

我认为你不能做你想做的事情。使用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(棒棒糖)中以编程方式接听来电?上列出了所有可能的选项,但大多数需要root和/或成为系统应用程序。


6
您可以使用来自Instrumentation类的sendKeyDownUpSync方法。
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_HEADSETHOOK);

如果这个代码没有起作用,尝试使用另一个 KeyEvent 找到正确的键值。
你可以在这个链接中查看 KeyEvent 列表: https://developer.android.com/reference/android/view/KeyEvent.html 你可以通过这个链接获取更多信息: Instrumentation

6

请您能否进一步阐述? - Nizar
你推荐其他带有API的软件吗?WhatsApp似乎很难处理。 - Nizar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接