android - una - videollamada whatsapp grupo
Respondiendo a una videollamada de Whatsapp programáticamente (3)
¿Hay alguna forma de responder automáticamente las videollamadas de WhatsApp usando AccessibilityService en Android?
O ¿hay alguna manera de estimular un clic en el botón de respuesta de llamadas de los auriculares / bluetooth? ¿Cómo puedo obtener la identificación del botón de respuesta? Para realizar un clic con el servicio de accesibilidad.
Sé que a partir de Android 8.0 Oreo tenemos permiso ANSWER_PHONE_CALLS, pero para mi proyecto quiero usar un dispositivo antiguo para monitoreo remoto.
¡Cualquier ayuda sería apreciada!
----- Actualización: Gracias a la respuesta del Sr. hemisphire y el Sr. Kahbazi, la aplicación puede responder la llamada, ¡pero debe ser una aplicación de sistema para funcionar! ¿Hay alguna forma de hacerlo funcionar sin ser una aplicación de sistema? sin el botón del auricular hackear?
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() {
}
}
No creo que puedas hacer lo que quieres. Usando el Servicio de Accesibilidad puede saber cuándo entra la llamada de video:
@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" );
}
}
}
}
}
Sin embargo, nunca he podido responder a la llamada programáticamente. La pregunta en ¿Cómo pueden contestarse las llamadas entrantes mediante programación en Android 5.0 (Lollipop)? hace un gran trabajo al enumerar todas las opciones posibles, pero la mayoría requiere root y / o ser una aplicación del sistema.
Puede usar el método sendKeyDownUpSync
de la clase Instrumentation
.
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_HEADSETHOOK);
Si este código no funcionó, intente usar otro KeyEvent
para encontrar el correcto.
Puede ver la lista de KeyEvent
desde este enlace: https://developer.android.com/reference/android/view/KeyEvent.html
Puedes consultar más información desde aquí: Instrumentation
Una forma clásica de lograr esto es observar las notificaciones utilizando el NotificationListenerService y actuar sobre la acción relevante de la notificación .