【问题标题】:Android Check if there is WiFi but no internetAndroid 检查是否有 WiFi 但没有互联网
【发布时间】:2015-01-16 16:10:26
【问题描述】:

我正在编写一个程序,我需要检查三个状态:1. 如果我没有 WiFi,2. 如果我有 WiFi 但没有互联网连接(比如我打开路由器但拔下以太网电缆),以及3. 如果我有 WiFi 和互联网连接。然后我会在我的应用程序中更改图标的颜色以表示其中一种状态(红色、黄色或绿色)。目前条件2不起作用,每当我拔下路由器上的电缆进行测试时,图标颜色都会从绿色变为红色。

public static void doPing(Context context) {

        String googleUrl = "https://www.google.com";
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        try {
            HttpParams httpParameters = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT_CONNECTION);

            HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT_SOCKET);

            HttpClient client = new DefaultHttpClient(httpParameters);
            if (L) Log.i(TAG, "Calling: " + url );
            HttpGet getGoogle = getHttpGet(googleUrl);
            HttpResponse responseGoogle = client.execute(getGoogle);

            if (responseGoogle != null){
                 connectionIconView.setIcon(R.drawable.green_wifi);
            }
            else if (cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null){
                connectionIconView.setIcon(R.drawable.yellow_wifi);
            }
            else {
                 connectionIconView.setIcon(R.drawable.red_wifi);
            }

        } catch(Exception e) {
            if (L) Log.e(TAG, "Error during HTTP call");
            e.printStackTrace();
        }

【问题讨论】:

    标签: android connection wifi


    【解决方案1】:

    像这样检查wifi是否可用

    功能1

    private boolean isWifiAvailable() {
        ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    
        return wifi.isConnected();
    }
    

    在此之后,如果互联网可用,请像这样检查

    功能2

     public static boolean isInternetAccessible(Context context) {
     if (isWifiAvailable()) {
        try {
            HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
            urlc.setRequestProperty("User-Agent", "Test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500); 
            urlc.connect();
            return (urlc.getResponseCode() == 200);
        } catch (IOException e) {
            Log.e(LOG_TAG, "Couldn't check internet connection", e);
        }
    } else {
        Log.d(LOG_TAG, "Internet not available!");
    }
    return false;
    }
    

    条件

    1. 如果 function 1 返回 false --> 将颜色更改为红色
    2. 如果 function 1 返回 true 并且 function 2 返回 false --> 将颜色更改为黄色
    3. 如果两个函数都返回 true --> 将颜色更改为绿色

    【讨论】:

    • 我猜你的意思是“如果函数 1 返回 true 而函数 2 返回 false --> 将颜色更改为黄色”。非常感谢!我会检查这是否有效
    • 哦,是的!我错过了黄色部分。 :D
    • 调用google页面时,白页出现几毫秒,如何解决
    • 函数2是在Asynktask中还是直接在课堂上使用?
    • @venkat in AsyncTask 当然。
    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多