0

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

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

我已经为 api >=22 编码,例如,

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卡设置为默认值。

但基于双卡设备中可用的运营商 toNumber(发送短信的号码)将被更改。因此,我需要知道用户设置为数字 SmsManager.getDefault() 的设备的默认 sim 卡的运营商名称或 sim 卡号。我怎样才能知道?

4

2 回答 2

0

这就是你应该得到它的方式(链接在这里):

获取与默认订阅 ID 关联的 SmsManager。实例将始终与默认订阅 ID 相关联,即使默认订阅 ID 发生更改。

注意:对于同时支持多个活动订阅的设备,SmsManager 会将用户设置的订阅作为默认短信订阅进行跟踪。如果用户没有设置默认值,SmsManager 可能会启动一个活动来启动订阅消歧对话框。在用户选择将与操作关联的订阅之前,大多数操作都不会完成。如果用户在未选择订阅的情况下取消对话框,则会发生以下情况之一,具体取决于应用程序的目标 SDK 版本。出于兼容性目的,如果目标 SDK 级别 <= 28,电话仍将通过第一个可用订阅发送 SMS。如果目标 SDK 级别 > 28,则操作将无法完成。

注意:如果使用此方法在有多个活动订阅的设备上执行操作,用户没有设置默认的短信订阅,并且该操作是在应用程序不在前台时执行的,短信消歧对话框将不显示。根据调用应用程序的目标 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)
于 2020-02-26T09:38:38.360 回答
0

综上所述,三星 J5 在 Android 23 上实现双 SIM 卡似乎存在错误(导致 SIM 卡设置中的电话号码为空白)。

于 2017-01-06T22:12:31.480 回答