Sobes.tech
Junior — Middle

Come implementare le chiamate in entrata e in uscita sulla piattaforma Android?

sobes.tech AI

Risposta dell'AI

Per gestire le chiamate in entrata e in uscita su Android, vengono utilizzate le API standard della piattaforma.

Chiamate in uscita: Per effettuare una chiamata in uscita, puoi usare un Intent con l'azione Intent.ACTION_CALL o Intent.ACTION_DIAL.

  • ACTION_DIAL apre l'app del telefono con il numero, ma non effettua automaticamente la chiamata.
  • ACTION_CALL avvia immediatamente la chiamata, ma richiede il permesso CALL_PHONE.

Esempio di codice per una chiamata in uscita:

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 {
    // Richiedere il permesso all'utente
}

Chiamate in entrata: Per gestire le chiamate in entrata, si deve usare TelephonyManager e PhoneStateListener o BroadcastReceiver per ascoltare lo stato della chiamata.

Esempio con 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:
                // Chiamata in arrivo
                break;
            case TelephonyManager.CALL_STATE_OFFHOOK:
                // Chiamata attiva
                break;
            case TelephonyManager.CALL_STATE_IDLE:
                // Chiamata terminata o nessuna chiamata
                break;
        }
    }
};
telephonyManager.listen(callStateListener, PhoneStateListener.LISTEN_CALL_STATE);

Per un funzionamento completo con le chiamate, potrebbero essere necessari permessi aggiuntivi, come READ_PHONE_STATE.

È importante notare che, a partire da Android 6.0 (API 23), è necessario richiedere i permessi all'utente durante l'esecuzione.