在 Android/Java 代码中检查互联网连接

问题描述 投票:0回答:3

我一直在使用以下代码(从网络获取)来检查我的 Android(网络)应用程序中的互联网连接。

import android.content.Context;
import android.net.ConnectivityManager;

public class DetectConnection {
    public static boolean checkInternetConnection(Context context) {

        ConnectivityManager con_manager = (ConnectivityManager)
                context.getSystemService(Context.CONNECTIVITY_SERVICE);

        return (con_manager.getActiveNetworkInfo() != null
                && con_manager.getActiveNetworkInfo().isAvailable()
                && con_manager.getActiveNetworkInfo().isConnected());
    }
}

Android studio 现在向我发出有关使用

getActiveNetworkInfo()
的弃用警告。在互联网上简单搜索一下,我应该使用[1]中的API。然而我不知道该怎么做。有什么想法吗?

[1] https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback

android android-connectivitymanager
3个回答
0
投票
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;

public class NetworkCheck {
    private boolean connected = false;

    public NetworkCheck(Context context) {
        try {
            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

            connectivityManager.registerDefaultNetworkCallback(
                new ConnectivityManager.NetworkCallback() {
                    @Override
                    public void onAvailable(Network network) {
                        connected = true;
                    }

                    @Override
                    public void onLost(Network network) {
                        connected = false;
                    }
                }

            );
        } catch (Exception e) {
            connected = false;
        }
    }

    public boolean isConnected() {
        return connected;
    }
}

你可以检查这样的事情


0
投票

试试这个!

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) {
        
        connected = true;
    }
    else
        connected = false;

您的清单中需要此权限:

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

0
投票

我使用的代码没有给出连接互联网的结果,但即使网络不提供互联网连接,连接到网络也会返回true。

public class InternetCkecker 
          {
               public boolean isConnected() {
                   try {
                            Process process = Runtime.getRuntime().exec("ping 
 -c 1 google.com");
                           int returnVal = process.waitFor();
                           return (returnVal == 0);
                       } catch (Exception e) {
                              return false;
                      }
              }
         }

仅当您实际连接到互联网时,此函数才会返回true

© www.soinside.com 2019 - 2024. All rights reserved.