2012-01-13 37 views
1

好吧,我用这个代码:检查设备是否具有连接到inernet不起作用的Android代码

public boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 

    } 

,但它始终返回true。谁能告诉我为什么?此外,此功能检查设备是否使用wifi或3G连接,或只检查其中一个?

回答

1

试试这个方法,对我的作品

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    if (activeNetworkInfo != null) 
     return activeNetworkInfo.isConnected(); 
    return false; 
} 
+0

为什么不添加'if(activeNetworkInfo!= null)return activeNetworkInfo.isConnected()'? – tidbeck 2012-01-13 00:42:02

+0

@tidbeck谢谢,我更新了我的答案 – 2012-01-13 00:45:25

0

使用此代码,并检查您的权限。有时可能会导致问题。格式化抱歉。

public final boolean isInternetOn() { 
ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
// ARE WE CONNECTED TO THE NET 
if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || 
connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTING || 
connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING || 
connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) { 
// MESSAGE TO SCREEN FOR TESTING (IF REQ) 
//Toast.makeText(this, connectionType + ” connected”, Toast.LENGTH_SHORT).show(); 
return true; 
} else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) { 
//System.out.println(“Not Connected”); 
return false; 
} 
return false; 
} 

以下代码演示了如何调用上述方法;

if(isInternetOn()) { 
// INTERNET IS AVAILABLE, DO STUFF.. 
return true; 
}else{ 
// NO INTERNET AVAILABLE, DO STUFF.. 
return false; 
} 
+0

它似乎没有工作。我已经在清单中添加了以下行: ghostrider 2012-01-13 00:42:38

+0

是的,只需断开你的电脑从互联网上。只要电脑有互联网接入,模拟器可能会有互联网接入也..从过去的经验,这已是这种情况 – 2012-01-13 00:46:23

+0

我编辑我的答案。尝试这个。 – AAV 2012-01-13 00:51:15

0

我用这个,它让我检查特定的连接(3G或WiFi)(某处发现SO却失去了参考,抱歉)

public boolean isConnected() { 
    boolean connectedWifi = false; 
    boolean connectedMobile = false; 

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo[] networks = cm.getAllNetworkInfo(); 
    for (NetworkInfo ni : networks) { 
     if ("WIFI".equalsIgnoreCase(ni.getTypeName())) 
      if (ni.isConnected()) 
       connectedWifi = true; 
     if ("MOBILE".equalsIgnoreCase(ni.getTypeName())) 
      if (ni.isConnected()) 
       connectedMobile = true; 
    } 
    return connectedWifi || connectedMobile; 
} 
-1

下面的代码工作对我来说

public static boolean haveNetworkConnection(Activity activity) { 
     int airplane_mode_on = Settings.System.getInt(activity 
       .getApplicationContext().getContentResolver(), 
       Settings.System.AIRPLANE_MODE_ON, 0); 
     if (airplane_mode_on == 1) { 
      return false; 
     } else { 
      return checkInternetConnection(activity); 
     } 
    } 

    private static boolean checkInternetConnection(Context context) { 
     ConnectivityManager conMgr = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (conMgr.getActiveNetworkInfo() != null 
       && conMgr.getActiveNetworkInfo().isAvailable() 
       && conMgr.getActiveNetworkInfo().isConnected()) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
+0

当您打开飞行模式时,您可以启用WiFi。 – Avamander 2016-11-12 14:24:28

0

那么如果你想知道你的android设备是否连接到任何网络,那么你可以按照其他人告诉你的方法。

但是,如果你想知道互联网工作与否,那么在Android中没有API来检查它。要知道互联网是否工作的唯一方法是检查我的http请求到任何网址。

+0

我在我的应用程序中从数据库检索数据。所以我想,如果没有互联网而不是尝试接收数据,请在error.xml中设置视图,该视图将显示一条消息。 – ghostrider 2012-01-13 12:44:20

+0

然后,你可以按照这种方法,使任何两个URL的http请求可能是google.com和facebook.com,如果这两个http请求不返回200响应,那么你应该知道,网络不工作 – 2012-02-11 12:27:45

相关问题