2014-04-15 90 views
0

我想通过SmsManager发送短信的工作,但在第一SIM我在这种情况下,没有平衡短信失败。所以如何仅通过第二个SIM卡从我的应用程序发送短信。 其他应用程序,如whatsApp在注册时从我的第二个SIM卡发送味精,如果不是在第一个sim.so平衡可用。我认为它可能。请帮我发送短信双卡Android手机通过SmsManager

String mobileNo = phoneNumber1.getText().toString(); 

    try { 
    SmsManager smsManager = SmsManager.getDefault(); 
    smsManager.sendTextMessage(mobileNo, null, "BAL", null, null); 
    Toast.makeText(getApplicationContext(), "SMS Sent!", 
       Toast.LENGTH_LONG).show(); 
    } catch (Exception e) { 
    Toast.makeText(getApplicationContext(), 
     "SMS faild, please try again later!", 
     Toast.LENGTH_LONG).show(); 
    e.printStackTrace(); 
    } 
+0

看到http://stackoverflow.com/questions/5255147 0 SIM1和1/dual-sim-card-android –

+0

@shayanpourvatan谢谢你,但它不是我的答案。因为whatsApp在注册时发送msg在我的第二个sim,所以我认为它可能。请帮我 – Ranu

+0

我不认为WhatsApp发送短信,它只收到一个。 – hitmaneidos

回答

0

分析Mlais MX28电话的记录(用定制ROM)后,我发现下面的技巧来切换SIM卡的短信发送。不幸的是,它似乎在全球范围内为所有应用程序切换SIM卡(我无法找到一种“保存并恢复”主流设置的方法)。另外,您可能需要经历找出分配给每个SIM卡的ID(sim_id)的麻烦(可能是通过检查手机的日志输出;我找不到编程方式来执行此操作)。

int simId = <place desired SIM ID here>; 
Intent simIntent = new Intent("android.intent.action.SMS_DEFAULT_SIM"); 
simIntent.putExtra("simid", simId); 
sendBroadcast(simIntent); 

我不确定这是否适合您(尽管代码似乎与制造商无关);但我认为这仍然值得一试。

更新:

奇怪的是,以前的办法停止了一些尝试后,开始工作。但是,经过一些更多的日志分析后,我发现了另一种使用直接设置操作的方法(不幸的是,它需要android.permission.WRITE_SETTINGS权限)。

ContentValues val = new ContentValues(); 
val.put("value", "here goes the preferred SIM ID"); 
getContentResolver().update(Uri.parse("content://settings/system"), val, "name='sms_sim_setting'", null); 

我相信它是适用于其他多SIM-关注操作为好,因为我的设备上的设置数据库包含像gprs_connection_sim_settingvideo_call_sim_setting设置,voice_call_sim_setting,条目等

0

我看着SubscriptionManager类,并找到一个方法getActiveSubscriptionInfoForSimSlotIndex(simIndex)来获取subscriptionInfo for perticular sim slot使用这个subscriptionInfo我们可以得到perticular simSlot的subscriptionId。使用subscriptionID我们可以得到SMSManager为所需simSlot

这为我工作:

public void sendSMS(final String number,final String text){ 
    final PendingIntent localPendingIntent1 = 
    PendingIntent.getBroadcast(mContext, 0, new Intent(this.SENT), 0); 
    final PendingIntent localPendingIntent2 = 
    PendingIntent.getBroadcast(mContext, 0, new Intent(this.DELIVERED), 0); 

if (Build.VERSION.SDK_INT >= 22) 
{ 

    SubscriptionManager subscriptionManager=((Activity)mContext).getSystemService(SubscriptionManager.class); 
    SubscriptionInfo subscriptionInfo=subscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(simIndex); 
    SmsManager.getSmsManagerForSubscriptionId(subscriptionInfo.getSubscriptionId()).sendTextMessage(number, null, text, localPendingIntent1, localPendingIntent2); 
} 
SmsManager.getSmsManagerForSubscriptionId(subscriptionInfo.getSubscriptionId()).sendTextMessage(number, null, text, localPendingIntent1, localPendingIntent2); 
} 

哪里simIndex是SIM2

相关问题