Приложение, которое я разрабатываю, использует VpnService вместе с VpnService.Builder, классы для генерации VPN, чтобы блокировать трафик от определенных приложений.Согласно документации на developer.android.com, все приложения должны быть разрешены через VPN, пока не будет вызван Builder.AddAllowedApplication или Builder.AddDisallowedApplication.
Когда по какой-то причине моя служба VPN запускается, все приложениязапрещено, что странно.Как только я отключаюсь от VPN, все приложения снова становятся доступными.Мне нужно разрешить все, если не указано иное (что и должно быть в документации).Я запускаю VPN, позвонив по следующему номеру:
private string _sTag = typeof(VpnService).Name;
private VpnServiceBinder _objBinder;
private ParcelFileDescriptor _objVpnInterface = null;
private PendingIntent _objPendingIntent = null;
...
if (_objVpnInterface == null)
{
Builder objVpnBuilder = new Builder(this);
objVpnBuilder.AddAddress("10.0.0.2", 32);
objVpnBuilder.AddRoute("0.0.0.0", 0);
// Form the interface
_objVpnInterface = objVpnBuilder.SetSession("Squelch").SetConfigureIntent(_objPendingIntent).Establish();
// Disallow instagram as a test
objVpnBuilder.AddDisallowedApplication("com.instagram.android");
// Set flag
_bVpnIsRunning = true;
}
Таким образом, в приведенном выше примере instagram должен быть единственным заблокированным приложением, но кажется, что весь трафик заблокирован (невозможно использовать приложение chrome, facebook,так далее).Есть ли что-то, что мне не хватает в отношении этого?Должен ли я что-то указывать до / после установки интерфейса?Буду очень признателен за любую помощь или направление!
Примечание: в случае, если это имеет значение, я нацеливаюсь на Android 6.0 и выше.Я могу предоставить больше источника, если требуется.