Wie kann ich den Dialer mit angezeigter Telefonnummer öffnen?


193

Ich muss die Telefonnummer nicht anrufen, sondern nur den Dialer mit der bereits angezeigten Telefonnummer öffnen. Was Intentsoll ich verwenden, um dies zu erreichen?

Antworten:


531

Zwei Möglichkeiten, dies zu erreichen.

1) Der Dialer muss per Code ohne Benutzerinteraktion gestartet werden.

Du brauchst Action_Dial,

Verwenden Sie den folgenden Code, um Dialer mit der angegebenen Nummer zu öffnen

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

Das Präfix 'tel:' ist erforderlich , andernfalls wird die folgende Ausnahme ausgelöst: java.lang.IllegalStateException: Die Methode der Aktivität konnte nicht ausgeführt werden.

Für Action_Dial ist keine Berechtigung erforderlich.

Wenn Sie den Anruf direkt ohne Benutzerinteraktion einleiten möchten , können Sie die Aktion verwenden Intent.ACTION_CALL. In diesem Fall müssen Sie die folgende Berechtigung in Ihre AndroidManifest.xml einfügen:

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

2) Der Benutzer muss auf die Zeichenfolge Phone_Number klicken und den Anruf starten.

android:autoLink="phone" 

Sie müssen TextView mit der folgenden Eigenschaft verwenden.

android: autoLink = "phone" android: linksClickable = "true" eine textView-Eigenschaft

Sie müssen auf diese Weise keine Absicht verwenden oder eine Erlaubnis einholen.


9
Das ist großartig und unterscheidet sich von Intent.ACTION_CALL dadurch, dass es nicht sofort
aufruft

Benötigt ACTION_DIAL die Berechtigung oder nur ACCESS_CALL?
Marc Plano-Lesay

1
Dies funktioniert auch mit Telefonnummern aus Dänemark :) Sie müssen nicht +45 vor der Nummer hinzufügen. Es funktioniert gut, nur die Telefonnummer zu
analysieren

1
Ich habe ein Problem mit der Zurück-Taste, nachdem ich den Dialer in neuer Absicht geöffnet habe. Ich kann nur mit 3 Zurück-Tasten-Drücken zu meiner Anwendung zurückkehren (es zeigt mir mehrere Bildschirme des Dialers, die ich nicht geöffnet habe - den Dialer selbst, neuen Kontaktbildschirm erstellen, Favoriten). Weiß jemand, wie man mit nur einem Zurück-Knopfdruck zur App zurückkehrt?
Kashlo

2
2012 ... Gute alte Zeiten. Es ist politisch korrekt 2018, große Unternehmen verkaufen Benutzerdaten und unsere Apps müssen sich mit der Bürokratie von Android befassen, nur um SMS- und Telefonanrufe NICHT zu unterstützen.
Josh

52

Ziemlich spät bei der Antwort, aber wenn Sie eine haben TextView, in der Sie die Telefonnummer anzeigen, müssen Sie sich überhaupt nicht mit Absichten befassen. Sie können einfach das XML-Attribut verwenden android:autoLink="phone"und das Betriebssystem initiiert automatisch eine ACTION_DIALAbsicht.


Sehr schneller Ansatz!
Taslim Oseni

7

Okay, es wird eine sehr späte Antwort auf diese Frage sein. Aber hier ist nur ein Beispiel, wenn Sie es in Kotlin tun möchten .

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

Ich dachte, es könnte jemandem helfen.


2

Wie oben erwähnt, ist die Verwendung von @ashishduh android:autoLink="phoneauch eine gute Lösung. Diese Option hat jedoch einen Nachteil: Sie funktioniert nicht bei allen Telefonnummernlängen. Beispielsweise funktioniert eine Telefonnummer von 11 Nummern mit dieser Option nicht. Die Lösung besteht darin, Ihren Telefonnummern den Ländercode voranzustellen.

Beispiel:

08034448845 wird nicht funktionieren

aber +2348034448845wird


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

Auf diese Weise können Sie die dem EditText zugewiesene Nummer direkt auf dem Dialer öffnen.


1

Berechtigung im Manifest hinzufügen:

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

Make-Button oder ein beliebiges Widget-Beispiel: 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);

    }
});

Diese Antwort ist korrekt, aber diese Antwort stimmt nicht mit der Frage überein.
Mond
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.