到目前为止:

我发现以下解决方案

  • Using Broadcastreceiver

    广播接收器已从ICS
  • 中弃用
  • Using Ping or Traceroute

    肯定要花很多时间,而且效率不高
  • Polling for DNS server changes

    肯定要花很多时间,而且效率不高
  • Using ip-address

    即使根据网络连接花费的时间不多,但
  • 可能会有所不同

    我的结论是:

    到目前为止,我发现的所有解决方案都不高效或不太可靠。

    我的问题:

    如果在Android设备中连接了VPN,则Android OS必须知道它。

    是否有任何公开的Android框架API可以读取它,因为在本地找到它是最有效,最可靠的解决方案?

    还有其他有效且可靠的方法来实现它(例如将C或C plus plus库与NDK集成在一起)吗?

    注意:

    我也找不到来自Android的OpenVPN的任何自定义广播发件人/AIDL

    最佳答案

    您可以尝试检查tun0 INTERFACE,它是在建立命令后启动的。

    try {
        for( NetworkInterface intf : Collections.list(NetworkInterface.getNetworkInterfaces())) {
    
            // Pass over dormant interfaces
            if(!intf.isUp() || intf.getInterfaceAddresses().size() == 0)
                continue;
    
                if ("tun0".equals(intf.getName())){
                    // The VPN is up
                    break;
                }
        }
    }
    
    这也可能起作用:(Collections.list(NetworkInterface.getByName("tun0")

    10-07 19:37
    查看更多