不论当前使用何种网络,只需要知道手机设置里(或者下滑的快捷图标里)是否已开启了
  数据连接(启用通过移动网络访问数据)我测试的情况 当前使用的是WIFI, 但是无论手机的数据连接是否被勾选
 NetworkInfo 里各个参数都不变啊

解决方案 »

  1.   

    NetworkInfo一般用来判断是否有网络连接,可以分别判断是否有WIFI或者移动网络。你需要的应该是判断是否有移动网络吧,而不是想知道这个选项是打开还是关闭吧?
                    ConnectivityManager con = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE);
                    boolean wifi = con.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
                                    .isConnectedOrConnecting();
                    boolean internet = con.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
                                    .isConnectedOrConnecting();
                    if (wifi | internet) {
                            // 有网
                            flag = "0";
                    } else {
                            // 没网
                            flag = "1";
                    }
      

  2.   

    现在情况是 如果 TYPE_MOBILE 正在被使用,那么这个选项的开启/关闭 是能得到的,
    但如果目前正使用其他网络方式,那么这个选项的开启/关闭变化无法得知其实我不关心当前是何网络方式,但是这个[数据已启用]的选项一定要开(PS:各型号手机此选项名称可能不同,但意思是一样)
      

  3.   


    没有idea,下。private static NetworkInfo getCurrentActiveNetworkInfo(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager != null) return connectivityManager.getActiveNetworkInfo(); return null; } public static int getCurrentNetType(Context context) { int result = NETTYPE_NONE; NetworkInfo localNetworkInfo = getCurrentActiveNetworkInfo(context); if (localNetworkInfo == null) { return result; } if (localNetworkInfo.getState() == NetworkInfo.State.CONNECTED) { if (localNetworkInfo.getType() == 1) { result = NETTYPE_WIFI; } else if (localNetworkInfo.getType() == 0) { String subTypeName = localNetworkInfo.getSubtypeName() .toUpperCase(); if (subTypeName.indexOf("GPRS") > 1) { result = NETTYPE_MOBILE_GPRS; } else if (subTypeName.indexOf("EDGE") > 1) { result = NETTYPE_MOBILE_EDGE; } else { result = NETTYPE_MOBILE_3G; } } else { result = NETTYPE_UNKNOW; } } else if (localNetworkInfo.getState() == NetworkInfo.State.CONNECTING) { result = NETTYPE_UNKNOW; } return result; }
      

  4.   

    android的网络连接WIFI的优先级比 mobile高,所以如果当前网络是WIFI,那么无论是否勾选[启用数据连接],实际上mobile的连接都没有实际开启,所以mobile的网络状态没有变化?
      

  5.   

    ConnectivityManager类中有隐藏的函数可以判断移动数据网络的状态和开启,可以用反射获取
    不过这种API不稳定,没准备什么时候给咔嚓掉了~或者你自己仿照源码自己写一个函数~
      

  6.   

    感谢大家回复按6L的提示
    ConnectivityManager connectivity = (ConnectivityManager) cxt.getSystemService(Context.CONNECTIVITY_SERVICE);
    try {
          Method getMobileDataEnabled =  connectivity.getClass().getMethod("getMobileDataEnabled", null);
          boolean b = (Boolean)getMobileDataEnabled.invoke(connectivity, null);
          Log.i("ConnectivityManager", "getMobileDataEnabled:"+b);
          
          /*
          Method setMobileDataEnabled =  connectivity.getClass().getMethod("setMobileDataEnabled", boolean.class);
          setMobileDataEnabled.invoke(connectivity, true);
        
          
          */
        } catch (Exception e) {
    e.printStackTrace();
    }
    如要调用注释中的代码,别忘记
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    android 2.2测试通过(不保证其他机器能用^_^)
    结贴