VPNService-禁止使用的应用程序?

时间:2019-03-01 13:58:59

标签: android service android-vpn-service

因此,我正在尝试阻止Google Chrome浏览器访问Internet,而其他应用程序可以这样做。我正在使用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或任何其他应用程序?

1 个答案:

答案 0 :(得分:0)

我可以确认addDisallowedApplication是否有效;如前所述,它将给定的程序包从VPN中排除。

在您的情况下,这表示Chrome不使用VPN,而是使用“正常”的普通连接。当然,这绝不会阻止它。

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