如何在android中以编程方式检查哪个sim设置为默认sim

时间:2015-08-19 07:21:34

标签: java android reflection

我正在尝试检查我的移动设备是否为双卡,如果sim1准备就绪,如果sim2准备就绪,我使用java反射完成了这个,现在我想知道sim1是否正在发光,如果是sim2正在发光,如果它的双SIM卡的SIM设置为默认值。是否可以借助java反射。

2 个答案:

答案 0 :(得分:6)

您可以这样做:

public int  getDefaultSimmm(Context context) {

    Object tm = context.getSystemService(Context.TELEPHONY_SERVICE);
    Method method_getDefaultSim;
    int defaultSimm = -1;
    try {
        method_getDefaultSim = tm.getClass().getDeclaredMethod("getDefaultSim");
        method_getDefaultSim.setAccessible(true);
        defaultSimm = (Integer) method_getDefaultSim.invoke(tm);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Method method_getSmsDefaultSim;
    int smsDefaultSim = -1;
    try {
        method_getSmsDefaultSim = tm.getClass().getDeclaredMethod("getSmsDefaultSim");
        smsDefaultSim = (Integer) method_getSmsDefaultSim.invoke(tm);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return smsDefaultSim;
    }

答案 1 :(得分:1)

从API 22(Lollipop MR1)开始,android正式添加了SubscriptionManager类,它提供了开发人员所需的有关SIM卡和相关服务的所有信息。

Documentation for SubscriptionManager

然而,在API 24中添加了对检索默认呼叫,SMS和移动数据的支持。 如果您使用的最小SDK版本为24,则可以使用getDefaultSmsSubscriptionId()方法获取用户设置的短信

SubscriptionManager manager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
int defaultSmsId = manager.getDefaultSmsSubscriptionId();
SubscriptionInfo info = manager.getActiveSubscriptionInfo(defaultSmsId);

注意:上面提到的电话需要READ_PHONE_STATE权限。确保将其添加到清单文件中