接続方法
Android 10 より前では、アプリで Wi-Fi に接続するには、addNetwork とenableNetwork を呼び出します。ただし、上記の方法はAndroid10以降では有効になりません。
Android 10 以降では、公式はアプリで Wi-Fi に接続する次の方法を提供しています。
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)
でも気をつけて!このコードは国内の Android 携帯電話では役に立ちません。接続プロンプト ボックスが表示されるものと、自動的に接続に失敗するものがあります。重要な点は、接続が成功した後でも、外部ネットワークにまったくアクセスできないことです。
networkCallback の onAvailable メソッドに追加するという人もいます。
connectivityManager.bindProcessToNetwork(network);
これも無効であると言えますが、Google や国内携帯電話メーカーは解決策を提供していないため、注意を払っていない可能性があります。
Honmeng システムでも実行できることはテストされていますが、安定していません。
その他の発見
上記の解決策に基づいて、WifiNetworkSuggestionに関する別の紹介を見ました。
Android 10 (API レベル 29) 以降を実行しているデバイスでは、アプリがデバイスのネットワーク資格情報を追加して、Wi-Fi アクセス ポイントに自動的に接続できます。WifiNetworkSuggestionを使用して、 接続するネットワークに関する提案を提供できます。最終的に、プラットフォームは、アプリや他のアプリからの提案に基づいて、受け入れるアクセス ポイントを選択します。
実験した結果、これはシステムが Wi-Fi に接続することを提案することをお伝えするためのものですが、必ずしも接続されるわけではないため、この解決策は無視していただいても構いません。
解決
1. Wi-Fi が正しいことを確認する必要がない場合は、ポップアップ ウィンドウがユーザーに手動で Wi-Fi 設定インターフェイスにジャンプするように促し、ユーザーは指定された Wi-Fi に手動で接続できるようになります。
val intent = Intent(Settings.ACTION_WIFI_SETTINGS)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
2. Android 10以降の問題なので10以上のSDKは使用しないでください
compileSdkVersion 28
targetSdkVersion 28
これは一時的な解決策であり、恒久的な解決策ではなく、他に選択肢がないという選択肢です。
ファローアップ
テスト後、MIUI 14 システムは既に Wi-Fi に接続するための上記のコードをサポートできており、携帯電話メーカーはこの問題を徐々に解決しているようです