diff --git a/android/app/src/main/kotlin/com/hiddify/hiddify/bg/VPNService.kt b/android/app/src/main/kotlin/com/hiddify/hiddify/bg/VPNService.kt index c0cfba41..d6ce8514 100644 --- a/android/app/src/main/kotlin/com/hiddify/hiddify/bg/VPNService.kt +++ b/android/app/src/main/kotlin/com/hiddify/hiddify/bg/VPNService.kt @@ -6,8 +6,12 @@ import android.content.pm.PackageManager.NameNotFoundException import android.net.ProxyInfo import android.net.VpnService import android.os.Build +import android.os.IBinder import com.hiddify.hiddify.constant.PerAppProxyMode import io.nekohasekai.libbox.TunOptions +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext class VPNService : VpnService(), PlatformInterfaceWrapper { @@ -20,13 +24,23 @@ class VPNService : VpnService(), PlatformInterfaceWrapper { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int) = service.onStartCommand(intent, flags, startId) - override fun onBind(intent: Intent) = service.onBind(intent) + override fun onBind(intent: Intent): IBinder { + val binder = super.onBind(intent) + if (binder != null) { + return binder + } + return service.onBind(intent) + } override fun onDestroy() { service.onDestroy() } override fun onRevoke() { - service.onRevoke() + runBlocking { + withContext(Dispatchers.Main) { + service.onRevoke() + } + } } override fun autoDetectInterfaceControl(fd: Int) {