我知道如何获取用户的电话号码,但假设用户的电话是双SIM卡。有没有办法同时获得两个电话号码?目前我只得到有效的电话号码。
如果电话号码确实存储在SIM卡中,则可以使用订阅管理器API(https://developer.android.com/reference/android/telephony/SubscriptionManager.html)获取每个订阅的详细信息,即每个SIM卡的详细信息。
你可以打电话
- getActiveSubscriptionInfoList() 将返回 list。在您的情况下,如果插入了 2 张 SIM 卡,它应该返回 2 个订阅信息
- 在订阅信息中,可以调用 getNumber() API (https://developer.android.com/reference/android/telephony/SubscriptionInfo.html#getNumber()) 来获取数字
请注意,要使其正常工作,SIM卡中应包含电话号码。
请注意,此 API 仅从 API 级别 22 开始受支持
添加示例代码:
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);
}
}
我已经Kotlinized了@manishg代码(从5年前开始):
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")
}
}
注意 #1:您必须添加到清单:
uses-permission android:name="android.permission.READ_PHONE_STATE"
注意#2:您应该对代码进行权限检查,例如:
val subsInfoList = if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// ActivityCompat#requestPermissions
return
} else {
//todo return "no permissions"
}