項(xiàng)目功能:
android 11 的板子(硬件跟驅(qū)動(dòng)都是公司的)上開(kāi)發(fā)一款app位衩,該app有WIFI相關(guān)的操作開(kāi)發(fā)(實(shí)現(xiàn)WIFI掃描列出WiFi列表裆蒸、點(diǎn)擊保存過(guò)的WiFi進(jìn)行連接、輸入密碼連接新WiFI糖驴、刪除已連接的WiFi)僚祷。
實(shí)際開(kāi)發(fā)中遇到問(wèn)題的(android系統(tǒng)11、targetSdkVersion =30):
1)調(diào)用WiFi相關(guān)的網(wǎng)絡(luò)操作方法removeNetwork()贮缕、reassociate()辙谜、enableNetwork()、disableNetwork()感昼、reconnect()?和?disconnect()筷弦,這些方法無(wú)效。
2)使用WifiNetworkSuggestion時(shí)抑诸,即使平臺(tái)接受你的建議(方法返回WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS)烂琴,也不會(huì)進(jìn)行切換或者連接新的WiFi,
即無(wú)法實(shí)現(xiàn)項(xiàng)目對(duì)網(wǎng)絡(luò)切換蜕乡、連接等操作的需求奸绷。
下面是在項(xiàng)目中可以實(shí)現(xiàn)的解決方案:
第一種:將你的App升級(jí)為系統(tǒng)APP。原理:APP權(quán)限升級(jí)层玲,此時(shí)WiFi相關(guān)的api調(diào)用是可以的号醉,但這種方式實(shí)現(xiàn)相對(duì)比較復(fù)雜,設(shè)備需要權(quán)限辛块,如果你是自己的板子可以這樣操作畔派,若果不是,此方法可能行不通润绵。
第二種:將你的targetSdkVersion設(shè)置為28线椰,即targetSdkVersion=28即可。原理:高版本會(huì)適配低版本尘盼,這個(gè)時(shí)候即使你的app運(yùn)行在10憨愉、11烦绳、12、13系統(tǒng)上配紫,WiFi相關(guān)的api調(diào)用仍然跟之前的版本(10.0以下的版本)相同径密,
但此時(shí)一些運(yùn)行時(shí)權(quán)限可能要進(jìn)行更改,這個(gè)權(quán)限要視實(shí)際項(xiàng)目開(kāi)發(fā)來(lái)看躺孝。
上述兩種方式我都在項(xiàng)目中測(cè)試過(guò)享扔,可以實(shí)現(xiàn)android 11 的板子上進(jìn)行WIFI操作開(kāi)發(fā)(實(shí)現(xiàn)WIFI掃描列出WiFi列表、點(diǎn)擊保存過(guò)的WiFi進(jìn)行連接植袍、輸入密碼連接新WiFI惧眠、刪除已連接的WiFi)需求。
下面是官方文檔上的對(duì)WiFi相關(guān)操作的描述奋单,可以增加你對(duì)這些問(wèn)題的理解
1)對(duì)啟用和停用 WLAN 實(shí)施了限制
以 Android 10 或更高版本為目標(biāo)平臺(tái)的應(yīng)用無(wú)法啟用或停用 WLAN。WifiManager.setWifiEnabled()?方法始終返回?false猫十。
如果您需要提示用戶啟用或停用 WLAN览濒,請(qǐng)使用設(shè)置面板。
對(duì)直接訪問(wèn)已配置的 WLAN 網(wǎng)絡(luò)實(shí)施了限制
為了保護(hù)用戶隱私拖云,只有系統(tǒng)應(yīng)用和設(shè)備政策控制器 (DPC)?支持手動(dòng)配置 WLAN 網(wǎng)絡(luò)列表贷笛。給定 DPC 可以是設(shè)備所有者,也可以是資料所有者宙项。
如果應(yīng)用以 Android 10 或更高版本為目標(biāo)平臺(tái)乏苦,并且應(yīng)用不是系統(tǒng)應(yīng)用或 DPC,則下列方法不會(huì)返回有用數(shù)據(jù):
getConfiguredNetworks()?方法始終返回空列表尤筐。
注意:如果運(yùn)營(yíng)商應(yīng)用調(diào)用?getConfiguredNetworks()汇荐,則系統(tǒng)返回的列表僅包含運(yùn)營(yíng)商配置的網(wǎng)絡(luò)。
每個(gè)返回整數(shù)值的網(wǎng)絡(luò)操作方法(addNetwork()?和?updateNetwork())始終返回 -1盆繁。
每個(gè)返回布爾值的網(wǎng)絡(luò)操作(removeNetwork()掀淘、reassociate()、enableNetwork()油昂、disableNetwork()革娄、reconnect()?和?disconnect())始終返回?false。
2)運(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)厕妖。
但實(shí)際中如果用WifiNetworkSuggestion?,即使平臺(tái)接受你的建議挑庶,也不會(huì)進(jìn)行切換或者連接新的WiFi叹放。平臺(tái)只是接受你的應(yīng)用建議饰恕,
但并不一定會(huì)使用,所以這個(gè)不符合需求開(kāi)發(fā)井仰。如果用老的api埋嵌,每個(gè)返回布爾值的網(wǎng)絡(luò)操作(removeNetwork()、reassociate()俱恶、enableNetwork()雹嗦、disableNetwork()、reconnect()?和?disconnect())始終返回?false合是。
也不符合需求開(kāi)發(fā)了罪。