Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过编程检查android中哪个sim卡被设置为默认sim卡_Java_Android_Reflection - Fatal编程技术网

Java 如何通过编程检查android中哪个sim卡被设置为默认sim卡

Java 如何通过编程检查android中哪个sim卡被设置为默认sim卡,java,android,reflection,Java,Android,Reflection,我正在尝试检查我的移动设备是否为双sim卡,sim1是否已就绪,sim2是否已就绪,我已使用java反射完成此操作,现在我想了解sim1是否正在移动,sim2是否正在移动,以及其双sim卡中哪个sim卡设置为默认。在java反射的帮助下,这是可能的 您可以这样做: public int getDefaultSimmm(Context context) { Object tm = context.getSystemService(Context.TELEPHONY_SERVICE);

我正在尝试检查我的移动设备是否为双sim卡,sim1是否已就绪,sim2是否已就绪,我已使用java反射完成此操作,现在我想了解sim1是否正在移动,sim2是否正在移动,以及其双sim卡中哪个sim卡设置为默认。在java反射的帮助下,这是可能的

您可以这样做:

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;
    }
从API 22(棒棒糖MR1)开始,android正式添加了
SubscriptionManager
类,该类提供开发者所需的与sim卡和相关服务相关的所有信息

然而,API 24中增加了对检索呼叫、SMS和移动数据的默认值的支持。 如果将SDK的最低版本设置为24,则可以使用
GetDefaultSMSSSubscriptionId()
方法获取用户设置的SMS默认值

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

注意:上述通话需要
READ\u PHONE\u STATE
权限。确保将其添加到清单文件中

也许有人能告诉我如何使用getDefaultSim()方法。我正在尝试使用它,但它返回null.TelephonyManager﹕ getDefaultSim是sim1。这出现在我的LogCat文件中,我可以从LogCat文件中通过编程读取它吗。非常感谢。这很有帮助。并且对我有效。如果我为拨打电话选择了默认SIM卡/选择了第二张SIM卡,则始终获得0。