首页 文章

以编程方式回答Whatsapp视频通话

提问于
浏览
24

有没有办法在Android中使用AccessibilityService自动回答whatsapp视频通话?

或者有没有办法刺激点击耳机's/bluetooth'的呼叫应答按钮? How can i get the id of the answering button?? to perform a click with accessibility service

我知道从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 回答

  • 6

    我认为你不能做你想做的事 . 使用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和/或作为系统应用程序 .

  • 6

    您可以使用 Instrumentation 类中的 sendKeyDownUpSync 方法 .

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

    如果此代码不起作用,请尝试使用另一个 KeyEvent 来查找正确的代码 .

    您可以在此链接中看到 KeyEvent 的列表:https://developer.android.com/reference/android/view/KeyEvent.html

    您可以在此处查看更多信息:Instrumentation

  • 11

    实现此目的的一种经典方法是使用NotificationListenerService观察通知并执行相关的action of the notification .

相关问题