android - 替换 "vpn.connectivity"广播事件

标签 android broadcastreceiver vpn

我有一个问题,我想在 Android 中监控 VPN 连接的状态。我看到在 ICS 之前我可以在“vpn.connectivity”操作上设置广播接收器,但我没有在 ICS 或更高版本中看到任何模拟。

目前,我最好的选择似乎是轮询已知只能通过 VPN 访问的服务器,但出于多种原因,轮询并不是一个好的解决方案。有没有人有解决方案来检测 Android > 4.0 中内置 VPN 客户端的连接/断开事件?这似乎是一个可以包含在 ConnectivityManager 广播中的功能。

我已验证监听“vpn.connectivity” Intent 的 BroadcastReceiver 适用于运行 3.2 的 Acer,但不适用于运行 4.4 的 Nexus 7 2013。

更新:

我看到 ICS 中有一个 VpnService 类。从我阅读的文档来看,这似乎是为了在您的应用程序中创建 VPN。如果系统中的客户端足够的话,我不想维护一个 VPN 客户端。我可能会接受使用这种类型的类作为系统中配置的 VPN 的传递,但我的直觉告诉我这是不可能的,因为操作系统似乎已经锁定了对系统的可见性VPN 配置和事件。

最佳答案

我找到了一种使用其新 API 适用于 Android 5.0+ 的方法。

val request = NetworkRequest.Builder()
        .addTransportType(NetworkCapabilities.TRANSPORT_VPN)
        .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
        .build()
connectivityManager.registerNetworkCallback(request, yourListener)

关于android - 替换 "vpn.connectivity"广播事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21122751/

相关文章:

android - 如何在android上调试angularjs?

android - flutter 错误 : List. [](dart :core-patch/growable_array. dart:166:60)

android - BroadcastReceiver onReceive超时

Hadoop 客户端和集群分离

mysql - 连接mysql,主机ip重定向回本地

java - 将 java 翻译成 c#

android - 什么是更好的多线程方法

java - 遍历主要 "call handling" Activity 的一些方法

android - 如何自动启动 AlarmManager 以启动计划 Activity ?

java - 通过 Java 或 Shell 脚本在 Linux 上以编程方式启动 VPN 连接