【问题标题】:No connectivity change with VPN?VPN 没有连接性变化?
【发布时间】:2026-02-13 12:30:04
【问题描述】:

有没有办法在 VPN 连接或断开时获得通知?由于我所看到的,ConnectivityManager 不会广播任何关于此的意图。

我还尝试(未成功)注册到隐藏的 ACTION_VPN_CONNECTIVITY 广播(如 android.net.vpn.VpnManager.java 源代码所示):

context.registerReceiver(新的广播接收器() { public void onReceive(上下文上下文,意图) { android.util.Log.d("MyApp", "收到 VPN 广播。"); } }, new IntentFilter("vpn.connectivity")); // VpnManager.ACTION_VPN_CONNECTIVITY

除了定期轮询网络接口以检测新网络接口的创建(通常是 ppp0)之外,还有其他方法可以检测 VPN 是否已连接?

最好的问候, 大卫

【问题讨论】:

  • 快速更新说明 Android 4.0 (ICS) 中不再存在“vpn.connectivity”。

标签: android


【解决方案1】:

sgs2 和模拟器一起使用:

    getApplicationContext().registerReceiver(new BroadcastReceiver()
    {
        public void onReceive(Context context, Intent intent)
        {
            logger.Log("VPN broadcast "+context.toString()+": ["+intent.toString()+"]");
        }
    }, new IntentFilter("vpn.connectivity"));

【讨论】:

    【解决方案2】:

    我尝试监听您提到的“vpn.connectivity”事件,它在我的 Nexus One(Android 2.3.3)上确实有效。我不知道这是否有任何区别,但我在清单中注册了接收器,而不是在运行时进行。

    【讨论】:

      【解决方案3】:

      你应该使用这个例子:

       <service android:name=".ExampleVpnService"
           android:permission="android.permission.BIND_VPN_SERVICE">
       <intent-filter>
           <action android:name="android.net.VpnService"/>
       </intent-filter>
      

      【讨论】: