【问题标题】:How to check whether Android "Mobile data" is on如何检查Android“移动数据”是否开启
【发布时间】:2012-09-10 13:35:59
【问题描述】:

我希望我的应用检查“数据网络模式”或“移动数据”是否已启用,即使它当前未启用。换句话说,我需要检查该应用程序是否可能会产生移动数据费用,即使它当前是通过 WiFi 连接的手机。

通过谷歌搜索,我发现以下代码检查“移动数据”是否“活跃”。

ConnectivityManager cm =
        (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE;

此代码的问题在于,如果 WiFi 处于活动状态,则即使将其打开,移动数据也不会报告为活动状态。

是否可以修改代码以确定移动数据是否“启用”并因此可能处于活动状态,而不是与此代码一样是否是当前活动的连接模式?

【问题讨论】:

标签: android connection


【解决方案1】:

试试这个,它在大多数情况下都有效。

ConnectivityManager cm =
                (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        boolean isConnected = activeNetwork != null &&
                activeNetwork.isConnected();

        if (!isConnected)
        {
            return false;
        }

【讨论】:

  • 注意:getNetworkInfo() 自 API 23 起已弃用。
【解决方案2】:

试试这个

   ConnectivityManager cm = (ConnectivityManager) 
            activity.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();
        // if no network is available networkInfo will be null
        // otherwise check if we are connected
        if (networkInfo != null && networkInfo.isConnected()) {
            return true;
        }
        return false;

【讨论】:

  • 感谢您的建议;但是,如果 WiFi 或移动数据连接可用,则此代码返回 true。我正在尝试具体检测是否启用了移动数据(无论是否有 WiFi 连接)。
【解决方案3】:

我不确定这是否适用于所有设备,但它确实适用于我尝试过的一些设备:

private boolean isMobileDataEnabled(Context ctx) {
    int mobileData = Settings.Secure.getInt(ctx.getContentResolver(), "mobile_data", 0);
    return mobileData == 1;
}

即使我有一个活动的 WiFi 连接,它似乎也会返回正确的结果。

【讨论】:

    【解决方案4】:

    请看这段代码:(我在 Play 商店中发布的应用之一的代码)

    private static boolean isAPNEnabled(Context paramContext) {
        try {
            NetworkInfo networkInfo = ((ConnectivityManager) paramContext.getSystemService("connectivity")).getActiveNetworkInfo();
            return networkInfo.isConnected();
        } catch (Exception e) {
            return false;
        }
    }
    

    【讨论】:

    • 感谢您的建议;但是,如果 WiFi 或移动数据连接可用,则此代码返回 true。我正在尝试具体检测是否启用了移动数据(无论是否有 WiFi 连接)。
    猜你喜欢
    • 2014-03-30
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多