Wie kann ich die Telefonnummer des Geräts, auf dem meine Android-App läuft, programmatisch abrufen?
Antworten
Zu viele Anzeigen?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;
}
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())
}
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)
}
}
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
}
}
}
}
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.