I know how to get user's phone number, but let's say the user's phone is dual SIM. Is there any way to get both phone numbers? Currently I am getting the active phone number only.
Asked
Active
Viewed 1.9k times
2 Answers
13
If the phone number is indeed stored in the SIM card, then you can use subscriptionmanager API (https://developer.android.com/reference/android/telephony/SubscriptionManager.html) to get the details on each subscription i.e for each SIM card.
You can call
- getActiveSubscriptionInfoList() which will return list. In your case if there are 2 SIM cards inserted, it should return 2 subscription infos
- In subscription info, you can call getNumber() API (https://developer.android.com/reference/android/telephony/SubscriptionInfo.html#getNumber()) to get the number
Please note that for this to work, the SIM card should have the phone number in it.
Please note this API is only supported from API level 22
Adding example code :
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
SubscriptionManager subscriptionManager = SubscriptionManager.from(getApplicationContext());
List<SubscriptionInfo> subsInfoList = subscriptionManager.getActiveSubscriptionInfoList();
Log.d("Test", "Current list = " + subsInfoList);
for (SubscriptionInfo subscriptionInfo : subsInfoList) {
String number = subscriptionInfo.getNumber();
Log.d("Test", " Number is " + number);
}
}

manishg
- 9,520
- 1
- 16
- 19
-
-
8
-
We are getting Null value. Is there any better alternative or solution of this? – Tushar Gogna Nov 16 '18 at 06:06
-
-
if sim card number is null, then need to set number in android phone, using setting -> SIM cards -> then set number in SIM – Somnath Kadam Apr 28 '20 at 14:07
0
I have Kotlinized @manishg code (from 5 years ago):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
val subscriptionManager = SubscriptionManager.from(applicationContext)
val subsInfoList = subscriptionManager.activeSubscriptionInfoList
Log.d("Test", "Current list = $subsInfoList")
for (subscriptionInfo in subsInfoList) {
val number = subscriptionInfo.number
Log.d("Test", " Number is $number")
}
}
Note #1: you must add to the manifest:
uses-permission android:name="android.permission.READ_PHONE_STATE"
Note #2: you should have a permission check on your code, like:
val subsInfoList = if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// ActivityCompat#requestPermissions
return
} else {
//todo return "no permissions"
}

Reptilian Brain
- 1
- 1