首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从sim one或sim2 android检查移动数据是否打开

从sim one或sim2 android检查移动数据是否打开
EN

Stack Overflow用户
提问于 2016-10-03 10:38:02
回答 2查看 1.6K关注 0票数 1

有没有办法通过编程的方式在Android的SIM1或SIM2中检查移动数据是否活动??

此外,我想要获得运营商提供商的数据是活跃的。

Eq :SIM1:载波1 SIM2:载波2

如果SIM2上的数据是活动的,它应该返回运营商2的名称。

EN

回答 2

Stack Overflow用户

发布于 2017-10-16 05:15:14

我的方式(安卓>= 22)

代码语言:javascript
复制
int getDefaultDataSubscriptionId(final SubscriptionManager subscriptionManager)  {
        if (android.os.Build.VERSION.SDK_INT >= 24)  {
            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 e1) {
                    e1.printStackTrace();
                } catch (InvocationTargetException e1) {
                    e1.printStackTrace();
                }
            } catch (NoSuchMethodException e1) {
                e1.printStackTrace();
            }
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }

        return (SubscriptionManager.INVALID_SUBSCRIPTION_ID);
    }

    @TargetApi(22)
    public String getUIText22(final TelephonyManager telephonyManager) {
        SubscriptionManager subscriptionManager = (SubscriptionManager) getContext().getApplicationContext().getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);

        int nDataSubscriptionId = getDefaultDataSubscriptionId(subscriptionManager);

        if (nDataSubscriptionId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            SubscriptionInfo si = subscriptionManager.getActiveSubscriptionInfo(nDataSubscriptionId);

            if (si != null) {
                return (si.getCarrierName().toString());
            }
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2020-06-12 20:37:24

这里是获得用于双sim环境当前活动数据sim运算符的简单解决方案。它在api级别22之后工作。

代码语言:javascript
复制
    public static String getDataSimOperator(Context context) {
        if (context == null) {
            return null;
        }

        TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        if (tm != null) {
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
                    int dataSubId = SubscriptionManager.getDefaultDataSubscriptionId();
                    TelephonyManager dataSimManager = tm.createForSubscriptionId(dataSubId);
                    return dataSimManager.getSimOperator();
                } else {
                    String operator = getDataSimOperatorBeforeN(context);
                    if (operator != null) {
                        return operator;
                    } else {
                        return tm.getSimOperator();
                    }
                }
            } else {
                return tm.getSimOperator();
            }
        }
        return null;
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
    private static String getDataSimOperatorBeforeN(Context context) {
        if (context == null) {
            return null;
        }

        int dataSubId = -1;
        try {
            Method getDefaultDataSubId = SubscriptionManager.class.getDeclaredMethod("getDefaultDataSubId");
            if (getDefaultDataSubId != null) {
                getDefaultDataSubId.setAccessible(true);
                dataSubId = (int) getDefaultDataSubId.invoke(null);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (dataSubId != -1) {
            SubscriptionManager sm = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
            if (sm != null && ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)
                    == PackageManager.PERMISSION_GRANTED) {
                SubscriptionInfo si = sm.getActiveSubscriptionInfo(dataSubId);
                if (si != null) {
                    // format keep the same with android.telephony.TelephonyManager#getSimOperator
                    // MCC + MNC format
                    return String.valueOf(si.getMcc()) + si.getMnc();
                }
            }
        }
        return null;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39823886

复制
相关文章

相似问题

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