Come effettuare una telefonata a livello di programmazione?


123

Passo a un'attività il numero da chiamare con un pacchetto

e poi, in tale attività, ho un pulsante per chiamare quel numero, questo è il codice:

callButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(bundle.getString("mobilePhone")));
            }
        }); 

Qualcosa non va, perché quando premo il pulsante non succede nulla ...

Che cosa sto facendo di sbagliato?

PD: Sto usando un progetto compatibile con Android 1.5 ... forse la telefonata è incompatibile con 1.5?


pls incolla logcat o / p o elabora i dettagli dell'errore
chikka.anddev

Risposte:


259

Hai dimenticato di chiamare startActivity. Dovrebbe sembrare come questo:

Intent intent = new Intent(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:" + bundle.getString("mobilePhone")));
context.startActivity(intent);

Un intento di per sé è semplicemente un oggetto che descrive qualcosa. Non fa niente.

Non dimenticare di aggiungere l'autorizzazione pertinente al tuo manifest:

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

Ciao @Lior, come potrei fare nel caso in cui il dispositivo abbia dual-sim. È possibile effettuare chiamate tramite una particolare sim?
Dinash

3
@Dinash: dai un'occhiata a questa domanda con già risposta: stackoverflow.com/questions/13231962/call-from-second-sim
Lior

Ho usato lo stesso codice ma non funziona nel bordo Galaxy S7. Questo è il mio codice Intent intentCall = new Intent (Intent.ACTION_CALL); Stringa uri = "tel:" + number.trim (); intentCall.setData (Uri.parse (uri)); if (ActivityCompat.checkSelfPermission (getApplicationContext (), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {startActivity (intentCall); }
AngelJanniee

Questo simulatore può essere utilizzato per effettuare chiamate senza dispositivo fisico
user3754136

24

Ho provato questo sul mio telefono e funziona perfettamente.

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:900..." ));
startActivity(intent);

Aggiungi questa autorizzazione nel file manifest.

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

1
il numero è come 1689`` 3,2,1,1. Sto riscontrando un problema, sarà solo 1689 .. Per favore aiutami se hai qualche soluzione per lo stesso.
Teraiya Mayur

@TeraiyaMayur puoi rimuovere prima qualsiasi carattere non numerico. Quindi, se avete numero di telefono come String number = "1689,,3,2,1,1farenubmer = "tel:" + number.replaceAll("[^0-9]", "");
Passeggiata

@ Walk, un problema è che vogliamo chiamare con simboli speciali come ,*. Devono essere tra le cifre. Su un emulatore funziona bene, ma su un dispositivo rilascia simboli e cifre aggiuntivi.
CoolMind

13
 Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+198+","+1+","+1)); 
             startActivity(callIntent);

per più chiamate ordinate

Viene utilizzato per i sistemi di chiamata DTMF. Se la chiamata viene interrotta, dovresti passare più "," tra i numeri.


Dwivedi Ji: il numero è come 1689`` 3,2,1,1. Sto riscontrando un problema, sarà solo 1689 .. Per favore aiutami se hai qualche soluzione per lo stesso.
Teraiya Mayur

@TeraiyaMayur, dipende dal sistema di chiamata IVRS. Il suo lavoro per me a causa della mia chiamata a sostenere l'estinzione di prendere una risposta tempestiva.
Dwivedi Ji

Sì, hai ragione, ricevo anche un numero IVR valido e funziona bene. grazie
Teraiya Mayur

7

Nella risposta selezionata, non c'è il controllo per il permesso di marshmallow. Non funzionerà direttamente nel dispositivo marshmallow 6.0 o superiore.

So di essere in ritardo, ma questa domanda ha un ampio voto, quindi ho pensato che in futuro aiuterà gli altri.

Nei dispositivi marshmallow dobbiamo richiedere il permesso di runtime per la chiamata ...

Ecco un esempio per effettuare chiamate in marshmallow o superiore.

Come effettuare chiamate in Android Marshmallow 6.0 o versioni successive



2

Qui ti mostrerò come puoi fare una telefonata dalla tua attività. Per effettuare una chiamata devi inserire questo codice nella tua app.

try {
    Intent my_callIntent = new Intent(Intent.ACTION_CALL);
    my_callIntent.setData(Uri.parse("tel:"+phn_no));
    //here the word 'tel' is important for making a call...
    startActivity(my_callIntent);
} catch (ActivityNotFoundException e) {
    Toast.makeText(getApplicationContext(), "Error in your phone call"+e.getMessage(), Toast.LENGTH_LONG).show();
}

1
@Astor l'ho definito molto chiaramente, e ho già ottenuto punti attraverso questo, il che significa che la mia risposta è qualcosa di meglio dell'altro per alcune persone.
Pir Fahim Shah

2

Questo non richiede un'autorizzazione.

val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:+123456"))
startActivity(intent)

O

val intent = Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", "+123456", null))
startActivity(intent)

Ma mostra un'altra finestra di dialogo (chiedendoti se vuoi chiamare il telefono solo una volta o sempre). Quindi sarebbe meglio usare ACTION_CALLcon un'autorizzazione (vedi Autorizzazioni revocate android.permission.CALL_PHONE ).


0
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
   final Button button = (Button) findViewById(R.id.btn_call);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String mobileNo = "123456789";
            String uri = "tel:" + mobileNo.trim();
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse(uri));
            startActivity(intent);
        }
    });*
 }

0

Se qualcuno sta cercando a Kotlin

    val  uri = "tel:+800******"
    val call_customer_service = Intent(Intent.ACTION_CALL)
    call_customer_service.setData(Uri.parse(uri))
    startActivity(call_customer_service)

Come alcune altre soluzioni, richiede il android.permission.CALL_PHONEpermesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.