有没有办法在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() {
}
}
答案 0 :(得分: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" );
}
}
}
}
}
但是,我从来没有能够以编程方式接听电话。 How can incoming calls be answered programmatically in Android 5.0 (Lollipop)?的问题可以很好地枚举所有可能的选项,但大多数都需要root和/或作为系统应用程序。
答案 1 :(得分:6)
您可以使用sendKeyDownUpSync
课程中的Instrumentation
方法。
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_HEADSETHOOK);
如果此代码无效,请尝试使用其他KeyEvent
找到正确的代码。
您可以在此链接中看到KeyEvent
的列表:https://developer.android.com/reference/android/view/KeyEvent.html
您可以在此处查看更多信息:Instrumentation
答案 2 :(得分:6)
实现此目的的一种经典方法是使用NotificationListenerService观察通知并对相关的action of the notification采取行动。