如何在Android中检查网络内的互联网连接(通过HOTSPOT使用其他设备的互联网)

Posted

技术标签:

【中文标题】如何在Android中检查网络内的互联网连接(通过HOTSPOT使用其他设备的互联网)【英文标题】:How to check the internet connectivity within the network in Android (using internet of some other device through HOTSPOT) 【发布时间】:2014-09-26 09:12:42 【问题描述】:

我有一个需求,我想在连接网络时检查是否有任何互联网连接。

例如,我有设备 A 和设备 B。

设备 A 与设备 B 的热点连接。在设备 A 中,我将其视为与 Wi-Fi 连接,而在设备 B 中 - 一个设备与热点连接。

现在,如果我从设备 B(不是网络共享热点)中删除互联网,那么在设备 A 中,它仍然显示 - 已连接到 Wi-Fi,但没有互联网连接。

ConnectivityManager 等类有助于确定设备是否与网络连接,而不是关于互联网连接。

我想跟踪这个问题。有什么方法可以实现吗?

【问题讨论】:

+1,好问题,我正在检查我的一个应用程序中的互联网连接,但尚未处理此问题。现在对答案感到好奇 B 设备是设备 A 的热点?一旦你关闭设备 B 的热点,你想在设备 A 中检测到它吗? 不移除热点。从设备 B 中删除互联网 通过 ping www.google.com 检查连接性怎么样 :) 这是一个荒谬的解决方案吗? @BatuhanC:这不是一个荒谬的解决方案。但我想知道 android 到底提供了什么? 【参考方案1】:

这可能是一个荒谬的解决方案,但我认为它也可能是真正的解决方案:

public boolean isOnline() 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnected()) 
        try 
            URL url = new URL("http://www.google.com");
            HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
            urlc.setConnectTimeout(3000);
            urlc.connect();
            if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) 
                return new Boolean(true);
            
         catch (MalformedURLException mue) 
            // TODO Auto-generated catch block
            mue.printStackTrace();
         catch (IOException ie) 
            // TODO Auto-generated catch block
            ie.printStackTrace();
        
    
    return false;

【讨论】:

那么如果谷歌离线就意味着我没有互联网? 我想是的。这就像尝试连接您的服务器。如果没有检查谷歌。如果 google 未连接,则表示您处于离线状态。 @PedroOliveira 好点,但是 OP 将使用他们自己的网站,您可以添加一些检查:如果 google 关闭,请尝试 OP 的网站,然后尝试 SO 等等...如果所有这些都失败,它就会离线。这并不理想,但我在 android 中找不到与 ConnectivityManager 无关的任何内容。 我也是。我正在寻找android可以提供的东西。有很多方法可以检查网络连接,但没有一种方法可以检查网络内的互联网 我希望android系统可以控制这个但我不知道系统是否提供。【参考方案2】:

尝试以下功能检查您的互联网连接:

    public static boolean isInternetConnected(Context mContext) 

        try 
            ConnectivityManager connect = null;
            connect = (ConnectivityManager) mContext
                    .getSystemService(Context.CONNECTIVITY_SERVICE);

            if (connect != null) 
                NetworkInfo resultMobile = connect
                        .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

                NetworkInfo resultWifi = connect
                        .getNetworkInfo(ConnectivityManager.TYPE_WIFI);

                if ((resultMobile != null && resultMobile
                        .isConnectedOrConnecting())
                        || (resultWifi != null && resultWifi
                                .isConnectedOrConnecting())) 
                    return true;
                 else 
                    return false;
                
            
         catch (Exception e) 
            e.printStackTrace();
        

        return false;
    

将以下权限添加到您的清单文件中,

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

【讨论】:

请清楚地阅读问题,用户正在询问有关 ConnectivityManager 的解决方案,但要了解互联网可用性而不是网络可用性。

以上是关于如何在Android中检查网络内的互联网连接(通过HOTSPOT使用其他设备的互联网)的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中检查网络是不是连接到wifi [重复]

如何通过ajax调用检查网络连接

检查互联网连接Android [重复]

我如何检查我的设备是否与互联网连接

在具有互联网数据速度的android中检查网络可用[重复]

android——判断网络状态