如何以编程方式获取默认的SIM卡号android

时间:2017-01-06 19:54:28

标签: android dual-sim

以编程方式发送短信我正在使用,

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(toNumber, null, text, PendingIntent.getBroadcast(
        this, 0, new Intent(SMS_SENT_ACTION), 0), null);

我编写了api> = 22 like,

SubscriptionManager subscriptionManager=(SubscriptionManager)getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);

        List<SubscriptionInfo> subscriptionInfoList=subscriptionManager.getActiveSubscriptionInfoList();

        if(subscriptionInfoList!=null && subscriptionInfoList.size()>0){
           for(SubscriptionInfo info:subscriptionInfoList){

               String mobileNo=info.getNumber();

           }

        }

使用订阅管理器我没有使用info.getNumber();获取sim 2卡号。它为三星j5设备返回空。

  

另一个重要的事情是,使用SubscriptionManager我正确地得到第1行的数字,但第2行是空的。但是在我尝试使用SmsManager.getDefault()发送短信的同时,它从第2行发送短信。设备线2 SIM卡设置为默认值。

但是基于双SIM卡设备中可用的运营商toNumber(发送短信的数量)将会改变。因此,我需要知道用户设置的设备的默认sim的操作员名称或sim卡号,以及号码SmsManager.getDefault()。我怎么知道它?

2 个答案:

答案 0 :(得分:0)

为了总结一切,似乎Android 23上双SIM卡的三星J5实施中可能存在错误(导致SIM卡设置中出现空白电话号码)。

答案 1 :(得分:0)

这是您应该如何获得的(链接here):

获取与默认订阅ID关联的SmsManager。的 实例将始终与默认订阅ID关联, 即使默认订阅ID发生了变化。

注意:对于支持多个有效订阅的设备, 时间,SmsManager将跟踪用户设置的订阅 默认的短信订阅。如果用户尚未设置默认值, SmsManager可能会启动一项活动以启动订阅 消歧对话框。大部分操作要等到 用户选择了将与 操作。如果用户取消对话框而未选择 订阅,将发生以下情况之一,具体取决于 应用程序的目标SDK版本。出于兼容性目的,如果 目标SDK级别为<= 28,电话仍将通过 第一个可用订阅。如果目标SDK级别> 28,则 操作将无法完成。

注意:如果使用此方法在以下设备上执行操作: 有多个活动订阅,用户尚未设置默认短信 订阅,并且在执行操作时 应用程序不在前台,SMS消歧对话框 将不会显示。运算结果将得出结论,好像 用户取消了消歧对话框,操作将完成 如上所述,具体取决于调用的目标SDK版本 应用。如果使用getSmsManagerForSubscriptionId(int),则更安全 应用程序将在后台执行操作 因为这会导致不可预测的结果,例如操作 通过错误的订阅发送或完全失败, 取决于用户的默认SMS订阅设置。

因此,代码将是:

    val subscriptionManager = applicationContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
    val defaultSubscriptionId = SmsManager.getDefaultSmsSubscriptionId()
    val smsManager = SmsManager.getSmsManagerForSubscriptionId(defaultSubscriptionId)?:SmsManager.getDefault()
    var defaultSubscriptionInfo: SubscriptionInfo? = subscriptionManager.getActiveSubscriptionInfo(defaultSubscriptionId)