How to Check Internet Access on Android Effectively

How to Check Internet Access on Android Effectively

22 May 2024 Stephan Petzl Leave a comment Tech-Help

Ensuring your Android app has internet access is a crucial step in providing a seamless user experience. This article will guide you through the most reliable methods to check for internet connectivity and handle scenarios where network access might not be available.

Common Methods to Check Internet Access

1. Using ConnectivityManager

The ConnectivityManager class is a standard approach to check whether there is an available network connection. Here’s a simple method:

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

Additionally, ensure you add the following permission to your AndroidManifest.xml:

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

This method checks for any network connection but does not guarantee that the connection has internet access.

2. Checking Internet Access by Pinging a Server

To ensure that the network connection actually has internet access, you can ping a reliable server, such as Google’s DNS server:

public boolean isOnline() {
    Runtime runtime = Runtime.getRuntime();
    try {
        Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int exitValue = ipProcess.waitFor();
        return (exitValue == 0);
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
    }
    return false;
}

This method is simple and effective, but it may not work on all devices and can block the UI thread, so it should be run in a separate thread.

3. Connecting to a Socket

Another reliable method is to connect to a known server using a socket. This method is fast and works across all devices:

public boolean isOnline() {
    try {
        int timeoutMs = 1500;
        Socket sock = new Socket();
        SocketAddress sockaddr = new InetSocketAddress("8.8.8.8", 53);
        sock.connect(sockaddr, timeoutMs);
        sock.close();
        return true;
    } catch (IOException e) {
        return false;
    }
}

This approach ensures that you have a valid internet connection, but it should be run in a separate task to avoid blocking the main UI thread.

Best Practices for Checking Internet Connectivity

When implementing internet connectivity checks in your app, consider the following best practices:

  • Always run network checks in a separate thread or use asynchronous tasks to avoid blocking the UI.
  • Handle scenarios where the network is available but internet access is not, such as captive portals.
  • Provide user feedback when there is no internet access and suggest possible actions to resolve the issue.

Enhancing Your Testing with Repeato

Testing internet connectivity and handling network-related scenarios can be challenging, especially in mobile app development. Our product, Repeato, a no-code test automation tool for iOS and Android, can significantly simplify this process.

Repeato allows you to create, run, and maintain automated tests for your apps quickly and efficiently. It leverages computer vision and AI to ensure your tests are robust and reliable. With Repeato, mobile developers can focus on creating great products while automating the testing process, which can be easily managed by non-technical colleagues or QAs.

For more information on how Repeato can enhance your testing process, visit our documentation or explore our pricing options.

Like this article? there’s more where that came from!