Wie kann ich die Telefonnummer des Geräts, auf dem meine Android-App läuft, programmatisch abrufen?
Antworten
Zu viele Anzeigen?Código:
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
Erforderliche Erlaubnis:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Vorbehalte:
Den zahlreichen Kommentaren zufolge gibt es einige Vorbehalte, die zu beachten sind. Dies kann zurückkehren null
o ""
ou même "???????"
und es kann eine veraltete Telefonnummer zurückgeben, die nicht mehr gültig ist. Wenn Sie etwas wollen, das das Gerät eindeutig identifiziert, sollten Sie getDeviceId()
ではなく
Es gibt keine garantierte Lösung für dieses Problem, da die Telefonnummer nicht auf allen SIM-Karten gespeichert ist oder vom Netz an das Telefon übertragen wird. Dies gilt insbesondere für einige Länder, in denen eine physische Adressüberprüfung erforderlich ist und die Rufnummernzuweisung erst danach erfolgt. Die Zuteilung der Telefonnummer erfolgt im Netz - und kann geändert werden, ohne dass die SIM-Karte oder das Gerät gewechselt werden müssen (so wird z. B. die Portierung unterstützt).
Ich weiß, dass es mühsam ist, aber wahrscheinlich ist es die beste Lösung, den Benutzer zu bitten, seine Telefonnummer einmal einzugeben und sie zu speichern.
Update: Diese Antwort ist nicht mehr verfügbar, da Whatsapp aufgehört hat, die Telefonnummer als Kontonamen zu veröffentlichen. Bitte beachten Sie diese Antwort nicht.
Es gibt tatsächlich eine alternative Lösung, die Sie in Betracht ziehen sollten, wenn Sie sie nicht über den Telefondienst erhalten können.
Ab heute können Sie auf eine weitere große Anwendung zurückgreifen: Whatsapp. AccountManager
. Millionen von Geräten haben diese Anwendung installiert, und wenn Sie die Rufnummer nicht über TelephonyManager
können Sie dies ausprobieren.
Erlaubnis:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Código:
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);
}
Siehe actype
für WhatsApp-Konto
if(actype.equals("com.whatsapp")){
String phoneNumber = ac.name;
}
Natürlich kann es sein, dass Sie es nicht bekommen, wenn Sie WhatsApp nicht installiert haben, aber es ist trotzdem einen Versuch wert. Und denken Sie daran, dass Sie den Benutzer immer um eine Bestätigung bitten sollten.
So können Sie eine Telefonnummer über die Play Services API ohne Erlaubnis und Hacks anfordern. Quelle y Vollständiges Beispiel .
In Ihrer 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;
}
}
Daraufhin wird ein Dialog wie der folgende angezeigt:
Wie in meinem frühere Antwort
Verwenden Sie den folgenden Code:
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
Geben Sie in der Datei AndroidManifest.xml die folgende Berechtigung:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Aber denken Sie daran, dass dieser Code nicht immer funktioniert, da die Handynummer von der SIM-Karte und dem Netzbetreiber/Handyanbieter abhängt.
Versuchen Sie auch, sich zu informieren Telefon--> Einstellungen --> Über --> Telefonidentität Wenn Sie die Nummer dort sehen können, ist die Wahrscheinlichkeit höher, dass Sie die Telefonnummer aus dem oben genannten Code erhalten. Wenn Sie nicht in der Lage sind, die Telefonnummer in den Einstellungen zu sehen, dann werden Sie nicht in der Lage sein, über diesen Code zu bekommen!
Vorgeschlagene Abhilfe:
- Abrufen der Telefonnummer des Benutzers als manuelle Eingabe des Benutzers.
- Senden Sie einen Code per SMS an die Handynummer des Benutzers.
- Aufforderung zur Eingabe des Codes zur Bestätigung der Rufnummer.
- Speichern Sie die Nummer in der gemeinsamen Voreinstellung.
Führen Sie die obigen 4 Schritte einmalig beim ersten Start der App durch. Später, wenn die Telefonnummer benötigt wird, verwenden Sie den in den gemeinsamen Einstellungen verfügbaren Wert.
- See previous answers
- Weitere Antworten anzeigen