Jak mogę otworzyć dialer z wyświetlonym numerem telefonu?


193

Nie muszę dzwonić na numer telefonu, po prostu potrzebuję dialera, aby otworzyć numer telefonu już wyświetlony. Czego Intentpowinienem użyć, aby to osiągnąć?

Odpowiedzi:


532

Dwa sposoby na osiągnięcie tego.

1) Konieczność uruchomienia dialera za pomocą kodu, bez interakcji użytkownika.

Trzeba Action_Dial,

użyj poniższego kodu spowoduje otwarcie Dialera z określonym numerem

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

Prefiks „tel:” jest wymagany , w przeciwnym razie zostanie zgłoszony następujący wyjątek: java.lang.IllegalStateException: Nie można wykonać metody działania.

Action_Dial nie wymaga żadnego pozwolenia.

Jeśli chcesz zainicjować połączenie bezpośrednio bez interakcji użytkownika , możesz użyć akcji Intent.ACTION_CALL. W takim przypadku musisz dodać następujące uprawnienie w pliku AndroidManifest.xml:

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

2) Musisz kliknąć ciąg numeru telefonu i rozpocząć połączenie.

android:autoLink="phone" 

Musisz użyć TextView z poniższą właściwością.

android: autoLink = "phone" android: linksClickable = "true" właściwość textView

W ten sposób nie musisz używać zamiaru ani uzyskiwać pozwolenia.


9
To jest świetne i różni się od Intent.ACTION_CALL tym, że nie dzwoni natychmiast
Amt87

Czy ACTION_DIAL wymaga pozwolenia, czy tylko ACCESS_CALL?
Marc Plano-Lesay

1
Te prace z numerami telefonów, z Danii , jak również :) Ty nie trzeba dodać +45 przed numerem. Działa dobrze po prostu analizując numer telefonu
ymerdrengene

1
Mam problem z przyciskiem Wstecz po otwarciu dialera w nowej intencji. Mogę wrócić do mojej aplikacji tylko po naciśnięciu 3 przycisków Wstecz (pokazuje mi kilka ekranów dialera, których nie otworzyłem - sam dialer, utwórz nowy ekran kontaktów, ulubione). Czy ktoś wie, jak wrócić do aplikacji za jednym naciśnięciem przycisku Wstecz?
kashlo

2
2012 ... Stare dobre czasy. To politycznie poprawny rok 2018, duże firmy sprzedają dane użytkowników, a nasze aplikacje muszą radzić sobie z biurokracją Androida, aby NIE obsługiwać SMS-ów i połączeń telefonicznych.
Josh

52

Dość późno na odpowiedź, ale jeśli masz TextViewnumer, na którym wyświetlasz numer telefonu, to wcale nie musisz zajmować się zamiarami, możesz po prostu użyć atrybutu XML, android:autoLink="phone"a system operacyjny automatycznie zainicjuje ACTION_DIALzamiar.


Bardzo szybkie podejście!
Taslim Oseni

7

Ok, odpowiedź na to pytanie będzie wyjątkowo późna. Ale tutaj jest tylko jedna próbka, jeśli chcesz to zrobić w Kotlin .

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

Myślałem, że to może komuś pomóc.


2

Jak wspomniano powyżej w @ashishduh, używanie android:autoLink="phonejest również dobrym rozwiązaniem. Ale ta opcja ma jedną wadę, nie działa z wszystkimi długościami numerów telefonów. Na przykład numer 11 numerów nie będzie działał z tą opcją. Rozwiązaniem jest prefiksowanie numerów telefonów kodem kraju.

Przykład:

08034448845 nie zadziała

ale +2348034448845będzie


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

W ten sposób można bezpośrednio otworzyć numer przypisany do etykiety EditText na dialer.


1

Dodaj zezwolenie w manifeście:

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

Utwórz przycisk lub dowolny przykład widżetu: 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);

    }
});

ta odpowiedź jest poprawna, ale ta odpowiedź nie pasuje do pytania.
księżyc
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.