Android 10以降でWi-Fiに接続できない問題について

接続方法

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 に接続するための上記のコードをサポートできており、携帯電話メーカーはこの問題を徐々に解決しているようです

おすすめ

転載: blog.csdn.net/gs12software/article/details/129005358