連接方式
在Android10之前應(yīng)用內(nèi)連接wifi是調(diào)用addNetwork和enableNetwork。但在Android10以后以上方法不會(huì)生效。
在Android10及以上,官方提供了以下應(yīng)用內(nèi)連接wifi的方式:文檔
val specifier = WifiNetworkSpecifier.Builder()
.setSsidPattern(PatternMatcher("test", PatternMatcher.PATTERN_PREFIX))
.setBssidPattern(MacAddress.fromString("10:03:23:00:00:00"), MacAddress.fromString("ff:ff:ff:00:00:00"))
.build()
val request = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(specifier)
.build()
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val networkCallback = object : ConnectivityManager.NetworkCallback() {
...
override fun onAvailable(network: Network?) {
// do success processing here..
}
override fun onUnavailable() {
// do failure processing here..
}
...
}
connectivityManager.requestNetwork(request, networkCallback)
...
// Release the request when done.
connectivityManager.unregisterNetworkCallback(networkCallback)
但是注意!這段代碼在國(guó)內(nèi)的安卓機(jī)來(lái)說(shuō)根本沒(méi)什么鳥(niǎo)用,有些能彈出連接提示框,有些自動(dòng)給你連接失敗,關(guān)鍵是:就算連接成功后,也根本無(wú)法訪問(wèn)外部網(wǎng)絡(luò)。
有人說(shuō)在networkCallback的onAvailable方法加上
connectivityManager.bindProcessToNetwork(network);
我可以告訴你,一樣無(wú)效,谷歌和國(guó)內(nèi)的手機(jī)廠商沒(méi)有提供解決方案,可能沒(méi)重視。
測(cè)試過(guò)在鴻蒙系統(tǒng)可以做到,但也不穩(wěn)定。
其他發(fā)現(xiàn)
基于以上方案無(wú)解,我又看到了一個(gè)關(guān)于WifiNetworkSuggestion的介紹:
運(yùn)行 Android?10 (API 級(jí)別 29) 或更高版本 的設(shè)備允許您的應(yīng)用添加設(shè)備的網(wǎng)絡(luò)憑據(jù),以自動(dòng)連接到 WLAN 接入點(diǎn)。您可以使用?WifiNetworkSuggestion?就連接到哪個(gè)網(wǎng)絡(luò)提供建議。平臺(tái)最終會(huì)根據(jù)您的應(yīng)用和其他應(yīng)用的建議,選擇要接受的接入點(diǎn)。
好吧,經(jīng)過(guò)試驗(yàn),這個(gè)只是告訴你我會(huì)建議系統(tǒng)連接你的wifi,但并不一定會(huì)去連接,所以可以忽略這個(gè)方案。
解決方案
1.如果你不是非得校驗(yàn)wifi的正確性,那么彈窗提示用戶手動(dòng)跳轉(zhuǎn)到wifi設(shè)置界面,讓用戶手動(dòng)連接指定wifi。
val intent = Intent(Settings.ACTION_WIFI_SETTINGS)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
2.既然是安卓10以上的問(wèn)題,那么只能不使用10以上的SDK
compileSdkVersion 28
targetSdkVersion 28
這個(gè)治標(biāo)不治本,無(wú)可奈何的選擇。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-424332.html
后續(xù)
經(jīng)測(cè)試MIUI 14系統(tǒng)已經(jīng)可以支持以上連接wifi的代碼,看來(lái)手機(jī)廠商也在逐步解決這個(gè)問(wèn)題文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-424332.html
到了這里,關(guān)于關(guān)于安卓10以上連接wifi無(wú)法聯(lián)網(wǎng)的問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!