如何从双SIM卡设备获取两个电话号码



我知道如何获取用户的电话号码,但假设用户的电话是双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"
    }

最新更新