首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android双卡手机上,如何检测哪张SIM卡开启了数据?

在Android双卡手机上,如何检测哪张SIM卡开启了数据?
EN

Stack Overflow用户
提问于 2019-08-15 11:41:08
回答 1查看 523关注 0票数 3

我在写一个网络监控应用。我想要检测双卡手机中哪一张SIM卡开启了数据?

我已经为两张SIM卡尝试了TelephonyManager.isDataEnabled()方法。但是该方法返回两个SIMs的enabled。相反,我应该对一张SIM卡启用,而对另一张禁用。

代码语言:javascript
复制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {

    SubscriptionManager subManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    List<SubscriptionInfo> subscriptionInfoList = subManager.getActiveSubscriptionInfoList();

    TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        TelephonyManager mgr = telephonyManager.createForSubscriptionId(subscriptionInfoList.get(0).getSubscriptionId());
            int isDataEnabledSIM1 = mgr.isDataEnabled()?1:0;

            mgr = telephonyManager.createForSubscriptionId(subscriptionInfoList.get(1).getSubscriptionId());
            int isDataEnabledSIM2 = mgr.isDataEnabled()?1:0;

            Log.d(TAG, "isDataEnabledSIM1: "+isDataEnabledSIM1 + ", isDataEnabledSIM2="+isDataEnabledSIM2);
    }
}

isDataEnabledSIM1和isDataEnabledSIM2的返回值均为1,表示在两个SIMs上都启用了数据。这显然是不正确的,我只希望一张SIM卡为1,另一张SIM卡为0。

EN

回答 1

Stack Overflow用户

发布于 2020-07-17 22:35:38

可以在SubscriptionManager中使用getDefaultDataSubscriptionId() (对于N和更高版本),在N下可以使用反射。示例:

代码语言:javascript
复制
public static int getDefaultDataSubscriptionId(Context context) {
    SubscriptionManager subscriptionManager = null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
        subscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        int nDataSubscriptionId = SubscriptionManager.getDefaultDataSubscriptionId();

        if (nDataSubscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            return (nDataSubscriptionId);
        }
    }

    try {
        Class<?> subscriptionClass = Class.forName(subscriptionManager.getClass().getName());
        try {
            Method getDefaultDataSubscriptionId = subscriptionClass.getMethod("getDefaultDataSubId");

            try {
                return ((int) getDefaultDataSubscriptionId.invoke(subscriptionManager));
            } catch (IllegalAccessException e) {
                return ERROR_CODE_EXCEPTION_HANDLED;
            } catch (InvocationTargetException e) {
                return ERROR_CODE_EXCEPTION_HANDLED;
            }
        } catch (NoSuchMethodException e) {
            return ERROR_CODE_NO_SUCH_METHOD;
        }
    } catch (ClassNotFoundException e) {
        return ERROR_CODE_EXCEPTION_HANDLED;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57504598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档