[英]WiFiManager API in Android Q, R
我正在編寫一個示例應用程序,它正在掃描可用的 wifis 並以編程方式連接到它們
對於該建議,我使用的是WiFiManager ,但最近 Google 棄用了大多數允許掃描 WiFi 並以編程方式連接到它們的方法。 是的,從谷歌的角度來看,不允許任何人嘗試以編程方式連接到任何 WiFi 似乎是合乎邏輯的。 但我的問題將隨之而來
在新的 API 中,我找到了一種建議用戶連接到 WiFi 的方法
wifiManager.addNetworkSuggestions(listOf(WifiNetworkSuggestion
.Builder()
.setSsid("testWiFi")
.setWpa2Passphrase("test1234")
.build()))
但這確實無法預測,當我第一次運行我的所有並調用此方法時,在 Android Q 上顯示通知,在 Android R 上顯示通知時詢問用戶是否允許以某種方式連接到 WiFi 對話框到 WiFi 但之后為另一個 WiFi 調用相同的 function 什么也不做,應用程序不再顯示 ant 通知或對話框(這是一個錯誤?)
我也試過requestNetwoerk
方法
val specifier = WifiNetworkSpecifier
.Builder()
.setSsid("testWiFi")
.setBssid(MacAddress.fromString("testWiFiMac"))
.build()
val request = NetworkRequest
.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.setNetworkSpecifier(specifier)
.build()
connectivityManager.requestNetwork(request, networkCallback)
但在這種情況下,是否可以連接到受密碼保護的 WiFi,以及如果可以,如何連接還不是很清楚。
因此,如果有一些示例或解釋,請告訴我。
即使開始掃描已被棄用,谷歌仍然建議使用它。
這里的三個步驟是:
示例代碼可能如下所示:
val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
val wifiScanReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)
if (success) {
scanSuccess()
} else {
scanFailure()
}
}
}
val intentFilter = IntentFilter()
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)
context.registerReceiver(wifiScanReceiver, intentFilter)
val success = wifiManager.startScan()
if (!success) {
// scan failure handling
scanFailure()
}
....
private fun scanSuccess() {
val results = wifiManager.scanResults
... use new scan results ...
}
private fun scanFailure() {
// handle failure: new scan did NOT succeed
// consider using old scan results: these are the OLD results!
val results = wifiManager.scanResults
... potentially use older scan results ...
}
對於在 Android Q 或更高版本上運行的設備,正確連接到不作為對等網絡的公共或私有 wifi 的唯一方法是使用您在問題中已經顯示的 NetworkSuggestionAPI。
有時您看不到網絡建議的原因如下:“如果用戶在連接到某個網絡建議時使用 Wi-Fi 選擇器明確斷開與它的連接,則該網絡將在 24 小時內被忽略。在在此期間,即使應用程序刪除並重新添加與網絡對應的網絡建議,該網絡也不會被考慮自動連接。”,引自谷歌文檔網站。
有關 wifi 掃描的更多信息,請查看官方文檔: https://developer.android.com/guide/topics/connectivity/wifi-scan#kotlin
關於 WifiNetworkSuggestion API 的更多信息可以在這里找到: https://developer.android.com/guide/topics/connectivity/wifi-suggest
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.