繁体   English   中英

查找是否存在活动的互联网连接java android

[英]find if there is an active internet connection java android

我试图找出我的应用程序中是否存在活动的互联网连接。 我需要知道是否可以无错误地访问网络,有时即使我没有Internet连接,也会得到“真实”的响应,这是因为我仍连接到WiFi,但是没有Internet连接。

同时,我的互联网检查功能是:

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

此功能仅检查我是否连接到某个WiFi或移动网络,而没有实际检查我是否可以访问网络。

所以我添加了下一个功能:

public boolean isInternetAvailable() {
    try {
        InetAddress ipAddr = InetAddress.getByName("google.com");
        return !ipAddr.equals("");
    } catch (Exception e) {
        return false;
    }
}

我不知道为什么,但是此功能始终认为我的互联网连接正常,即使我的路由器没有连接(网络栏上有一个黄色小三角形,表示已连接但没有互联网连接)。

如果连接是真/假,我每次尝试调用此函数时都会尝试打印,并且在我连接时为真,拔下路由器后,我会在5-10秒钟内得到假,然后我得到再次正确...(不连接其他WiFi网络)

我试图在ADB模拟器和实际设备上进行测试,但两者都崩溃了,因为即使我处于“离线”状态,我也尝试访问网络。

寻求帮助! 非常感谢你。

代替isConnected()方法

   return activeNetworkInfo != null && activeNetworkInfo.isConnected();

尝试这个

return activeNetwork !=null && activeNetwork.isConnectedOrConnecting();

这是我通常使用的实用程序类:

public class NetworkHelper {

    //method that checks for network status
    public static boolean hasNetworkAccess(Context context){

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

        try {
            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            return activeNetwork !=null && activeNetwork.isConnectedOrConnecting();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

    }

}

确保您具有权限

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

在你的活动中

private boolean networkOk;

然后用它来查看您的连接是否正常

    networkOk = NetworkHelper.hasNetworkAccess(this);
    if (networkOk) {
        Intent intent = new Intent(MainActivity.this, Myservice.class);
        intent.setData(Uri.parse(jsonurl));
        startService(intent);
    }

这对我有用:

public boolean hasNetworkAccess() {
    if (hasActiveInternetConnection()) {
        try {
            HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.screens.company").openConnection());
            urlc.setRequestProperty("User-Agent", "Test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500);
            urlc.connect();
            System.out.println("NETWORK CHECK");
            return (urlc.getResponseCode() == 200);
        } catch (IOException e) {
            Log.e("NETWORK", "Error checking internet connection.");
        }
    } else {
        Log.d("NETWORK", "No network available!");
    }
    return false;
}

public boolean hasActiveInternetConnection() {
    ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
    try {
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        System.out.println("Debug: [Network] Status: " + (activeNetwork != null && activeNetwork.isConnectedOrConnecting()));
        return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
    } catch (Exception e) {
        System.out.println("Debug: [Network] Status: NOT CONNECTED.");
        e.printStackTrace();
        return false;
    }
}

这实际上将检查互联网

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;


public class NetStatus {

    private static NetStatus instance = new NetStatus();
    static Context context;
    ConnectivityManager connectivityManager;
    boolean connected = false;

    public static NetStatus getInstance(Context ctx) {
        context = ctx.getApplicationContext();
        return instance;
    }

    public boolean isOnline() {
        boolean online = false;
        try {
            connectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            connected = networkInfo != null && networkInfo.isAvailable() &&
                    networkInfo.isConnected();
            if (connected) {
                if (isInternetWorking()) online = true;
            }
        } catch (Exception e) {
            System.out.println("CheckConnectivity Exception: " + e.getMessage());
            Log.v("connectivity", e.toString());
        }
        return online;
    }

    public boolean isInternetWorking() {
        boolean success = false;
        try {
            URL url = new URL("http://www.google.com");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("User-Agent", "Android");
            connection.setRequestProperty("Connection", "close");
            connection.setConnectTimeout(1000);
            connection.setReadTimeout(1000);
            connection.connect();
            if (connection.getResponseCode() == 200) success = true;
            connection.disconnect();
        } catch (IOException e) {
            //e.printStackTrace();
        }
        return success;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM