2011-03-29 103 views
28

我想离线执行我的应用程序,所以我需要检查当前是否有互联网连接可用。任何人都可以告诉我如何检查互联网是否可用或不在android?给出示例代码。我试着用下面的代码,并使用仿真器来检验,但它不工作如何检查当前的互联网连接是否可用android

public boolean isInternetConnection() 
{ 

    ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting(); 
} 

感谢

+0

究竟是不是工作 – 2011-03-29 14:30:32

回答

43

这会告诉我们,如果你连接到网络:

boolean connected = false; 
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || 
      connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) { 
     //we are connected to a network 
     connected = true; 
    } 
    else 
     connected = false; 

警告:如果您连接的WiFi网络不包含互联网访问权限,或者需要基于浏览器的身份验证,则connected仍然是正确的。

你需要这个权限在你的清单:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

喜。我在Android 4.0操作系统的应用程序中使用了相同的代码。但它给出了空指针异常。 – 2012-05-11 11:08:46

+0

可能您的android 4.0设备没有type_mobile连接 – arnodenhond 2012-06-10 19:44:54

+0

顺便说一句,您还应该检查connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)!= null,或者您可以在某些平板电脑上获得NullPointer – 2013-02-12 11:55:50

14

而且,要知道,有时用户会连接到Wi-Fi网络,但该网络可能需要基于浏览器的认证。大多数机场和酒店热点就是这样,所以你的应用程序可能会被愚蠢地认为你有连通性,然后任何URL提取实际上将检索热点的登录页面,而不是你正在寻找的页面。

根据执行此检查的重要性,除了检查与ConnectivityManager的连接外,我还会建议添加代码以检查它是否正在工作的Internet连接,而不仅仅是幻觉。您可以通过尝试从您的站点获取已知地址/资源(如1x1 PNG图像或1字节文本文件)来实现此目的。

+2

感谢您的帖子,欢迎来到Stackoverflow。作为参考,你不应该在你的帖子中包含签名。 – 2011-03-29 15:26:50

+0

hehehe ... pwned – binnyb 2011-03-30 13:12:35

7

使用下面的代码:

private boolean isNetworkAvailable() { 
ConnectivityManager connectivityManager 
     = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 

}

如果isNetworkAvailable()回报true那么互联网连接可用,不可用

这里需要补充以下使用说明 - 否则互联网连接在您的应用程序中允许清单文件

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
1

使用下面的代码:

public static boolean isNetworkAvaliable(Context ctx) { 
    ConnectivityManager connectivityManager = (ConnectivityManager) ctx 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    if ((connectivityManager 
      .getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connectivityManager 
      .getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED) 
      || (connectivityManager 
        .getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && connectivityManager 
        .getNetworkInfo(ConnectivityManager.TYPE_WIFI) 
        .getState() == NetworkInfo.State.CONNECTED)) { 
     return true; 
    } else { 
     return false; 
    } 
} 

记得哟需要把你的清单中的下一行:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
2

你可以只尝试建立一个TCP连接到远程主机:

public boolean hostAvailable(String host, int port) { 
    try (Socket socket = new Socket()) { 
    socket.connect(new InetSocketAddress(host, port), 2000); 
    return true; 
    } catch (IOException e) { 
    // Either we have a timeout or unreachable host or failed DNS lookup 
    System.out.println(e); 
    return false; 
    } 
} 

然后:

boolean online = hostAvailable("www.google.com", 80); 
+0

此方法需要API级别19 – 2018-02-26 08:51:26

0

尝试使用ConnectivityManager

ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivity != null) { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
       } 
      } 
     } 
    } 
return false 

还允许添加到AndroidManifest.xml中

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
0

使用方法checkConnectivity:

if (checkConnectivity() == 1){ 
    //do something 

    } 

方法来检查您的连接:

private int checkConnectivity() { 
     boolean enabled = true; 

     ConnectivityManager connectivityManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo info = connectivityManager.getActiveNetworkInfo(); 

     if ((info == null || !info.isConnected() || !info.isAvailable())) { 
      internet = 0;//sin conexion 
      Toast.makeText(getApplicationContext(), "Sin conexión a Internet...", Toast.LENGTH_SHORT).show(); 
      enabled = false; 
     } else { 
      internet = 1;//conexión 
     } 

     return internet; 
    } 
0
package com.base64; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Base64; 
import android.widget.ImageView; 
import android.widget.Toast; 

import com.androidquery.AQuery; 

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if(isConnectingToInternet(MainActivity.this)) 
     { 
      Toast.makeText(getApplicationContext(),"internet is available",Toast.LENGTH_LONG).show(); 
     } 
     else { 
      System.out.print("internet is not available"); 
     } 
    } 

    public static boolean isConnectingToInternet(Context context) 
    { 
     ConnectivityManager connectivity = 
       (ConnectivityManager) context.getSystemService(
         Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
       for (int i = 0; i < info.length; i++) 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
        { 
         return true; 
        } 
     } 
     return false; 
    } 
} 

/* manifest */ 

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.base64"> 

    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest>