因此,我正在尝试阻止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或任何其他应用程序?
答案 0 :(得分:0)
我可以确认addDisallowedApplication
是否有效;如前所述,它将给定的程序包从VPN中排除。
在您的情况下,这表示Chrome不使用VPN,而是使用“正常”的普通连接。当然,这绝不会阻止它。
如果您想通过VPN阻止Chrome,则可能要使用addAllowedApplication
。当然,您必须确保您的VPN服务器确实阻止了连接。