有没有办法检查哪个应用程序正在打开 VPN 服务?

Is there a way to check which app is turning on the VPN service?

我想避免所有 vpn 连接,除了我的应用程序创建的连接,所以我使用以下代码:

public static boolean vpn() {
        String iface = "";
        try {
            for (NetworkInterface networkInterface : Collections.list(NetworkInterface.getNetworkInterfaces())) {
                if (networkInterface.isUp())
                    iface = networkInterface.getName();
                Log.d("DEBUG", "IFACE NAME: " + iface);
                if ( iface.contains("tun") || iface.contains("ppp") || iface.contains("pptp")) {
                    return true;
                }
            }
        } catch (SocketException e1) {
            e1.printStackTrace();
        }

        return false;
    }

这可以很好地检测是否使用了 VPN,但我还想检查打开此 VPN 的应用程序是否是我的,所以我只想知道是否有办法获得打开此 VPN 的应用程序的包名称。

我尝试使用 Sharepreferences 进行此操作,但我使用计时器每 1 秒检查一次,如果打开并保存到可能延迟的共享首选项,这有时会出现问题。

由于没有答案,以下是我解决此问题的方法:

  • 每次打开我的应用程序 VPN 时,我都会将其保存为共享首选项中的布尔值。
  • 我设置了一个计时器,每 5 秒检查一次 VPN 连接与否,并检查 if statement 共享首选项的值。