2010-04-09 19 views
7

Quiero responder una llamada telefónica. Encontré la intención android.intent.action.ANSWER pero parece que el único efecto que obtengo es una ActivityNotFoundException. ¿Por qué? ¿Es un intento desaprobado? ¿Cómo puedo lograr una respuesta? También he escuchado acerca de la "técnica de telnet". ¿Que es eso?¿Cómo responder programáticamente una llamada?

Gracias

Respuesta

4

no es posible, comprobar this rosca para más información.

+0

Ok, vi el hilo ... pero ¿por qué hay esa intención? ¡y ni siquiera está en desuso! – Matroska

+0

Lo sé, si busca en Google ACTION_ANSWER, encontrará muchos temas sobre personas que se vuelven locas para encontrar una manera de contestar automáticamente una llamada. Esta característica seguramente ha sido cortada por el personal de Android (¿razón de seguridad?). – systempuntoout

2

este evento dosis no funciona. se debe utilizar:

Intent i = new Intent(Intent.ACTION_MEDIA_BUTTON); 
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HEADSETHOOK); 
i.putExtra(Intent.EXTRA_KEY_EVENT, event); 
context.sendOrderedBroadcast(i, null); 

que emulan un bhavior de pulsar la tecla.

+0

¿Realmente funciona? Aun no lo he intentado. ¿Tuviste? Gracias – Matroska

+1

Funciona, pero luego el altavoz del teléfono está silenciado. Alguna idea de cómo prevenir esto. Intenté setMicrophoneMute (falso) en la clase AudioManager pero no result ?? – Bear

+0

no siempre funciona en Lollipop. Intenté usarlo desde un SERVICIO, y no funcionará cuando salga del estado de apagado de la pantalla (cuando la llamada se realiza mientras el teléfono está inactivo). – leRobot

3

Es posible contestar una llamada telefónica entrante. Verifique esto: here

+1

Eso es en realidad utilizando un truco, que puede o no estar funcionando en la próxima actualización de Android. –

0

La intención de la respuesta debe enviarse a InCallScreen.

adb shell am start -n com.android.phone/.InCallScreen -a android.intent.action.ANSWER 
6

también puede enviar KeyEvent llamada para responder a las llamadas pero el dispositivo tiene que estar enraizado

contestar llamadas:

try { 
    Thread.sleep(800); 
    Process process = Runtime.getRuntime().exec(new String[]{ "su","-c","input keyevent 5"}); 
    process.waitFor(); 

}catch (Exception e) { 
    e.printStackTrace(); 
} 

finalizar llamadas:

try { 
    Thread.sleep(800); 
    Process process = Runtime.getRuntime().exec(new String[]{ "su","-c","input keyevent 6"}); 
    process.waitFor(); 

}catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

Una solución muy fácil y simple. Trabajó para mí. ¡Muchas gracias! – Basher51

+0

Ya no es más posible en Android N. https://source.android.com/security/bulletin/2016-03-01.html – AnixPasBesoin

+0

Mire la fecha. Es por 5 años atrás :-) – Seifolahi

1

El enfoque utilizado simulando un teléfono BT no funciona con todas las versiones de Android y con un Todos los dispositivos como el manejo del teléfono BT pueden ser diferentes.

El mejor enfoque comprobado en muchos dispositivos y versiones de Android consiste en emular la presión y liberación del botón de llamada en el Marcador:

Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON); 
buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, 
KeyEvent.KEYCODE_CALL)); 
context.sendOrderedBroadcast(buttonDown, "android.permission.CALL_PRIVILEGED"); 

// froyo and beyond trigger on buttonUp instead of buttonDown 
Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, 
KeyEvent.KEYCODE_CALL)); 
context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 

puede hacerlo también mediante el envío de comandos de Shell "KeyEvent entrada 5 "a través de adb o vía Runtime.exec pero en mi caso no funcionaba para todos los dispositivos

2

Esto funciona desde Android 2.2 a 4.0 y ahora después de agregar la captura de prueba a la última línea funciona para 4.1.2 y 4.2 Francamente hablar no sabe cómo funciona pero funciona para mí.

Log.d(tag, "InSecond Method Ans Call"); 
    // froyo and beyond trigger on buttonUp instead of buttonDown 
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
      KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
    sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 

    Intent headSetUnPluggedintent = new Intent(Intent.ACTION_HEADSET_PLUG); 
    headSetUnPluggedintent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
    headSetUnPluggedintent.putExtra("state", 0); 
    headSetUnPluggedintent.putExtra("name", "Headset"); 
    try { 
     sendOrderedBroadcast(headSetUnPluggedintent, null); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Esto es trabajo para mí en Android 4.1.2, así como que he probado en 4.2 Esto todavía da una excepción que se maneja.

0
try { 
Runtime.getRuntime().exec("input keyevent"+Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK)); 
} catch (IOException e) { 
    //handle error here 
} 
Cuestiones relacionadas