Интернет на устройстве Android перестает работать после отключения VPNAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Интернет на устройстве Android перестает работать после отключения VPN

Сообщение Anonymous »

У меня возникла проблема с доступом в Интернет на физическом планшете Samsung Galaxy Tab 9 после того, как я отключил VPN в приложении владельца устройства. Ниже I класс, который я использую для управления VPN. Он неполный, но вы должны понимать, как я включаю и выключаю VPN для устройства.
Что я делаю:
У меня есть флажок в моем приложении, чтобы включить/выключить VPN. Методы вызова флажка в примере ниже.
Как это ведет себя:
После включения VPN все работает нормально. Проблема в том, что иногда, когда я его выключаю или отключаюсь, Интернет перестает работать. Я не могу загрузить ни один сайт в Интернете. У меня есть "!" на моем индикаторе Wi-Fi, и запуск/остановка VPN не поможет. Единственное, что я могу сделать, это снова подключиться к VPN, и все начнет работать, но только пока я подключен. После отключения я больше не смогу пользоваться Интернетом.
Вы можете посмотреть видео по этой ссылке.
Этого не произойдет. всегда. Прямо сейчас мне удалось воспроизвести это с помощью быстрого включения/выключения VPN.
Что помогает:
Только так у меня было Чтобы решить эту проблему, перезагрузите планшет.
Это мой класс VpnService:

Код: Выделить всё

package sk.backbone.bbhub.android.services

import android.app.Activity.DEVICE_POLICY_SERVICE
import android.app.Activity.VPN_MANAGEMENT_SERVICE
import android.app.admin.DevicePolicyManager
import android.content.Context
import android.net.Ikev2VpnProfile
import android.net.VpnManager
import android.os.Build
import dagger.hilt.android.qualifiers.ApplicationContext
import sk.backbone.bbhub.android.receivers.BBHubAdminReceiver.Companion.adminComponent
import sk.backbone.bbhub.android.repositories.local.ConfigSharedPreferences
import sk.backbone.bbhub.shared.entities.DeviceVpnProfileType
import java.io.ByteArrayInputStream
import java.security.cert.CertificateFactory
import java.security.cert.X509Certificate
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class VpnService @Inject constructor() {
@Inject @ApplicationContext lateinit var context: Context
@Inject lateinit var deviceService: dagger.Lazy
@Inject lateinit var configSharedPreferences: ConfigSharedPreferences

val vpnManager by lazy {
context.getSystemService(VPN_MANAGEMENT_SERVICE) as VpnManager
}

val devicePolicyManager by lazy {
context.getSystemService(DEVICE_POLICY_SERVICE) as DevicePolicyManager
}

private fun startVpn(){
stopVpn()

val deviceSettings = deviceService.get()?.deviceConfigurationFlow?.value?.snapshot?.deviceSetting

if(deviceSettings?.vpnProfileType == null){
return
}

if(deviceSettings.vpnServerAddress == null){
return
}

if(deviceSettings.vpnIdentity == null){
return
}

val cert = deviceSettings.vpnServerRootCa?.let {
ByteArrayInputStream(it.toByteArray()).use { inStream ->
val cf = CertificateFactory.getInstance("X.509")
cf.generateCertificate(inStream) as X509Certificate
}
}

vpnManager.provisionVpnProfile(
Ikev2VpnProfile.Builder(deviceSettings.vpnServerAddress!!, deviceSettings.vpnIdentity!!).apply {
when(deviceSettings.vpnProfileType!!){
DeviceVpnProfileType.TYPE_IKEV2_IPSEC_PSK -> {
setAuthPsk((deviceSettings.vpnPreSharedKey ?: "").toByteArray())
}
DeviceVpnProfileType.TYPE_IKEV2_IPSEC_RSA -> {
// Todo:
// setAuthDigitalSignature()
}
DeviceVpnProfileType.TYPE_IKEV2_IPSEC_USER_PASS -> {
setAuthUsernamePassword(deviceSettings.vpnUser ?: "", deviceSettings.vpnPassword ?: "", cert)
}
}
}.build()
)

devicePolicyManager.setAlwaysOnVpnPackage(context.adminComponent, context.packageName, false)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
vpnManager.startProvisionedVpnProfileSession()
} else {
@Suppress("DEPRECATION")
vpnManager.startProvisionedVpnProfile()
}
}

private fun stopVpn() {
devicePolicyManager.setAlwaysOnVpnPackage(context.adminComponent, null, false)
vpnManager.stopProvisionedVpnProfile()
vpnManager.deleteProvisionedVpnProfile()
}
}
Вопрос в том, что я могу сделать лучше или что я делаю неправильно, и как я могу предотвратить прослушивание себя в Интернете.
Обновить

[*]добавлены журналы logcat с использованием «vpn» в фильтре OnStart OnStop.
добавлены журналы logcat с использованием «сети» в фильтре OnStop


Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-vpn-off
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»