3

我正在使用以下代码来识别手机是否连接到互联网。

public static boolean isOnline(Context context) {  
    try {
        ConnectivityManager cm = (ConnectivityManager) 
        context.getSystemService(Context.CONNECTIVITY_SERVICE);  
        return cm.getActiveNetworkInfo().isConnectedOrConnecting();
    } catch(Exception e) {
        return false;
    }
}

通过此检查,当手机连接家庭 wifi 但请注意没有互联网连接时,此方法仍然返回 true。这导致我的应用程序崩溃,因为当它尝试假设互联网存在的代码时,我可以进行进一步的异常处理以防止崩溃,但我需要一种更好的方法来检查可以返回实际互联网连接状态的互联网连接......

4

4 回答 4

0

用这个 :

public  boolean isConnected() {
        boolean conectado;
        if (conectivtyManager.getActiveNetworkInfo() != null
                && conectivtyManager.getActiveNetworkInfo().isAvailable()
                && conectivtyManager.getActiveNetworkInfo().isConnected()) {
            conectado = true;
        } else {
            conectado = false;
        }
        return conectado;
    }

放置此权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
于 2013-02-21T19:12:33.127 回答
0

我总是使用:

public static boolean isOnline(Context ctx) {

    NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx.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 false;
    }
    return true;
}

如果设备正在漫游,则需要额外检查,当 时true,它表明在此网络上使用数据可能会产生额外费用。

不要忘记在<application>标签之外为您的清单添加正确的权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2013-02-21T19:17:41.467 回答
0

这对我有用:

public boolean networkCheckIn(){
try{

ConnectivityManager networkInfo = (ConnectivityManager) getSystemService(MapViewActivity.CONNECTIVITY_SERVICE) ;
networkInfo.getActiveNetworkInfo().isConnectedOrConnecting() ;

Log.d("1", "Net avail:"
                + networkInfo.getActiveNetworkInfo().isConnectedOrConnecting());

ConnectivityManager cm = (ConnectivityManager) getSystemService(MapViewActivity.CONNECTIVITY_SERVICE);
 NetworkInfo netInfo = cm.getActiveNetworkInfo();
 if (netInfo != null && netInfo.isConnectedOrConnecting()) {
    //Log.d("2", "Network available:true");
     return true;

  } else {
            //Log.d("3", "Network available:false");
            return false;
   }

}catch(Exception e){
        return false ;
}
}
于 2013-02-21T19:18:07.593 回答
0

你的问题是方法getActiveNetworkInfo()

例如,获取 Wi-Fi 的网络状态:

public static boolean isWifiAvailable(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm == null)
        return false;

    NetworkInfo[] networkInfos = cm.getAllNetworkInfo();
    for (NetworkInfo ni : networkInfos) {
        if (ni.getType() == ConnectivityManager.TYPE_WIFI && ni.isConnected())
            return true;
    }
    return false;
}// isWifiAvailable()

有更多类型ConnectivityManager(它们以 开头TYPE_*)。

于 2013-02-21T20:20:23.017 回答