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?

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.


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.


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.


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


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.


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);

    }
});

cette réponse est correcte mais cette réponse ne correspond pas à la question.
lune
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.