Sobes.tech
Junior — Middle

¿Cómo implementar llamadas entrantes y salientes en la plataforma Android?

sobes.tech AI

Respuesta de la IA

Para realizar llamadas entrantes y salientes en Android, se utilizan las API estándar de la plataforma.

Llamadas salientes: Para realizar una llamada saliente, puedes usar un Intent con la acción Intent.ACTION_CALL o Intent.ACTION_DIAL.

  • ACTION_DIAL abre la aplicación del teléfono con el número, pero no realiza la llamada automáticamente.
  • ACTION_CALL inicia la llamada inmediatamente, pero requiere el permiso CALL_PHONE.

Ejemplo de código para una llamada saliente:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+1234567890"));
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
    context.startActivity(callIntent);
} else {
    // Solicitar permiso al usuario
}

Llamadas entrantes: Para manejar llamadas entrantes, debes usar TelephonyManager y PhoneStateListener o BroadcastReceiver para escuchar el estado de la llamada.

Ejemplo usando PhoneStateListener:

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener callStateListener = new PhoneStateListener() {
    @Override
    public void onCallStateChanged(int state, String phoneNumber) {
        switch (state) {
            case TelephonyManager.CALL_STATE_RINGING:
                // Llamada entrante
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                // Llamada activa
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                // Llamada finalizada o sin llamadas
                break;
        }
    }
};
telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);

Para un funcionamiento completo con llamadas, también pueden ser necesarios permisos adicionales, como READ_PHONE_STATE.

Es importante tener en cuenta que, desde Android 6.0 (API 23), es necesario solicitar permisos al usuario en tiempo de ejecución.