如何检查Android“移动数据”是否已启用

时间:2012-09-10 13:35:59

标签: android connection

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

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

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

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

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

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

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

试试这个,它适用于大多数情况。

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

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

        if (!isConnected)
        {
            return false;
        }

答案 2 :(得分:0)

请查看此代码:(我在Play商店发布的应用程序的代码)

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

答案 3 :(得分:0)

我不确定它是否可以在所有设备上运行,但它确实适用于我试过的一些设备:

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

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