Comment puis-je ouvrir le composeur avec le numéro de téléphone affiché?

202

Je n'ai pas besoin d'appeler le numéro de téléphone, j'ai juste besoin que le composeur s'ouvre avec le numéro de téléphone déjà affiché. Que Intentdois-je utiliser pour y parvenir?

Nik
la source

Réponses:

547

Deux façons d'y parvenir.

1) Besoin de démarrer le composeur via le code, sans interaction de l'utilisateur.

Vous avez besoin Action_Dial,

utilisez le code ci-dessous, il ouvrira le numéroteur avec le numéro spécifié

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

Le préfixe «tel:» est requis , sinon l'exception suivante sera levée: java.lang.IllegalStateException: impossible d'exécuter la méthode de l'activité.

Action_Dial ne nécessite aucune autorisation.

Si vous souhaitez lancer l'appel directement sans intervention de l'utilisateur , vous pouvez utiliser l'action Intent.ACTION_CALL. Dans ce cas, vous devez ajouter l'autorisation suivante dans votre AndroidManifest.xml:

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

2) L'utilisateur doit cliquer sur la chaîne Phone_Number et démarrer l'appel.

android:autoLink="phone" 

Vous devez utiliser TextView avec la propriété ci-dessous.

android: autoLink = "phone" android: linksClickable = "true" une propriété textView

Vous n'avez pas besoin d'utiliser l'intention ou d'obtenir une autorisation de cette manière.

AAnkit
la source
9
C'est génial et cela diffère de Intent.ACTION_CALL par le fait qu'il n'appelle pas immédiatement
Amt87
ACTION_DIAL nécessite-t-il l'autorisation ou seul ACCESS_CALL le fait?
Marc Plano-Lesay
1
Cela fonctionne également avec les numéros de téléphone du Danemark :) Vous n'avez pas besoin d'ajouter +45 avant le numéro. Cela fonctionne bien juste l'analyse du numéro de téléphone
ymerdrengene
1
J'ai un problème avec le bouton de retour après avoir ouvert le numéroteur dans une nouvelle intention. Je ne peux revenir à mon application qu'en appuyant sur 3 boutons arrière (il me montre plusieurs écrans de numérotation que je n'ai pas ouverts - le numéroteur lui-même, créer un nouvel écran de contact, favoris). Quelqu'un sait-il comment revenir à l'application en appuyant sur un seul bouton de retour?
kashlo
2
2012 ... Bon vieux temps. C'est politiquement correct 2018, les grandes entreprises vendent des données utilisateur et nos applications doivent faire face à la bureaucratie Android juste pour NE PAS prendre en charge les SMS et les appels téléphoniques.
Josh
52

Assez tard dans la réponse, mais si vous avez un TextViewnuméro de téléphone dans lequel vous affichez le numéro de téléphone, vous n'avez pas du tout besoin de gérer les intentions, vous pouvez simplement utiliser l'attribut XML android:autoLink="phone"et le système d'exploitation lancera automatiquement une ACTION_DIALintention.

ashishduh
la source
Approche très rapide!
Taslim Oseni
7

D'accord, ce sera une réponse extrêmement tardive à cette question. Mais voici juste un exemple si vous voulez le faire à Kotlin .

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

Je pensais que cela pourrait aider quelqu'un.

gprathour
la source
2

Comme @ashishduh mentionné ci-dessus, l'utilisation android:autoLink="phoneest également une bonne solution. Mais cette option a un inconvénient, elle ne fonctionne pas avec toutes les longueurs de numéro de téléphone. Par exemple, un numéro de téléphone de 11 numéros ne fonctionnera pas avec cette option. La solution consiste à faire précéder vos numéros de téléphone du code du pays.

Exemple:

08034448845 ne fonctionnera pas

mais +2348034448845va

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

C'est ainsi que vous pouvez ouvrir directement le numéro attribué à l'étiquette EditText sur le numéroteur.

saurabh yadav
la source
1

Ajouter une autorisation dans le manifeste:

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

Créer un bouton ou tout autre exemple de 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);

    }
});
Pouria Hemati
la source
cette réponse est correcte mais cette réponse ne correspond pas à la question.
lune