fix: resolve host address based on API level

fix #21
This commit is contained in:
Miuzarte
2026-05-01 17:46:28 +08:00
parent f3a5cc53f6
commit 85ddee3b36
2 changed files with 12 additions and 3 deletions

View File

@@ -56,8 +56,8 @@ android {
applicationId = "io.github.miuzarte.scrcpyforandroid"
minSdk = 26
targetSdk = 37
versionCode = 26
versionName = "0.3.0"
versionCode = 27
versionName = "0.3.1"
externalNativeBuild {
cmake {

View File

@@ -2,6 +2,7 @@ package io.github.miuzarte.scrcpyforandroid.nativecore
import android.annotation.SuppressLint
import android.content.Context
import android.os.Build
import android.net.nsd.NsdManager
import android.net.nsd.NsdServiceInfo
import android.util.Log
@@ -85,7 +86,7 @@ internal object AdbMdnsDiscoverer {
override fun onServiceResolved(serviceInfo: NsdServiceInfo) {
if (discoveryFinished.get()) return
val hostAddress = serviceInfo.hostAddresses[0].hostAddress ?: return
val hostAddress = resolvedHostAddress(serviceInfo) ?: return
if (hostAddress.isBlank()) return
if (!includeLanDevices) {
@@ -128,6 +129,14 @@ internal object AdbMdnsDiscoverer {
return if (port > 0 && !host.isNullOrBlank()) host to port else null
}
@Suppress("DEPRECATION")
@SuppressLint("NewApi")
private fun resolvedHostAddress(serviceInfo: NsdServiceInfo): String? =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
serviceInfo.hostAddresses.firstOrNull()?.hostAddress
else
serviceInfo.host?.hostAddress
private fun isPortOpened(port: Int): Boolean = try {
ServerSocket().use {
it.bind(InetSocketAddress("127.0.0.1", port), 1)