1

所以我试图阻止谷歌浏览器访问互联网,而其他应用程序可以这样做。我正在使用 android 提供的 VPNService API。VPN 服务设置正确,但我无法阻止 chrome。

这是-

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        setupVPN();
    }
    return START_NOT_STICKY;
}

private void setupVPN() {
 try {
         Builder builder  = new Builder();
         builder.setSession("MyVPNService")
                .addAddress("192.168.0.1", 24)
                .addDnsServer("8.8.8.8")
                .addRoute("0.0.0.0", 0)
                .addDisallowedApplication("com.android.chrome")
                .establish();
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
}

我尝试使用addDisallowedApplication,但正如 android doc 所说

添加拒绝访问 VPN 连接的应用程序。默认情况下,允许所有应用程序访问,但通过此方法拒绝的应用程序除外。被拒绝的应用程序将使用网络,就好像 VPN 没有运行一样。VpnService.Builder 可能只有一组允许的应用程序或一组不允许的应用程序,但不能同时拥有。在 addAllowedApplication(String) 已被调用后调用此方法,反之亦然,将抛出 UnsupportedOperationException。packageName 必须是当前安装的应用程序的规范名称。如果没有这样的应用程序,则会抛出 PackageManager.NameNotFoundException。

那么如何成功阻止 Chrome 或任何其他应用程序呢?

4

1 回答 1

1

我可以确认addDisallowedApplication确实有效;如前所述,它将给定的软件包排除在使用 VPN 之外。

在您的情况下,这意味着 Chrome 不使用 VPN,而是使用“正常”的普通连接。当然,这不会以任何方式阻止它。

如果您想通过 VPN 阻止 Chrome,您可能需要使用addAllowedApplication. 当然,您必须确保您的 VPN 服务器确实阻止了连接。

于 2019-06-27T13:49:43.740 回答