【问题标题】:Answering a Whatsapp video call programmatically以编程方式接听 Whatsapp 视频通话
【发布时间】:2018-09-21 09:07:25
【问题描述】:

有没有办法在 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() {

    }
}

【问题讨论】:

    标签: android whatsapp


    【解决方案1】:

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

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

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

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

    您可以从这里查看更多信息:Instrumentation

    【讨论】:

      【解决方案2】:

      实现此目的的经典方法是使用NotificationListenerService 观察通知并根据相关的action of the notification 采取行动。

      【讨论】:

      • 您能详细说明一下吗?
      • 有没有推荐其他有API的软件? Whatsapp 似乎很难..
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-07
        相关资源
        最近更新 更多