2

可能重复:
Android - 检测是否有可用的 Internet 连接

这是检查 android 设备上的互联网可用性的代码:

public boolean isInternetAvailable() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (cm.getActiveNetworkInfo() != null)
        return cm.getActiveNetworkInfo().isConnected();
    else
        return false;
}

因此,如果没有可用的 wifi 或网络,此代码可以正常工作。

但是,如果设备连接到 wifi 网络但互联网不可用,那么我应该怎么做才能检查互联网是否存在?

任何建议将不胜感激。

4

3 回答 3

2

我这样做:

我尝试访问 google.com 并等待回复:

public static void isGoogleAvailable(final Handler handler)
{
    new Thread()
    {
        private boolean hasGoogleResponded = false;
        @Override
        public void run()
        {
            new Thread()
            {
                @Override
                public void run()
                {
                    HttpGet requestForTest = new HttpGet("https://www.google.com/");
                    try
                    {
                        new DefaultHttpClient().execute(requestForTest);
                        hasGoogleResponded = true;
                    }
                    catch (Exception e)
                    {}
                }
            }.start();

            try
            {
                int waited = 0;
                while(!hasGoogleResponded && (waited < 60000))
                {
                    sleep(100);
                    if(!hasGoogleResponded )
                    {
                        waited += 100;
                    }
                }
            }
            catch(InterruptedException e)
            {}
            finally
            {
                if (hasGoogleResponded)
                {
                    handler.sendEmptyMessage(1);
                }
                else
                {
                    handler.sendEmptyMessage(0);
                }
            }
        }
    }.start();
}

然后我在我的处理程序中检索消息:

Handler internetHandler = new Handler()
{
    @Override
    public void handleMessage(Message msg)
    {
        if (msg.what == 1) //connected
        {

        }
        else //not connected
        {

        }
    }
};

我希望这有帮助。

于 2012-08-20T10:17:15.027 回答
1

您可以尝试 ping 像 google 之类的服务器(应该始终存在)查看此主题

于 2012-08-20T09:42:58.010 回答
-1

你可以试试

 ConnectivityManager m;
            m.getAllNetworkInfo();

首先检查互联网连接,然后检查其他。但有时它取决于应用程序架构。如果应用程序需要 wifi 而你没有 - 你不能检查互联网,因为它没有必要

于 2012-08-20T09:39:19.167 回答