以编程方式发送短信我正在使用,
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()。我怎么知道它?
答案 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)