¿Cómo aceptar una llamada entrante haciendo clic en un botón?

Estoy tratando de implementar mi propia llamada de teléfono de manejo de la interfaz de usuario.

Lo que quiero hacer es, si llega una llamada, el número de teléfono entrante y una imagen se muestran, y, si presiono un botón, la llamada entrante será aceptada / contestada.

El código relacionado es:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); answerButton = (Button) findViewById(R.id.pickup); answerButton.setOnClickListener(new OnClickListener() { public void onClick(final View v) { Intent intent = new Intent("android.intent.action.ANSWER"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }); 

Lamentablemente, el código no funciona. Al principio, se produce una excepción si presiono mi botón de respuesta:

ActivityNotFoundException: Ninguna actividad encontrada para manejar Intent {
Act = android.intent.action.ANSWER

Entonces agregué una entrada en el AndroidManifest.xml:

 <uses-permission android:name="android.permission.CALL_PHONE" /> 

Ejecuto la aplicación de nuevo, ya no hay excepción. Sin embargo, dudo que la llamada entrante no sea realmente aceptada. Porque si presiona el botón de respuesta de la pantalla de Android (botón verde), la llamada entrante es aceptada y un icono verde en llamada también se muestra en la esquina superior izquierda de la pantalla del emulador, mientras que mi aplicación no.

También leo el código fuente de la aplicación Phone en la fuente android. Hay un método como acceptCall () en la clase Phone. Pero estos códigos me parecen difíciles de usar, porque hay muchas declaraciones de importaciones en el código, tales como:

 import com.android.internal.telephony.Call; import com.android.internal.telephony.CallStateException; import com.android.internal.telephony.CallerInfo; import com.android.internal.telephony.CallerInfoAsyncQuery; import com.android.internal.telephony.Connection; import com.android.internal.telephony.MmiCode; import com.android.internal.telephony.Phone; 

Y, si agrego estas importaciones en mi código, habrá demasiados errores, como:
The import com.android.internal.telephony cannot be resolved .

¿Cuál es la manera correcta y sencilla para mi problema?

Agregue la categoría " android.intent.category.DEFAULT " ( Intent.CATEGORY_DEFAULT )

La intención android.intent.action.ANSWER es de alguna manera no funciona como se esperaba. Hay una solución alternativa al emular el botón bluetooth para contestar la llamada entrante. Puede ver un ejemplo del proyecto de respuesta automática .

Debe crear un receptor de difusión en el que obtendrá el evento cuando su teléfono esté sonando y después de que pueda iniciar su actividad deseada. No puede reemplazar la pantalla de llamada entrante predeterminada hasta que utilice la ROM PERSONALIZADA. Y no olvide establecer la prioridad en el receptor de difusión en el archivo de manifiesto. Una vez que se obtiene el evento se puede utilizar el objeto de ITelephony mediante la reflexión. Y que puede proporcionar métodos para responder o rechazar la llamada.

Esto es posible con el paquete com.android.internal.telephony , pero hay que encontrar de alguna manera para usar estos métodos en eclipse y su aplicación tiene que ser compilada como una aplicación del sistema utilizando el código fuente android.

Cambie su método de llamada de aceptación por esto:

 public static void acceptCall(Context context) { Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); } 
  • Desvío de llamadas de android mediante programación
  • Android: ¿Puedes enviar / recibir datos a lo largo de una llamada telefónica?
  • Android cheque tiene llamada telefónica activa
  • Realizar llamadas sin actividad ACTION_CALL
  • Identificar el evento de conexión de llamada saliente
  • Cómo importar com.android.internal.telephony.ITelephony a la aplicación de Android
  • ¿Cómo detecta un sistema operativo Android una llamada entrante?
  • ¿Es posible reproducir música durante las llamadas para que el interlocutor pueda escucharla? Androide
  • ¿Cómo realizar llamadas perdidas?
  • Android para llamar desde un número virtual
  • Android: Hacer una llamada telefónica desde el servicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.