这里是简单的版本:
/*@return boolean return true if the application can access the internet*/
public static boolean haveInternet(Context context){
NetworkInfo info = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info==null || !info.isConnected()) {
return false;
}
if (info.isRoaming()) {
// here is the roaming option you can change it if you want to disable internet while roaming, just return false
return true;
}
return true;
}
在这里,您可以使用 wifi 的首选项,您可以指定是否希望某些操作受到设置为仅使用 wifi 的首选项的限制。例如,您可以使用 withRoamingPref = false; 检查小型下载。对任何互联网连接返回 true。然后使用 withRoamingPref = true 检查大型下载,在这种情况下,它将检查用户是否启用了“仅 wifi”来下载它们,如果使用 wifi,则返回 true;如果用户允许移动连接下载,则返回 true,返回 false如果没有互联网连接,或者您使用移动连接并且用户已禁用它以下载大量文件。
public static boolean haveInternet(Context context, boolean withRoamingPref){
NetworkInfo info = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info==null || !info.isConnected()) {
return false;
}
if (info.isRoaming()) {
// here is the roaming option you can change it if you want to disable internet while roaming, just return false
if(withRoamingPref) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
boolean onlyWifi = settings.getBoolean("onlyWifi", false);
if (onlyWifi) {
return false;
}else{
return true;
}
}else{
return true;
}
}
return true;
}
修改案例以返回所有三种状态并决定如何对应用程序的另一部分进行操作:
/*@return int return 0 if the application can't access the internet
return 1 if on mobile data or 2 if using wifi connection*/
public static int haveInternet(Context context){
NetworkInfo info = ((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info==null || !info.isConnected()) {
return 0;
}
if (info.isRoaming()) {
return 1;
}else{
return 2;
}
}
PS:而不是数字,您应该为每个状态分配一个静态 int,然后返回它而不是原始 int。例如,在类的开头声明:
公共静态 int INTERNET_DISABLED = 0;
然后代替“返回0;” 您将使用“返回 INTERNET_DISABLED;”
这样您就不必记住每个数字的含义,您将根据名称检查应用程序的其他部分,如下所示:
if(myClass.haveInternet == myClass.INTERNET_DISABLED){
//TODO show no internet message
}