劳驾如何判断手机数据连接已启用? 不论当前使用何种网络,只需要知道手机设置里(或者下滑的快捷图标里)是否已开启了 数据连接(启用通过移动网络访问数据)我测试的情况 当前使用的是WIFI, 但是无论手机的数据连接是否被勾选 NetworkInfo 里各个参数都不变啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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"; } 现在情况是 如果 TYPE_MOBILE 正在被使用,那么这个选项的开启/关闭 是能得到的,但如果目前正使用其他网络方式,那么这个选项的开启/关闭变化无法得知其实我不关心当前是何网络方式,但是这个[数据已启用]的选项一定要开(PS:各型号手机此选项名称可能不同,但意思是一样) 没有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; } android的网络连接WIFI的优先级比 mobile高,所以如果当前网络是WIFI,那么无论是否勾选[启用数据连接],实际上mobile的连接都没有实际开启,所以mobile的网络状态没有变化? ConnectivityManager类中有隐藏的函数可以判断移动数据网络的状态和开启,可以用反射获取不过这种API不稳定,没准备什么时候给咔嚓掉了~或者你自己仿照源码自己写一个函数~ 感谢大家回复按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测试通过(不保证其他机器能用^_^)结贴 如何实现一个计时器 Sqllite的问题 那位大侠帮我看看谢谢了 学android开发需要购买硬件吗?比如买个平板电脑? 瓦片地图的拼接和拖拽怎么实现? 谁给个完整的Android图片管理器例子 身边没有美工的个人android开发者如何生存? Android adb 过一会就会卡死是什么原因 如何实现一种从中间向两边的布局 关于安卓httpURLConnection android studio UBUNTU编译XBMC for android编译不过 Android源码的Java部分能否分散到多个机器编译?
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";
}
但如果目前正使用其他网络方式,那么这个选项的开启/关闭变化无法得知其实我不关心当前是何网络方式,但是这个[数据已启用]的选项一定要开(PS:各型号手机此选项名称可能不同,但意思是一样)
没有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; }
不过这种API不稳定,没准备什么时候给咔嚓掉了~或者你自己仿照源码自己写一个函数~
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测试通过(不保证其他机器能用^_^)
结贴