原因
旧安卓设备(Android10)无法连接iPhone手机的热点是因为iPhone手机在更新了iOS 15之后采用了一种新的加密协议,即SAE。旧安卓设备只能够解码WPA和WPA2的Wi-Fi加密协议, 所以才无法连接。
方案
仅想连接:可以通过其他App去连接,如下载一个wifi万能钥匙。
功能支持通过修改连接安全配置【项目亲测】:
override fun connect(
wlanAp: WlanAp, password: String, onSuccess: (() -> Unit)?, onFailure: (() -> Unit)?
) {
mConnectingAp = wlanAp
connectTimes = 0
TAG.i("WLAN-connect-mConnectingAp = $mConnectingAp")
val listener = object : BaseCarWifi.ActionListener {
override fun onSuccess() {
TAG.i("WLAN-connect-success-onSuccess=${onSuccess},wlanAp=$wlanAp ")
onSuccess?.invoke()
}
override fun onFailure(p0: Int) {
TAG.i("WLAN-connect-failure-wlanAp= $wlanAp")
}
}
if (wlanAp.findReallyAP() == null) {
TAG.i("WLAN-connect-error-not execute--findReallyAP==null")
}
wlanAp.findReallyAP()?.let {
TAG.i("security------------>${it.security}")
if (it.security == 5){
TAG.i("SAE------------")
val wificonfiguration = if (it.config != null){
it.config
}else{
WifiConfiguration()
}
wificonfiguration.SSID = BaseAccessPoint.convertToQuotedString(it.ssidStr)
wificonfiguration.hiddenSSID = true
wificonfiguration.setSecurityParams(WifiConfiguration.SECURITY_TYPE_SAE)
TAG.i("wificonfiguration ---> password:${wificonfiguration.preSharedKey}")
if (password.isNotEmpty()){
wificonfiguration.preSharedKey = '"' + password + '"'
}else{
TAG.i("connect wlanAp = password is null,已保存再次点击过来非传入")
}
val netId = mWifiManager.addNetwork(wificonfiguration)
mWifiManager.saveConfiguration()
mWifiManager.enableNetwork(netId,true)
TAG.i("connect netId = $netId,wificonfiguration:${wificonfiguration}")
}else if (wlanAp.status == WlanStatus.Saved) {
//这个取消保存的同时去点击连接内部aar报空指针,所以加个判断
TAG.i("WLAN-connect-Saved= wlanAp.status==WlanStatus.Saved")
if (it.config != null) {
TAG.i("WLAN-connect-Saved-executeToWifi-BaseAccessPoint=${it}")
mCarWifi.connectToWifi(it, listener)
TAG.i("WLAN-connect-Saved-executeToWifi2-BaseAccessPoint=${it}")
} else {
TAG.i("WLAN-connect-Saved-not execute = config is null")
}
} else if (wlanAp.isOpen) {
TAG.i("WLAN-connect-not Saved-open-executeConnectToPublicWifi")
mCarWifi.connectToPublicWifi(it, listener)
} else {
TAG.i("WLAN-connect-not Saved-not open-executeConnectToNewWifi")
mCarWifi.connectToNewWifi(it, password)
}
}
}
小贴士
1、查看连接的热点安全类型:
logcat | grep connectToNetwork
10-07 14:00:51.848 1270 1525 D SupplicantStaIfaceHal: connectToNetwork "iPhone"SAE,"12345678"
10-14 21:52:57.585 1270 1525 D SupplicantStaIfaceHal: connectToNetwork "iPhone"SAE,"12345678"
2、BSSID是搜索出来的热点地址