Jak mogę programowo uzyskać numer telefonu urządzenia, na którym działa moja aplikacja na Androida?
443
Jak mogę programowo uzyskać numer telefonu urządzenia, na którym działa moja aplikacja na Androida?
Odpowiedzi:
Kod:
Wymagane pozwolenie:
Ostrzeżenia:
Zgodnie z bardzo pozytywnymi komentarzami należy pamiętać o kilku zastrzeżeniach. Może to zwrócić
null
lub""
nawet"???????"
, i może zwrócić nieaktualny numer telefonu, który nie jest już ważny. Jeśli chcesz czegoś, co jednoznacznie identyfikuje urządzenie, powinieneś użyćgetDeviceId()
zamiast tego.źródło
null
. Biorąc to pod uwagę, nie znam lepszej odpowiedzi.Nie ma gwarantowanego rozwiązania tego problemu, ponieważ numer telefonu nie jest fizycznie przechowywany na wszystkich kartach SIM ani nadawany z sieci do telefonu. Jest to szczególnie prawdziwe w niektórych krajach, które wymagają fizycznej weryfikacji adresu, a przypisanie numeru następuje dopiero później. Przypisanie numeru telefonu odbywa się w sieci - i można je zmienić bez zmiany karty SIM lub urządzenia (np. W ten sposób obsługiwane jest portowanie).
Wiem, że to ból, ale najprawdopodobniej najlepszym rozwiązaniem jest poproszenie użytkownika o jednorazowe wprowadzenie numeru telefonu i zapisanie go.
źródło
Aktualizacja: ta odpowiedź nie jest już dostępna, ponieważ Whatsapp przestał wyświetlać numer telefonu jako nazwę konta, uprzejmie zignoruj tę odpowiedź.
Istnieje alternatywne rozwiązanie, które możesz rozważyć, jeśli nie możesz uzyskać go za pośrednictwem usługi telefonii.
Na dzień dzisiejszy możesz polegać na innej dużej aplikacji Whatsapp
AccountManager
. Miliony urządzeń ma zainstalowaną tę aplikację, a jeśli nie możesz uzyskać numeru telefonuTelephonyManager
, możesz spróbować.Pozwolenie:
Kod:
Sprawdź
actype
konto WhatsAppOczywiście możesz go nie dostać, jeśli użytkownik nie zainstalował WhatsApp, ale i tak warto spróbować. I pamiętaj, że zawsze powinieneś poprosić użytkownika o potwierdzenie.
źródło
Jak napisano w mojej wcześniejszej odpowiedzi
Użyj poniższego kodu:
W AndroidManifest.xml udziel następujące uprawnienia:
Pamiętaj jednak, że ten kod nie zawsze działa, ponieważ numer telefonu komórkowego zależy od karty SIM i operatora sieci / operatora komórkowego.
Spróbuj także sprawdzić w Telefon -> Ustawienia -> Informacje -> Tożsamość telefonu , Jeśli możesz wyświetlić tam numer, prawdopodobieństwo uzyskania numeru telefonu z powyższego kodu jest wyższe. Jeśli nie możesz wyświetlić numeru telefonu w ustawieniach, nie będziesz w stanie uzyskać tego kodu!
Sugerowane obejście:
Wykonaj powyższe 4 kroki jako jednorazowe działanie podczas pierwszego uruchomienia aplikacji. Później, gdy wymagany jest numer telefonu, użyj wartości dostępnej w preferencjach wspólnych.
źródło
Tak właśnie prosisz o numer telefonu za pośrednictwem interfejsu API usług Play bez zgody i włamań. Źródło i pełny przykład .
W twoim build.gradle (wymagana wersja 10.2.xi wyższa):
W twojej działalności (kod jest uproszczony):
To wygeneruje takie okno dialogowe:
źródło
Kod pochodzi z http://www.androidsnippets.com/get-my-phone-number
źródło
Istnieje nowy interfejs API Androida, który pozwala użytkownikowi wybrać numer telefonu bez konieczności uzyskania pozwolenia. Spójrz na: https://android-developers.googleblog.com/2017/10/effective-phone-number-verification.html
źródło
Po prostu chcę tutaj dodać trochę do powyższych wyjaśnień w powyższych odpowiedziach. Co pozwoli zaoszczędzić czas także innym.
W moim przypadku ta metoda nie zwróciła żadnego numeru telefonu komórkowego, zwrócony został pusty ciąg. Stało się tak z powodu przeniesienia mojego numeru na nową kartę SIM. Jeśli więc przejdę do opcji Ustawienia> Informacje o telefonie> Status> Mój numer telefonu, wyświetli się komunikat „Nieznany”.
źródło
Czasami poniżej kodu zwraca
null
lub pusty ciąg.Z poniższym pozwoleniem
Jest inny sposób na uzyskanie numeru telefonu. Nie testowałem tego na wielu urządzeniach, ale powyższy kod nie działa za każdym razem.
Wypróbuj poniższy kod:
Musisz dodać te dwa uprawnienia.
Mam nadzieję, że to pomaga, dzięki!
źródło
String s1
będzie numerem telefonu.To jest bardziej uproszczona odpowiedź:
źródło
Po pierwsze uzyskanie numeru telefonu komórkowego przez użytkowników jest niezgodne z zasadami etycznymi, wcześniej było to możliwe, ale teraz, zgodnie z moimi badaniami, nie ma na to solidnego rozwiązania. Za pomocą kodu można uzyskać numer telefonu komórkowego, ale nie ma gwarancji, że zadziała. tylko w kilku urządzeniach. Po wielu badaniach znalazłem tylko trzy rozwiązania, ale nie działają one we wszystkich urządzeniach.
Istnieje następujący powód, dla którego nie otrzymujemy.
1.Urządzenie z Androidem i nowa karta SIM nie zapisuje numeru telefonu komórkowego, jeśli numer telefonu komórkowego nie jest dostępny w urządzeniu i w karcie SIM, w jaki sposób można uzyskać numer, jeśli dowolną starą kartę SIM posiadającą numer telefonu komórkowego, a następnie za pomocą Menedżera telefonii możemy uzyskać numer inny mądre zwróci „null” lub „” lub „??????”
źródło
TelephonyManager
nie jest właściwym rozwiązaniem, ponieważ w niektórych przypadkach numer nie jest przechowywany na karcie SIM. Sugeruję, abyś korzystał ze wspólnych preferencji, aby przechowywać numer telefonu użytkownika po raz pierwszy aplikacja jest otwarta, a numer zostanie użyty, kiedy będziesz potrzebować.źródło
Oto kombinacja rozwiązań, które znalazłem (przykładowy projekt tutaj , jeśli chcesz również sprawdzić automatyczne wypełnianie):
oczywisty
build.gradle
MainActivity.kt
źródło
Mały wkład. W moim przypadku kod uruchomił wyjątek błędu. Musiałem umieścić adnotację, aby uruchomić kod i naprawić ten problem. Tutaj pozwalam na ten kod.
źródło
Chociaż możliwe jest posiadanie wielu kont poczty głosowej, dzwoniąc z własnego numeru, przewoźnicy kierują Cię do poczty głosowej. Więc
TelephonyManager.getVoiceMailNumber()
lubTelephonyManager.getCompleteVoiceMailNumber()
, w zależności od potrzebnego smaku.Mam nadzieję że to pomoże.
źródło
Dodaj tę zależność:
implementation 'com.google.android.gms:play-services-auth:18.0.0'
Aby pobrać listę numerów telefonów, użyj tego:
Po dotknięciu okna dialogowego usług odtwarzania:
źródło
pracując nad aplikacją zabezpieczającą, która musiała uzyskać numer telefonu, od którego mój telefon mógł dostać się w ich ręce, musiałem to zrobić; 1. otrzymaj Boot zakończony, a następnie spróbuj uzyskać Line1_Number z telephonyManager, który zwraca wynik ciągu. 2. porównaj wynik Ciąg z moim własnym numerem telefonu, a jeśli się nie zgadzają lub ciąg zwraca wartość null, 3. potajemnie wyślij SMS-a zawierającego wynik ciągu plus specjalny znak na mój numer biura. 4. jeśli wysyłanie wiadomości nie powiedzie się, uruchom usługę i próbuj po każdej godzinie, aż do wysłania wiadomości SMS oczekującej na powrót. Dzięki tym krokom mogę uzyskać numer osoby używającej mojego zgubionego telefonu. nie ma znaczenia, czy dana osoba jest obciążona.
źródło