如何在 Android ICS 上检查 *** 连接状态

Posted

技术标签:

【中文标题】如何在 Android ICS 上检查 *** 连接状态【英文标题】:How to check *** connection status on Android ICS 【发布时间】:2012-06-06 17:38:54 【问题描述】:

我正在尝试注册接收器,它将检查 *** 状态。我试过这个:Get *** Connection status on android 但看起来它不再适用于 ICS。我检查了 android 源代码以获取一些线索,但没有运气,只注意到在 ISC 中没有类似:***.connectivityconnection_state - 它曾经在 android 2.3 中。还尝试使用android.net.conn.CONNECTIVITY_CHANGE 作为我的IntentFilter,但它根本不会对*** 连接做出反应(当然我已经添加了权限android.permission.ACCESS_NETWORK_STATE)。 我认为这很简单,但我已经不知道该怎么做了……有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:
for (Enumeration<NetworkInterface> en =
             NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) 
            NetworkInterface intf = en.nextElement();
            if (intf.getName().contains("tun0") || intf.getName().contains("ppp0")) 
                ***Interface = intf;
                break;
            
        

对于 *** 网络接口

for (Enumeration<InetAddress> en =
                 ***Interface.getInetAddresses(); en.hasMoreElements(); ) 
                InetAddress address = en.nextElement();
                if (!address.isLoopbackAddress()) 
                    String ip = address.getHostAddress();
                    break;
                
            

和 InetAddress

这就是我现在所知道的一切

检查它是否启动等。也许

if (***Interface.isUp())

我确实实现了一段代码,它会在一段时间后调用自身并向 ApplicationHandlers 发送消息

【讨论】:

【参考方案2】:

NetworkCapabilities 在 API 21+ 中为我工作。不幸的是,我还没有找到 19-20 的解决方案。您必须遍历所有现有网络并检查哪个有 ***_TRANSPORT

ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
Network[] networks = cm.getAllNetworks();

Log.i(TAG, "Network count: " + networks.length);
for(int i = 0; i < networks.length; i++) 

  NetworkCapabilities caps = cm.getNetworkCapabilities(networks[i]);

  Log.i(TAG, "Network " + i + ": " + networks[i].toString());
  Log.i(TAG, "*** transport is: " + caps.hasTransport(NetworkCapabilities.TRANSPORT_***));
  Log.i(TAG, "NOT_*** capability is: " + caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_***));


【讨论】:

【参考方案3】:

我的解决方案是轮询 NIC 列表。 # 可以通过执行命令“ls /sys/class/net”获取列表。 如果列表中有“tun0”,则设备已经连接到 ***。

【讨论】:

【参考方案4】:

也许您可以尝试轮询 DNS 服务器更改。如果它已更改,则 *** 已连接。但是,我认为这条规则可能有很多例外。

How do you get the current DNS servers for Android?

【讨论】:

以上是关于如何在 Android ICS 上检查 *** 连接状态的主要内容,如果未能解决你的问题,请参考以下文章

如何使用适用于 Gingerbread 和 Froyo 的 ICS UI 创建 Android 应用程序?

Android 4.0 org.apache.http.conn.ConnectTimeoutException:连接到...超时

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

在 Android 4+ (ICS) 中为 aSmack 使用 Android TrustStore

像在 ICS 中一样在 android 2.x 中创建下拉菜单的最佳方法

如何在 android 上检查 socket.io 连接或断开连接?