Detect if Android device has Internet connection

后端 未结 15 2469
野性不改
野性不改 2020-11-22 08:54

I need to tell if my device has Internet connection or not. I found many answers like:

private boolean isNetworkAvailable() {
    ConnectivityManager connect         


        
相关标签:
15条回答
  • 2020-11-22 09:29

    try this one

    public class ConnectionDetector {
        private Context _context;
    
        public ConnectionDetector(Context context) {
            this._context = context;
        }
    
        public boolean isConnectingToInternet() {
            if (networkConnectivity()) {
                try {
                    HttpURLConnection urlc = (HttpURLConnection) (new URL(
                            "http://www.google.com").openConnection());
                    urlc.setRequestProperty("User-Agent", "Test");
                    urlc.setRequestProperty("Connection", "close");
                    urlc.setConnectTimeout(3000);
                    urlc.setReadTimeout(4000);
                    urlc.connect();
                    // networkcode2 = urlc.getResponseCode();
                    return (urlc.getResponseCode() == 200);
                } catch (IOException e) {
                    return (false);
                }
            } else
                return false;
    
        }
    
        private boolean networkConnectivity() {
            ConnectivityManager cm = (ConnectivityManager) _context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = cm.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
                return true;
            }
            return false;
        }
    }
    

    you'll have to add the following permission to your manifest file:

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

    Then call like that:

    if((new ConnectionDetector(MyService.this)).isConnectingToInternet()){
        Log.d("internet status","Internet Access");
    }else{
        Log.d("internet status","no Internet Access");
    }
    
    0 讨论(0)
  • 2020-11-22 09:32

    A nice solution to check if the active network have internet connection:

    public boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivityManager != null) {
            Network network = connectivityManager.getActiveNetwork();
            NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(network);
            return networkCapabilities != null && networkCapabilities
                    .hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
        }
        return false;
    }
    
    0 讨论(0)
  • 2020-11-22 09:33

    You can use ConnectivityManager.

    val cm = getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
                val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
                val dialogBuilder = AlertDialog.Builder(this)
    
                if (activeNetwork!=null) // Some network is available
                {
                    if (activeNetwork.isConnected) { // Network is connected to internet
    
        }else{ // Network is NOT connected to internet
    
        }
    

    Check this and this

    0 讨论(0)
  • 2020-11-22 09:35

    If you're targeting Lollipop or higher it's possible to use the new NetworkCapabilities class, i.e:

    public static boolean hasInternetConnection(final Context context) {
        final ConnectivityManager connectivityManager = (ConnectivityManager)context.
                getSystemService(Context.CONNECTIVITY_SERVICE);
    
        final Network network = connectivityManager.getActiveNetwork();
        final NetworkCapabilities capabilities = connectivityManager
                .getNetworkCapabilities(network);
    
        return capabilities != null
                && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
    }
    
    0 讨论(0)
  • 2020-11-22 09:36

    The latest way to do that from the documentation is to use the ConnectivityManager to query the active network and determine if it has Internet connectivity.

    public boolean hasInternetConnectivity() {
        ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        return (activeNetwork != null &&
                          activeNetwork.isConnectedOrConnecting());
    }
    

    Add these two permissions to your AndroidManifest.xml file:

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    
    0 讨论(0)
  • 2020-11-22 09:38
    public boolean isInternetWorking() {
        boolean success = false;
        try {
            URL url = new URL("https://google.com");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(10000);
            connection.connect();
            success = connection.getResponseCode() == 200;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return success;
    }
    

    return true if internet is actually available

    Make sure you have these two permission

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

    if http does not work its because of the new android security they donot allow plain text communication now. for now just to by pass it.

    android:usesCleartextTraffic="true"

    0 讨论(0)
提交回复
热议问题