500 Stimmen

Programmatisch die Telefonnummer des Android-Handys ermitteln

Wie kann ich die Telefonnummer des Geräts, auf dem meine Android-App läuft, programmatisch abrufen?

1voto

Ein kleiner Beitrag. In meinem Fall startete der Code eine Fehlerausnahme. Ich musste eine Annotation setzen, damit der Code ausgeführt werden kann und das Problem behoben wird. 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;
}

0voto

Wenn ich eine Nummer von voiceMailNumer dann funktioniert es gut -

val telephonyManager = getSystemService(TELEPHONY_SERVICE) as TelephonyManager
    if (ActivityCompat.checkSelfPermission(this,
                    Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED
    ) {
        Log.d("number", telephonyManager.voiceMailNumber.toString())
    }

0voto

ROHIT LIEN Punkte 469

Für Android-Version >= LOLLIPOP_MR1 :

Erlaubnis hinzufügen:

Und nennen Sie dies :

 val subscriptionManager =
        getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {

val list = subscriptionManager.activeSubscriptionInfoList
        for (info in list) {
            Log.d(TAG, "number " + info.number)
            Log.d(TAG, "network name : " + info.carrierName)
            Log.d(TAG, "country iso " + info.countryIso)
        }
    }

0voto

Morgan Koh Punkte 1796

Ich würde die Verwendung nicht empfehlen TelephonyManager da es die Anwendung erfordert, dass sie READ_PHONE_STATE Erlaubnis während der Laufzeit.

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

Sollte Googles Play Service für die Authentifizierung verwenden und dem Benutzer die Möglichkeit geben, die zu verwendende Telefonnummer auszuwählen. mehrere SIM-Karten anstatt zu versuchen zu erraten, welche die primäre SIM-Karte ist.

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

fun main() {
    val googleApiClient = GoogleApiClient.Builder(context)
        .addApi(Auth.CREDENTIALS_API).build()

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

    val hintPickerIntent = Auth.CredentialsApi.getHintPickerIntent(
        googleApiClient, hintRequest
    )

    startIntentSenderForResult(
        hintPickerIntent.intentSender, REQUEST_PHONE_NUMBER, null, 0, 0, 0
    )
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) {
        REQUEST_PHONE_NUMBER -> {
            if (requestCode == Activity.RESULT_OK) {
                val credential = data?.getParcelableExtra<Credential>(Credential.EXTRA_KEY)
                val selectedPhoneNumber = credential?.id
            }
        }
    }
}

0voto

Jim Punkte 10052

Es ist zwar möglich, mehrere Voicemail-Konten zu haben, aber wenn Sie von Ihrer eigenen Nummer aus anrufen, leiten die Netzbetreiber Sie an die Voicemail weiter. So, TelephonyManager.getVoiceMailNumber() o TelephonyManager.getCompleteVoiceMailNumber() je nach gewünschtem Geschmack.

Ich hoffe, das hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X