Ermitteln Sie programmgesteuert die Telefonnummer des Android-Telefons

443

Wie kann ich programmgesteuert die Telefonnummer des Geräts abrufen, auf dem meine Android-App ausgeführt wird?

jkap
quelle
Dies ist nur möglich, wenn Sie es selbst eingeben. Die Telefonnummer ist nicht vom Handy oder der SIM-
Karte bekannt
3
@tomsoft Denken Sie darüber nach ... Wie überprüfen Apps wie Facebook Ihre Telefonnummer automatisch?
Eddie Hart
1
@tomsoft Nein, meistens wird nicht einmal nach Ihrer Telefonnummer gefragt, oder wenn ja, ist die Box vorgefüllt.
Eddie Hart
1
@tomsoft Nun, ich habe mich neulich bei Facebook angemeldet und es hat nicht nach meiner Nummer gefragt, als es mir einen Code geschrieben hat. Versuch es. ;)
Eddie Hart
1
@EddieHart Mach es auch und ich wurde nach meiner Telefonnummer gefragt. Dies ist also eine Bestätigung dafür, dass dies im Allgemeinen nicht zugänglich ist und einige Bediener diese Informationen möglicherweise beim Setup hinzufügen, dies ist jedoch keine GMS-Standardfunktion
Tomsoft,

Antworten:

484

Code:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

Erforderliche Erlaubnis:

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

Vorsichtsmaßnahmen:

Nach den hoch bewerteten Kommentaren sind einige Vorbehalte zu beachten. Dies kann zurückkehren nulloder ""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.

Alex Volovoy
quelle
150
Eigentlich nicht so perfekt. Als ich diese Methode das letzte Mal ausprobiert habe, wurde die Telefonnummer gemeldet, die mein Telefon ursprünglich hatte, bevor meine alte Handynummer darauf portiert wurde. Dies ist wahrscheinlich immer noch der Fall, da die App "Einstellungen" immer noch diese nicht mehr verfügbare Nummer anzeigt. Es gibt auch Berichte, dass einige SIM-Karten diese Methode zurückgeben null. Davon abgesehen ist mir keine bessere Antwort bekannt.
CommonsWare
4
Mark hat recht. Wenn die Absicht besteht, etwas zu verwenden, das das Telefon eindeutig identifiziert, würde ich getDeviceId () verwenden, das IMEA für GSM zurückgibt.
Alex Volovoy
15
(Ich denke du meinst IMEI ...?)
ChaimKut
23
Nun, ich habe es auf Nexus One mit Android OS 2.2 getestet und es gibt null zurück
Omar Rehman
43
Entwickler denken möglicherweise, dass dies die perfekte Antwort ist, wenn man die Anzahl der Stimmen berücksichtigt. Ein Hinweis sollte hinzugefügt werden, um den Entwickler zu warnen, dass diese Methode nicht immer die Telefonnummer angibt.
Habeeb Perwad
151

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.

Johan
quelle
18
Um die genommene Nummer zu überprüfen, können Sie eine SMS (mit einem Code) an die Nummer senden und die Antwort steuern, indem Sie einen Listener auf "android.provider.Telephony.SMS_RECEIVED" setzen. Auf diese Weise können Sie sicherstellen, dass die Nummer korrekt ist und funktioniert
Hossein Shahdoost
1
Kreative Lösung, aber Sie möchten den Benutzer möglicherweise darüber informieren, dass Sie dies tun, nur für den Fall, dass ihm dies in Rechnung gestellt wird.
Norman H
3
Gibt es einen Anbieter, der für den Empfang einfacher Textnachrichten Gebühren erhebt?!
ThiefMaster
9
Ja absolut. Bevor ich meinem Plan eine SMS hinzufügte, wurden mir 0,30 USD pro empfangener Textnachricht berechnet. Rogers in Kanada.
John Kroetch
44

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önnen TelephonyManager, können Sie dies ausprobieren.

Genehmigung:

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

Code:

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();

for (Account ac : accounts) {
    String acname = ac.name;
    String actype = ac.type;
    // Take your time to look at all available accounts
    System.out.println("Accounts : " + acname + ", " + actype);
}

Suchen Sie actypenach dem WhatsApp-Konto

if(actype.equals("com.whatsapp")){
    String phoneNumber = ac.name;
}

Natü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.

Chor Wai Chun
quelle
1
Ich habe das heute gerade gesehen, als ich mit Konten rumgespielt habe. Es ist ziemlich schlimm, dass die Nummer so angezeigt wird. Natürlich benötigen Sie die Berechtigung GET_ACCOUNTS, und zu diesem Zeitpunkt ist es dem Benutzer wahrscheinlich egal, über welche Berechtigungen die App verfügt.
Jargetz
9
Diese Lösung ist veraltet. WhatsApp speichert die Telefonnummer nicht mehr auf dem Kontonamen. Wissen Sie, wo WhatsApp die Telefonnummer nach dem neuen Update speichert?
Cohelad
@Cohelad danke für die Aktualisierung, ich werde später einen Scheck haben und diese Antwort nach Bestätigung streichen, während ich keine Ahnung habe, wo sie die Nummer speichern
Chor Wai Chun
3
Aber Viber enthüllt die Nummer! com.viber.voip.account
xnagyg
32

Wie in meiner früheren Antwort gepostet

Verwenden Sie den folgenden Code:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

Geben Sie in AndroidManifest.xml die folgende Berechtigung:

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

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:

  1. Rufen Sie die Telefonnummer des Benutzers als manuelle Eingabe vom Benutzer ab.
  2. Senden Sie einen Code per SMS an die Handynummer des Benutzers.
  3. Bitten Sie den Benutzer, den Code einzugeben, um die Telefonnummer zu bestätigen.
  4. Speichern Sie die Nummer in sharedpreference.

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.

Nishanthi Grashia
quelle
Diese Antwort deckt alle Faktoren ab, es sollte die akzeptierte sein =)
Slava Fomin II
Wie kann ich beide Handynummern erhalten, wenn auf dem Telefon eine Dual-Sim verfügbar ist? mit obigem Code. Für Single Sim funktioniert es gut
Amrit Chakradhari
26

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

compile "com.google.android.gms:play-services-auth:$gms_version"

In Ihrer Aktivität (der Code ist vereinfacht):

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...
    googleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Auth.CREDENTIALS_API)
            .build();
    requestPhoneNumber(result -> {
        phoneET.setText(result);
    });
}

public void requestPhoneNumber(SimpleCallback<String> callback) {
    phoneNumberCallback = callback;
    HintRequest hintRequest = new HintRequest.Builder()
            .setPhoneNumberIdentifierSupported(true)
            .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest);
    try {
        startIntentSenderForResult(intent.getIntentSender(), PHONE_NUMBER_RC, null, 0, 0, 0);
    } catch (IntentSender.SendIntentException e) {
        Logs.e(TAG, "Could not start hint picker Intent", e);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PHONE_NUMBER_RC) {
        if (resultCode == RESULT_OK) {
            Credential cred = data.getParcelableExtra(Credential.EXTRA_KEY);
            if (phoneNumberCallback != null){
                phoneNumberCallback.onSuccess(cred.getId());
            }
        }
        phoneNumberCallback = null;
    }
}

Dadurch wird ein Dialog wie folgt generiert:

Geben Sie hier die Bildbeschreibung ein

Dmide
quelle
2
Hinweisanforderung zeigt die Telefonnummer des mit dem Telefon verbundenen E-Mail-Kontos an. Die Dropdown-Liste wird auch dann angezeigt, wenn das Gerät keine Sim enthält.
Ari
Wie werden im Dialog mehrere Nummern angezeigt, während nur eine SIM-Karte vorhanden ist? Für mich zeigt es 5 Zahlen. : / :)
cgr
Wie können wir die erste Telefonnummer automatisch in Android auswählen?
Noorul
13
private String getMyPhoneNumber(){
    TelephonyManager mTelephonyMgr;
    mTelephonyMgr = (TelephonyManager)
        getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number();
}

private String getMy10DigitPhoneNumber(){
    String s = getMyPhoneNumber();
    return s != null && s.length() > 2 ? s.substring(2) : null;
}

Code von http://www.androidsnippets.com/get-my-phone-number

Emil Hajric
quelle
@JaredBurrows wegen "s.substring (2)".
Cookie Monster
1
es funktioniert nicht für mich. Ich bekomme einen NULL-Wert (Sunrise SIM-Karte, Schweiz)
E-Nature
Ihr Link ist defekt.
Ümañg ßürmån
11

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

// Construct a request for phone numbers and show the picker
private void requestHint() {
    HintRequest hintRequest = new HintRequest.Builder()
       .setPhoneNumberIdentifierSupported(true)
       .build();

    PendingIntent intent = Auth.CredentialsApi.getHintPickerIntent(
        apiClient, hintRequest);
    startIntentSenderForResult(intent.getIntentSender(),
        RESOLVE_HINT, null, 0, 0, 0);
} 
Verkabelung
quelle
Dies erfordert Firebase
Vlad
@Vlad Nein, tut es nicht. Dies erfordert nur Google Play Services, die mit den meisten Geräten geliefert werden. Zitat aus dem Blogpost: "Bevor Sie beginnen, müssen Sie ein Gerät mit einer Telefonnummer erstellen und testen, das SMS empfangen kann und Google Play-Dienste 10.2.x und höher ausführt."
Wirling
9

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.

user_CC
quelle
Meins auch, was ist dieser Zustand? Wandernd? Oder vielleicht ist auf der SIM-Karte einfach nicht die Nummer gespeichert.
Alexandre Marcondes
8

Manchmal gibt der folgende Code eine nullleere Zeichenfolge zurück.

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

Mit unten stehender Erlaubnis

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

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:

String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"};
Object object = getContentResolver().query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
        main_data, "mimetype=?",
        new String[]{"vnd.android.cursor.item/phone_v2"},
        "is_primary DESC");
if (object != null) {
    do {
        if (!((Cursor) (object)).moveToNext())
            break;
        // This is the phoneNumber
        String s1 = ((Cursor) (object)).getString(4);
    } while (true);
    ((Cursor) (object)).close();
}

Sie müssen diese beiden Berechtigungen hinzufügen.

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

Hoffe das hilft, danke!

aktiv seit93
quelle
Könnte ich bitte fragen: Im zweiten Snippet, welches ist die Handynummer?
iOSAndroidWindowsMobileAppsDev
1
Wert von String s1ist die Telefonnummer.
activesince93
Dieser Code funktioniert bei mir nicht. (Ihr letzter Codefragment). Gibt eine leere Zeichenfolge zurück.
Kristy Welsh
Bitte erläutern Sie Ihre Antwort. Wo ist die Nummer gespeichert und wie enthält diese die Nummer? Abhängig von was?
not2qubit
3
@ not2qubit Ich denke, es greift auf den Selbstkontakt in der Kontakte-App zu
Samplasion
4

Dies ist eine vereinfachte Antwort:

public String getMyPhoneNumber()
{
    return ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
            .getLine1Number();
}
EP Lewis
quelle
3

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 "??????"

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

 TelephonyManager tel= (TelephonyManager)this.getSystemService(Context.
            TELEPHONY_SERVICE);
    String PhoneNumber =  tel.getLine1Number();

Hinweis: - Ich habe diese Lösung in folgenden Geräten getestet: Moto x, Samsung Tab 4, Samsung S4, Nexus 5 und Redmi 2 prime, aber sie funktioniert nicht jedes Mal, wenn eine leere Zeichenfolge zurückgegeben wird

  1. Diese Methode funktioniert nur in Redmi 2 prime, dafür muss jedoch eine Lesekontaktberechtigung im Manifest hinzugefügt werden.

Hinweis: - Dies ist auch nicht die garantierte und effiziente Lösung. Ich habe diese Lösung auf vielen Geräten getestet, aber sie funktionierte nur in Redmi 2 prime, einem Dual-Sim-Gerät. Es gibt mir zwei Handynummern. Die erste ist korrekt, die zweite jedoch nicht gehöre zu meiner zweiten sim es gehört zu meiner alten sim karte die ich nicht benutze.

 String main_data[] = {"data1", "is_primary", "data3", "data2", "data1",
            "is_primary", "photo_uri", "mimetype"};
    Object object = getContentResolver().
            query(Uri.withAppendedPath(android.provider.ContactsContract.Profile.CONTENT_URI, "data"),
            main_data, "mimetype=?",
            new String[]{"vnd.android.cursor.item/phone_v2"},
            "is_primary DESC");
    String s1="";
    if (object != null) {
        do {
            if (!((Cursor) (object)).moveToNext())
                break;
            // This is the phoneNumber
             s1 =s1+"---"+ ((Cursor) (object)).getString(4);
        } while (true);
        ((Cursor) (object)).close();
    }
  1. Bei meinen Recherchen habe ich früher festgestellt, dass es möglich war, eine Handynummer über ein WhatsApp-Konto abzurufen, aber jetzt speichert die neue WhatsApp-Version die Handynummer des Benutzers nicht mehr.

Fazit : - Android hat keine garantierte Lösung, um die Handynummer des Benutzers programmgesteuert abzurufen.

Vorschlag : - 1. Wenn Sie die Handynummer des Benutzers überprüfen möchten, bitten Sie den Benutzer, seine Nummer anzugeben. Mit otp können Sie dies überprüfen.

  1. Wenn Sie das Gerät des Benutzers identifizieren möchten, können Sie dafür einfach die IMEI-Nummer des Geräts abrufen.
ramkrishna kushwaha
quelle
2

TelephonyManagerist 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.

Naveed Ahmad
quelle
1
Diese Methode ist jedoch fehleranfällig. Der Benutzer kann eine falsche Nummer eingeben.
Zohra Khan
3
Ja, zu diesem Zweck habe ich eine Textnachricht verwendet. Wenn der Benutzer eine Nummer eingibt, können Sie über SmsManager die App-Nachricht selbst eingeben. Dadurch können wir smsReciever verwenden, um die ursprüngliche Nummer zu erhalten
Naveed Ahmad
1
Ich habe noch eine Frage. Bei dieser Methode wird vom Benutzer eine SMS-Gebühr erhoben (wenn es sich nicht um eine gebührenfreie Nummer handelt). Gibt es eine andere Methode, mit der ich die Telefonnummer des Benutzers erhalten kann?
Zohra Khan
Ja, natürlich wird für diese SMS eine Gebühr erhoben, wenn die Nummer keine gebührenfreie Nummer ist.
Naveed Ahmad
Nein, ich denke, es gibt bis jetzt keine solche Methode ohne TelephonyManager. und ich weise in meiner Antwort auf das Problem von TelephoneManager hin.
Naveed Ahmad
2

Hier ist eine Kombination der Lösungen, die ich gefunden habe (Beispielprojekt hier , wenn Sie auch das automatische Ausfüllen aktivieren möchten):

Manifest

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

build.gradle

    implementation "com.google.android.gms:play-services-auth:17.0.0"

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private lateinit var googleApiClient: GoogleApiClient

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tryGetCurrentUserPhoneNumber(this)
        googleApiClient = GoogleApiClient.Builder(this).addApi(Auth.CREDENTIALS_API).build()
        if (phoneNumber.isEmpty()) {
            val hintRequest = HintRequest.Builder().setPhoneNumberIdentifierSupported(true).build()
            val intent = Auth.CredentialsApi.getHintPickerIntent(googleApiClient, hintRequest)
            try {
                startIntentSenderForResult(intent.intentSender, REQUEST_PHONE_NUMBER, null, 0, 0, 0);
            } catch (e: IntentSender.SendIntentException) {
                Toast.makeText(this, "failed to show phone picker", Toast.LENGTH_SHORT).show()
            }
        } else
            onGotPhoneNumberToSendTo()

    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == REQUEST_PHONE_NUMBER) {
            if (resultCode == Activity.RESULT_OK) {
                val cred: Credential? = data?.getParcelableExtra(Credential.EXTRA_KEY)
                phoneNumber = cred?.id ?: ""
                if (phoneNumber.isEmpty())
                    Toast.makeText(this, "failed to get phone number", Toast.LENGTH_SHORT).show()
                else
                    onGotPhoneNumberToSendTo()
            }
        }
    }

    private fun onGotPhoneNumberToSendTo() {
        Toast.makeText(this, "got number:$phoneNumber", Toast.LENGTH_SHORT).show()
    }


    companion object {
        private const val REQUEST_PHONE_NUMBER = 1
        private var phoneNumber = ""

        @SuppressLint("MissingPermission", "HardwareIds")
        private fun tryGetCurrentUserPhoneNumber(context: Context): String {
            if (phoneNumber.isNotEmpty())
                return phoneNumber
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                val subscriptionManager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
                try {
                    subscriptionManager.activeSubscriptionInfoList?.forEach {
                        val number: String? = it.number
                        if (!number.isNullOrBlank()) {
                            phoneNumber = number
                            return number
                        }
                    }
                } catch (ignored: Exception) {
                }
            }
            try {
                val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
                val number = telephonyManager.line1Number ?: ""
                if (!number.isBlank()) {
                    phoneNumber = number
                    return number
                }
            } catch (e: Exception) {
            }
            return ""
        }
    }
}
Android-Entwickler
quelle
Bitte lesen Sie die Kommentare zu dieser Antwort stackoverflow.com/a/48210130/5457916 , bevor Sie diese Methode implementieren
bescheidene_wolf
Der Link, den Sie bereitgestellt haben, ist nur ein Teil dessen, was ich hier getan habe. Hier habe ich zuerst versucht, es selbst automatisch zu füllen. Und haben Fallback dafür.
Android-Entwickler
Ich weiß, Sir, Ihre Antwort ist großartig und in keiner Weise falsch. Ich wollte nur, dass die Leser die Bedingungen kennen, die mit dieser Methode verbunden sind, z. B. kann dies die Nummer ausfüllen, die mit Ihrem Google-Konto usw. in den dortigen Kommentaren verknüpft ist.
bescheidener Wolf
Ich bevorzuge immer noch, was ich geschrieben habe. Entschuldigung
Android Entwickler
1

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.

public static String getLineNumberPhone(Context scenario) {
    TelephonyManager tMgr = (TelephonyManager) scenario.getSystemService(Context.TELEPHONY_SERVICE);
    @SuppressLint("MissingPermission") String mPhoneNumber = tMgr.getLine1Number();
    return mPhoneNumber;
}
Ariel Alejandro Wagner
quelle
0

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()oder TelephonyManager.getCompleteVoiceMailNumber(), je nach Geschmack, den Sie brauchen.

Hoffe das hilft.

Jim
quelle
5
Es gibt keine Funktion "getCompleteVoiceMailNumber", und getVoiceMailNumber () gibt eine Nummer zurück, die sich von der tatsächlichen Nummer des Telefons unterscheidet.
Android-Entwickler
Dies ist ein Trick, der nur mit einigen Mobilfunkbetreibern auf der Welt funktioniert. Aber technisch könnte eine Problemumgehung sein.
Technik
0

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:

val hintRequest = HintRequest.Builder()
    .setPhoneNumberIdentifierSupported(true)
    .build()

val intent = Credentials.getClient(context).getHintPickerIntent(hintRequest)

startIntentSenderForResult(
    intent.intentSender,
    PHONE_NUMBER_FETCH_REQUEST_CODE,
    null,
    0,
    0,
    0,
    null
)

Nach dem Tippen auf den Dialog "Wiedergabedienste":

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent? { 
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode == PHONE_NUMBER_FETCH_REQUEST_CODE) {
        data?.getParcelableExtra<Credential>(Credential.EXTRA_KEY)?.id?.let { 
            useFetchedPhoneNumber(it)
        }
    }
}
Reyaz Ahmad
quelle
-6

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.

Strahl
quelle
Warum Abstimmungen?
bescheidene_Wolf