Wie kann ich programmgesteuert die Telefonnummer des Geräts abrufen, auf dem meine Android-App ausgeführt wird?
443
Wie kann ich programmgesteuert die Telefonnummer des Geräts abrufen, auf dem meine Android-App ausgeführt wird?
Antworten:
Code:
Erforderliche Erlaubnis:
Vorsichtsmaßnahmen:
Nach den hoch bewerteten Kommentaren sind einige Vorbehalte zu beachten. Dies kann zurückkehren
null
oder""
sogar"???????"
, und es kann eine veraltete Telefonnummer zurückgeben, die nicht mehr gültig ist. Wenn Sie etwas möchten, das das Gerät eindeutig identifiziert, sollten Sie es verwendengetDeviceId()
stattdessen verwenden.quelle
null
. Davon abgesehen ist mir keine bessere Antwort bekannt.Es gibt keine garantierte Lösung für dieses Problem, da die Telefonnummer nicht auf allen SIM-Karten gespeichert oder vom Netzwerk an das Telefon gesendet wird. Dies gilt insbesondere in einigen Ländern, in denen eine Überprüfung der physischen Adresse erforderlich ist und die Nummernvergabe erst danach erfolgt. Die Zuweisung von Telefonnummern erfolgt im Netzwerk - und kann geändert werden, ohne dass die SIM-Karte oder das Gerät geändert werden müssen (z. B. wird so die Portierung unterstützt).
Ich weiß, dass es Schmerzen sind, aber die wahrscheinlich beste Lösung besteht darin, den Benutzer zu bitten, seine Telefonnummer einmal einzugeben und zu speichern.
quelle
Update: Diese Antwort ist nicht mehr verfügbar, da Whatsapp die Telefonnummer nicht mehr als Kontonamen verfügbar gemacht hat. Bitte ignorieren Sie diese Antwort.
Es gibt tatsächlich eine alternative Lösung, die Sie in Betracht ziehen könnten, wenn Sie sie nicht über den Telefoniedienst erhalten können.
Ab heute können Sie sich mit WhatsApp auf eine andere große Anwendung verlassen
AccountManager
. Millionen von Geräten haben diese Anwendung installiert. Wenn Sie die Telefonnummer nicht über erhalten könnenTelephonyManager
, können Sie dies ausprobieren.Genehmigung:
Code:
Suchen Sie
actype
nach dem WhatsApp-KontoNatürlich erhalten Sie es möglicherweise nicht, wenn der Benutzer WhatsApp nicht installiert hat, aber es lohnt sich trotzdem, es zu versuchen. Und denken Sie daran, dass Sie den Benutzer immer um Bestätigung bitten sollten.
quelle
Wie in meiner früheren Antwort gepostet
Verwenden Sie den folgenden Code:
Geben Sie in AndroidManifest.xml die folgende Berechtigung:
Denken Sie jedoch daran, dass dieser Code nicht immer funktioniert, da die Mobiltelefonnummer von der SIM-Karte und dem Netzbetreiber / Mobilfunkanbieter abhängt.
Versuchen Sie auch, Telefon -> Einstellungen -> Info -> Telefonidentität einzuchecken . Wenn Sie die Nummer dort anzeigen können, ist die Wahrscheinlichkeit höher, dass Sie die Telefonnummer vom obigen Code erhalten. Wenn Sie die Telefonnummer in den Einstellungen nicht anzeigen können, können Sie diesen Code nicht abrufen!
Vorgeschlagene Problemumgehung:
Führen Sie die obigen 4 Schritte als einmalige Aktivität beim ersten Start der App aus. Verwenden Sie später, wenn eine Telefonnummer erforderlich ist, den in den gemeinsamen Einstellungen verfügbaren Wert.
quelle
Auf diese Weise fordern Sie eine Telefonnummer über die Play Services-API ohne Erlaubnis und Hacks an. Quelle und vollständiges Beispiel .
In Ihrem build.gradle (Version 10.2.x und höher erforderlich):
In Ihrer Aktivität (der Code ist vereinfacht):
Dadurch wird ein Dialog wie folgt generiert:
quelle
Code von http://www.androidsnippets.com/get-my-phone-number
quelle
Es gibt eine neue Android-API, mit der der Benutzer seine Telefonnummer ohne Erlaubnis auswählen kann. Schauen Sie sich Folgendes an: https://android-developers.googleblog.com/2017/10/effective-phone-number-verification.html
quelle
Ich möchte hier nur ein wenig zu den obigen Erklärungen in den obigen Antworten hinzufügen. Das spart auch anderen Zeit.
In meinem Fall hat diese Methode keine Handynummer zurückgegeben, es wurde eine leere Zeichenfolge zurückgegeben. Es lag an dem Fall, dass ich meine Nummer auf die neue Sim portiert hatte. Wenn ich also zu Einstellungen> Über Telefon> Status> Meine Telefonnummer gehe, wird "Unbekannt" angezeigt.
quelle
Manchmal gibt der folgende Code eine
null
leere Zeichenfolge zurück.Mit unten stehender Erlaubnis
Es gibt eine andere Möglichkeit, wie Sie Ihre Telefonnummer erhalten können. Ich habe dies nicht auf mehreren Geräten getestet, aber der obige Code funktioniert nicht jedes Mal.
Versuchen Sie den folgenden Code:
Sie müssen diese beiden Berechtigungen hinzufügen.
Hoffe das hilft, danke!
quelle
String s1
ist die Telefonnummer.Dies ist eine vereinfachte Antwort:
quelle
Zuallererst verstößt das Erhalten der Handynummer des Benutzers gegen die ethische Richtlinie, früher war es möglich, aber jetzt gibt es nach meinen Recherchen keine solide Lösung dafür. Durch die Verwendung eines Codes ist es möglich, die Handynummer zu erhalten, aber es kann keine Garantie dafür geben, dass es funktioniert nur in wenigen geräten. Nach vielen Recherchen habe ich nur drei Lösungen gefunden, die aber nicht auf allen Geräten funktionieren.
Es gibt den folgenden Grund, warum wir nicht bekommen.
1.Android-Gerät und neue Sim-Karte speichern keine Handynummer, wenn die Handynummer im Gerät nicht verfügbar ist, und in der Sim, wie es möglich ist, eine Nummer zu erhalten. Wenn eine alte SIM-Karte eine Handynummer hat, können wir mit dem Telefonie-Manager die andere Nummer erhalten weise wird es die "null" oder "" oder "??????"
quelle
TelephonyManager
ist nicht die richtige Lösung, da in einigen Fällen die Nummer nicht auf der SIM-Karte gespeichert ist. Ich schlage vor, dass Sie die gemeinsame Einstellung verwenden, um die Telefonnummer des Benutzers zum ersten Mal zu speichern, wenn die Anwendung geöffnet ist, und die Nummer wird verwendet, wann immer Sie sie benötigen.quelle
Hier ist eine Kombination der Lösungen, die ich gefunden habe (Beispielprojekt hier , wenn Sie auch das automatische Ausfüllen aktivieren möchten):
Manifest
build.gradle
MainActivity.kt
quelle
Ein kleiner Beitrag. In meinem Fall hat der Code eine Fehlerausnahme ausgelöst. Ich musste eine Anmerkung einfügen, damit der Code ausgeführt wird, und das Problem beheben. Hier lasse ich diesen Code.
quelle
Obwohl es möglich ist, mehrere Voicemail-Konten zu haben, leiten Sie die Anbieter bei Anrufen von Ihrer eigenen Nummer zur Voicemail weiter. Also,
TelephonyManager.getVoiceMailNumber()
oderTelephonyManager.getCompleteVoiceMailNumber()
, je nach Geschmack, den Sie brauchen.Hoffe das hilft.
quelle
Fügen Sie diese Abhängigkeit hinzu:
implementation 'com.google.android.gms:play-services-auth:18.0.0'
Verwenden Sie Folgendes, um die Liste der Telefonnummern abzurufen:
Nach dem Tippen auf den Dialog "Wiedergabedienste":
quelle
Während ich an einer Sicherheits-App arbeitete, die die Telefonnummer dessen abrufen musste, wer mein Telefon in die Hände bekommen könnte, musste ich dies tun. 1. Empfangen Sie Boot abgeschlossen und versuchen Sie dann, Line1_Number von telephonyManager abzurufen, der ein String-Ergebnis zurückgibt. 2. Vergleichen Sie das String-Ergebnis mit meiner eigenen Telefonnummer. Wenn sie nicht übereinstimmen oder der String null zurückgibt, 3. senden Sie heimlich eine SMS mit dem String-Ergebnis und einem speziellen Zeichen an meine Büronummer. 4. Wenn das Senden von Nachrichten fehlschlägt, starten Sie einen Dienst und versuchen Sie es nach jeder Stunde weiter, bis die Absicht, dass eine ausstehende SMS gesendet wird, erfolgreich ist. Mit diesen Schritten konnte ich die Nummer der Person ermitteln, die mein verlorenes Telefon verwendet. Es spielt keine Rolle, ob die Person belastet wird.
quelle