Android ConnectivityManager.requestNetwork()连接到隐藏网络时超时



我正试图连接一个隐藏SSID,这是SAE在ConnectivityManager上。但结果是随着时间的推移。应用程序无法连接到SSID。我在试着改变SSID,不隐藏。

这里是连接乐趣

@RequiresApi(Build.VERSION_CODES.R)
fun connectSae(ssid: String, password: String) {
val suggestion = WifiNetworkSpecifier.Builder().setSsid(ssid).setWpa3Passphrase(password)
.setIsHiddenSsid(if (hide_ssid.equals(true)) true else false).build()
val networkRequest = NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.setNetworkSpecifier(suggestion).build()
// mCm?.registerNetworkCallback(networkRequest, mNetworkCallback)
mCm?.requestNetwork(networkRequest, mNetworkCallback)
}

下面是intent参数

if (intent.getBooleanExtra("hide_ssid", false)) {
// am start -n com.example.wifiConnect/.MainActivity -e ssid SH-AP-006_5G -e passwd 12345678 --ez hide_ssid true -e type SAE
hide_ssid = intent.getBooleanExtra("hide_ssid", false)
Log.d(TAG, "intent hide_ssid $hide_ssid")
}
if (intent.hasExtra("type")) {
type = intent.getStringExtra("type").toString()
Log.d(TAG, "intent type $type")
}

全局变量

companion object {
const val TAG = "MainActivity"
@SuppressLint("StaticFieldLeak")
lateinit var mContext: Context
lateinit var mWifiManager: WifiManager
var mConfig: WifiConfiguration? = null
// val wifiConfig = mWifiManager.configuredNetworks
lateinit var mCm: ConnectivityManager
lateinit var myWifiInfo: WifiInfo
// val mBroadcastReceiver = WifiScanBroadcase()
lateinit var scanResult: List<ScanResult>
var hide_ssid = false
var type = ""
var wifi_action = ""
lateinit var SECURITY_TYPE: String
lateinit var mNetworkCallback: NetworkCallback
}

初始化onCreate

mContext = getApplicationContext()
mWifiManager = mContext.getSystemService(WIFI_SERVICE) as WifiManager
mCm = mContext.getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
mNetworkCallback = object : ConnectivityManager.NetworkCallback() {
override fun onUnavailable() {
super.onUnavailable()
}
override fun onLosing(network: Network, maxMsToLive: Int) {
super.onLosing(network, maxMsToLive)
}
override fun onAvailable(network: Network) {
super.onAvailable(network)
mCm?.bindProcessToNetwork(network)
}
override fun onLost(network: Network) {
super.onLost(network)
}
}

如何使用ConnectivityManager连接隐藏SSID更稳定?

我找到了另一种稳定连接隐藏wpa3的方法

setup configure like this

when (SECURITY_TYPE) {
"PSK" -> {
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_PSK);
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN)
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK)
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP)
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP)
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP)
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP)
config.preSharedKey = """ + password + """
Log.d(TAG, "Config PSK set done")
}
"SAE" -> {
Log.d(TAG, mWifiManager.isWpa3SaeSupported.toString())
Log.d(TAG, mWifiManager.isWpa3SuiteBSupported.toString())
Log.d(TAG, mWifiManager.isEnhancedOpenSupported.toString())
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE);
config.allowedGroupManagementCiphers.clear();
config.allowedSuiteBCiphers.clear();
config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SAE);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.GCMP_256);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256);
config.preSharedKey = """ + password + """
// requirePmf = true;
Log.d(TAG, "Config SAE set done")
}
"WEP" -> {
val length = password.length
if (length == 10 || length == 26 || length == 58 && Regex("[0-9A-Fa-f]*").containsMatchIn(password)) {
config.wepKeys[0] = password
} else {
config.wepKeys[0] = """ + password + """
}
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_WEP);
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED)
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40)
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104)
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE)
config.wepTxKeyIndex = 0
config.status = WifiConfiguration.Status.ENABLED
Log.d(TAG, "Config WEP set done")
}
"NONE" -> {
config.setSecurityParams(WifiConfiguration.SECURITY_TYPE_OPEN);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.wepTxKeyIndex = 0;
config.preSharedKey = null;
Log.d(TAG, "Config NONE set done")
}

wiimanager添加并启用此网络

val padWifiNetwork = createWifiConfig(ssid, passwd, type)
var netId = mWifiManager.addNetwork(padWifiNetwork)
if (netId == -1) netId = mWifiManager.configuredNetworks?.let {
it.firstOrNull { it.SSID.trim('"') == ssid.trim('"') }?.networkId ?: -1
}!!
Log.d(TAG, "netId $netId")
mWifiManager.enableNetwork(netId, true)

这是我的工作

最新更新