Come faccio ad aprire il dialer con il numero di telefono visualizzato?


193

Non ho bisogno di chiamare il numero di telefono, ho solo bisogno che il dialer si apra con il numero di telefono già visualizzato. Cosa Intentdovrei usare per raggiungere questo obiettivo?

Risposte:


532

Due modi per raggiungerlo.

1) È necessario avviare il dialer tramite codice, senza l'interazione dell'utente.

È necessario Action_Dial,

usa sotto il codice si aprirà Dialer con il numero specificato

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0123456789"));
startActivity(intent); 

È richiesto il prefisso "tel:" , altrimenti verrà generata la seguente eccezione: java.lang.IllegalStateException: impossibile eseguire il metodo dell'attività.

Action_Dial non richiede alcuna autorizzazione.

Se si desidera avviare la chiamata direttamente senza l'interazione dell'utente , è possibile utilizzare l'azione Intent.ACTION_CALL. In questo caso, è necessario aggiungere la seguente autorizzazione in AndroidManifest.xml:

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

2) È necessario che l'utente faccia clic sulla stringa Phone_Number e inizi la chiamata.

android:autoLink="phone" 

È necessario utilizzare TextView con la proprietà di seguito.

android: autoLink = "phone" android: linksClickable = "true" una proprietà textView

Non è necessario utilizzare l'intento o ottenere l'autorizzazione in questo modo.


9
È fantastico e differisce da Intent.ACTION_CALL per il fatto che non chiama immediatamente
Amt87

ACTION_DIAL richiede l'autorizzazione o solo ACCESS_CALL lo fa?
Marc Plano-Lesay,

1
Questo funziona con i numeri di telefono da Danimarca così :) Lei non ha bisogno di aggiungere +45 prima del numero. Funziona bene solo analizzando il numero di telefono
ymerdrengene

1
Ho avuto problemi con il pulsante Indietro dopo aver aperto il dialer con un nuovo intento. Posso tornare alla mia applicazione solo premendo il pulsante 3 indietro (mi mostra diverse schermate del dialer che non ho aperto - il dialer stesso, crea una nuova schermata di contatto, preferiti). Qualcuno sa come tornare all'app con solo 1 pulsante Indietro?
Kashlo,

2
2012 ... bei vecchi tempi. È politicamente corretto il 2018, le grandi aziende vendono i dati degli utenti e le nostre app devono gestire la burocrazia Android solo per NON supportare SMS e chiamate telefoniche.
Josh,

52

Abbastanza tardi sulla risposta, ma se si dispone di un numero in TextViewcui si sta mostrando il numero di telefono, quindi non è necessario gestire gli intenti, è possibile utilizzare solo l'attributo XML android:autoLink="phone"e il sistema operativo avvierà automaticamente un ACTION_DIALIntento.


Approccio molto veloce!
Taslim Oseni,

7

Ok, sarà una risposta estremamente tardiva a questa domanda. Ma qui c'è solo un esempio se vuoi farlo a Kotlin .

val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:<number>")
startActivity(intent)

Ho pensato che potesse aiutare qualcuno.


2

Come @ashishduh menzionato sopra, usando android:autoLink="phone è una buona soluzione. Ma questa opzione ha uno svantaggio, non funziona con tutte le lunghezze dei numeri di telefono. Ad esempio, un numero di telefono di 11 numeri non funzionerà con questa opzione. La soluzione è quella di aggiungere un prefisso ai numeri di telefono con il prefisso internazionale.

Esempio:

08034448845 non funzionerà

ma lo +2348034448845farà


1
<TextView
 android:id="@+id/phoneNumber"
 android:autoLink="phone"
 android:linksClickable="true"
 android:text="+91 22 2222 2222"
 />

Ecco come è possibile aprire direttamente l'etichetta EditText assegnata al numero sul dialer.


1

Aggiungi l'autorizzazione in manifest:

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

Pulsante Crea o qualsiasi esempio di widget: btnCall

btnCall.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent callIntent = new Intent(Intent.ACTION_DIAL);
        callIntent.setData(Uri.parse("tel: +98990*******");
        startActivity(callIntent);

    }
});

questa risposta è corretta ma questa risposta non corrisponde alla domanda.
luna
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.