Dual Sim Android

时间:2011-11-05 06:25:34

标签: android sim-card

有没有办法可以在我的android中访问其他SIM卡?我有一个Android樱桃移动轨道,这是一个双卡通Android手机。我想为我的手机开发一个短信应用程序,但只有第一个SIM卡可以访问。我想访问另一个SIM卡,这样当我按Enter键发送消息时,会出现一个提示,即消息将被发送。 我知道它是有效的,但手机制造商对此没有任何反馈。还有其他方法吗?调整什么的?

4 个答案:

答案 0 :(得分:3)

我认为您可以使用dex2jar或apktool来反转在双SIM卡设备上运行的应用程序,一旦找到相关的“服务管理器”,“电话管理器”,某些接口存根或某些关键字,如“Gemini”然后你可以使用Java Reflection,反映这个类的所有方法。然后你就可以实现这个目标。

答案 1 :(得分:0)

现在正式没有支持此功能的API,您必须联系设备制造商。

答案 2 :(得分:0)

假设您正在为自己的手机开发应用,并且您愿意找到分配给每张SIM卡的ID(sim_id)(可能是通过查看手机&#) 39; s日志输出,搜索sim_id,这就是我所做的),您可以使用以下代码设置短信发送的默认SIM卡:

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

结合其他一些UI提示功能(实际上是选择&#39;首选SIM卡),这应该可以解决问题。

我完全不确定这种方法是否对您有用(尽管代码看起来很标准&#39;);我在我的Mlais MX28(带有自定义ROM)上试用了它。但我想,它仍然值得一试。 :)

<强>更新 奇怪的是,在我正在处理的应用程序的一些更新后,解决方案意外停止工作。但我遇到了另一种方式(似乎更有希望)。 (我相信这也可以扩展到其他SIM选择方案,因为设置缓存包含name s gprs_connection_sim_settingvoice_call_sim_settingvideo_call_sim_setting等条目。)

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);

(不幸的是,这需要android.permission.WRITE_SETTINGS权限。)

答案 3 :(得分:0)

此方法可用于从2张SIM卡中选择一张!

//above Android API 22
if (Build.VERSION.SDK_INT > 22) {
    //for dual sim mobile
    SubscriptionManager localSubscriptionManager = SubscriptionManager.from(this);

    if (localSubscriptionManager.getActiveSubscriptionInfoCount() > 1) {
     //if there are two sims in dual sim mobile
        List localList = localSubscriptionManager.getActiveSubscriptionInfoList();
        SubscriptionInfo simInfo = (SubscriptionInfo) localList.get(0);
        SubscriptionInfo simInfo1 = (SubscriptionInfo) localList.get(1);

        final String sim1 = simInfo.getDisplayName().toString();
        final String sim2 = simInfo1.getDisplayName().toString();

    }else{
     //if there is 1 sim in dual sim mobile
        TelephonyManager tManager = (TelephonyManager) getBaseContext()
                .getSystemService(Context.TELEPHONY_SERVICE);

        String sim1 = tManager.getNetworkOperatorName();

    }

}else{
    //below android API 22
            TelephonyManager tManager = (TelephonyManager) getBaseContext()
                    .getSystemService(Context.TELEPHONY_SERVICE);

            String sim1 = tManager.getNetworkOperatorName();
}

然后,您可以使用以下方法发送短信

    public static boolean sendSMS(Context context, String smsText) {
    SmsManager smsMan = SmsManager.getDefault();

    SharedPreferences prefs = context.getSharedPreferences("uinfo", MODE_PRIVATE);
    String sim = prefs.getString("sim", "No name defined");
    String simName = prefs.getString("simName", "No name defined");
    String toNum = "";

    try {

        if (Build.VERSION.SDK_INT > 22) {

            SubscriptionManager localSubscriptionManager = SubscriptionManager.from(context);
            if (localSubscriptionManager.getActiveSubscriptionInfoCount() > 1) {

                int simID  = Integer.parseInt(sim);

                List localList = localSubscriptionManager.getActiveSubscriptionInfoList();
                SubscriptionInfo simInfo = (SubscriptionInfo) localList.get(simID);
                ArrayList<String> parts = smsMan.divideMessage(smsText);
                SmsManager.getSmsManagerForSubscriptionId(simInfo.getSubscriptionId()).sendMultipartTextMessage(toNum, null, parts, null, null);
            }else{
                ArrayList<String> parts = smsMan.divideMessage(smsText);
                smsMan.sendMultipartTextMessage(toNum, null, parts, null, null);
            }
            return true;
        }else{
            ArrayList<String> parts = smsMan.divideMessage(smsText);
            smsMan.sendMultipartTextMessage(toNum, null, parts, null, null);
        }
    } catch (Exception e) {

    }
    return false;
}