Android 12では、Wi-Fi STA / STA同時実行機能が導入されています。これにより、デバイスは2つのWi-Fiネットワークに同時に接続できます。このオプション機能により、以下の機能が有効になります。
- Make-before-break :デバイスは、既存の接続を切断する前に、新しいWi-Fiネットワークに接続します。これにより、Wi-Fiネットワークを切り替える際の移行がスムーズになります
- ローカルのみとインターネットの同時接続:デバイスは、デバイスのプライマリインターネット提供接続を中断することなく、ローカルのみのネットワークに接続します。
- 同時制限インターネット接続:デバイスは、デバイスのプライマリインターネット提供接続を中断することなく、制限付きネットワーク(特定の特権アプリでのみ使用可能)に接続します。
このページでは、この機能が有効になっている場合のデバイスの動作と、デバイスの製造元とベンダーの実装の詳細について説明します。
実装
Wi-Fi STA / STA同時実行を実装するには、デバイスが以下をサポートしている必要があります。
Wi-Fiチップまたはファームウェアは、2つの同時STA接続をサポートする必要があります。ファームウェアは、両方の接続ですべてのチャネルと帯域の組み合わせをサポートする必要があります。パフォーマンスの問題を回避するために、2x2 + 2x2DBS対応のWi-Fiチップを使用することをお勧めします。
デバイスは、ベンダーHALバージョン1.5で次のAPIをサポートする必要があります
IWifiChip.setMultiStaPrimaryConnection()
-
IWifiChip.setMultiStaUseCase()
HAL Wi-Fiインターフェースの組み合わせには、
[{STA} <= 2, ...]
などの指定形式を使用して公開された2つの同時STAインターフェースが必要です。詳細については、「 Wi-Fiマルチインターフェイスの同時実行性」を参照してください。
これらの前提条件が満たされている場合は、次の手順を実行してWi-Fi STA / STAの同時実行性を実装します。
ランタイムリソースオーバーレイを使用して、1つ以上の機能を個別に有効にします(デフォルトでは無効になっています)。
- Make-before-break :
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
- ローカルのみの同時接続とインターネット接続:
config_wifiMultiStaLocalOnlyConcurrencyEnabled
- 同時制限およびインターネット接続:
config_wifiMultiStaRestrictedConcurrencyEnabled
- Make-before-break :
以下のそれぞれのセクションで説明されているように、各実装を検証します。
Wi-Fi STA / STAの同時実行性をより適切にサポートするには、OEMでカスタマイズされたフレームワークとアプリで、 WifiInfo
WifiManager#getConnectionInfo()
ではなくNetworkCallback#onCapabilitiesChanged()
メソッドを使用することをお勧めします。 。詳細については、ピアツーピア接続用のWi-FiネットワークリクエストAPIを参照してください。
休憩前に作る
make-before-break機能を使用すると、デバイスは既存のWi-Fiネットワーク接続を維持しながら新しいWi-Fiネットワークに接続でき、新しいWi-Fiネットワークに正常に接続してインターネットにアクセスできる場合にのみ、古いネットワークから切断されます。
make-before-breakのユースケースは、Android 11以下の次の問題に対処します。この問題では、デバイスは新しいネットワークに接続する前に既存のWi-Fiネットワークから切断する必要があります(break-before-make)。
新しいネットワークに接続するときに、デバイスが誤ったWi-Fiパスワードが保存されていること、または新しいネットワークにインターネットアクセスがないことを検出する場合があります。これにより、デバイスは古いネットワークに強制的に戻され、Wi-Fi接続がない状態でかなりの時間がかかります。
古いネットワークが突然切断されます。これは、すべてのソケットが閉じられることを意味します。多くの場合、アプリは突然の接続の喪失にうまく反応しません。これにより、新しい接続が完全に確立されるまで、インターネット接続がない状態が数秒間発生する可能性があります。
デフォルトネットワークは、古いWi-Fiネットワークからセルラーに2回変更され、次にセルラーから新しいWi-Fiネットワークに変更されます。これにより、アプリはネットワークの変更に2回反応します。また、デバイスはセルラーデータの使用に短時間を費やす必要があります。
make-before-breakフローは、OSによって開始された自動Wi-Fiネットワークスイッチにのみ使用されます。ユーザーが開始するネットワークスイッチは、新しいネットワークが接続される前に以前のネットワークが完全に切断される、従来のブレークビフォアメイクフローを使用します。場合によっては、OSによって開始された自動スイッチでも、ブレークビフォアメイクフローが使用されます。たとえば、両方ともファクトリMACアドレスを使用するように構成された2つのネットワークを切り替える場合です。
アプリは、 WifiManager#isMakeBeforeBreakWifiSwitchingSupported()
APIを使用して、このユースケースがデバイスでサポートされているかどうかを確認できます。
make-before-breakの検証
実装を検証するには、自動Wi-Fiネットワークスイッチをトリガーし(現在接続されているネットワークよりも強い信号強度のネットワークが利用可能であることを確認します)、デバイスが新しいネットワークに接続している間、既存の接続を維持することを確認します。両方のWi-Fiインターフェイスのステータスを表示し、両方が接続されていることを確認するには、次のコマンドを使用します。
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
新しいネットワークに接続がない場合、デバイスは既存のネットワークとの接続を維持しながらネットワークへの接続を試み、新しいネットワークにインターネットがないことを検出すると試行を中止します。その後、デバイスは既存の接続をプライマリWi-Fiネットワークとして引き続き使用します。
ローカルのみの同時接続とインターネット接続
ローカル専用とインターネットの同時接続機能により、デバイスは、プライマリインターネット提供ネットワークと同時に、IoTデバイスへの接続などのローカル専用接続に接続できます。この機能により、カメラなどのIoTデバイスに直接接続する際のユーザーエクスペリエンスが向上します。これは、Android10で追加されたWifiNetworkSpecifier
を介して可能です。
Android 11以前では、デバイスはIoTデバイスに接続するときにプライマリWi-Fiネットワークから切断され、インターネット接続が失われます(デバイスにセルラーデータなどの別のトランスポートタイプが使用可能な場合を除く)。
アプリは、 WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported()
APIを使用して、この関数がデバイスでサポートされているかどうかを確認できます。
Android 12でのローカルのみの同時接続機能とインターネット接続機能の変更の詳細については、ピアツーピア接続用のWi-FiネットワークリクエストAPIを参照してください。
ローカルのみのインターネット接続の検証
この機能を検証するには、次のCTSおよびACTSテストを使用します。
- CTS:
MultiStaConcurrencyWifiNetworkSpecifierTest
- ACTS:
WifiStaConcurrencyNetworkRequestTest
同時制限およびインターネット接続
制限付きインターネット接続機能を同時に使用すると、デバイスはユーザーのプライマリWi-Fiネットワークと、一部のアプリでのみ使用できる制限付きWi-Fiネットワークに同時に接続できます。
アプリは、 WifiManager#isStaConcurrencyForRestrictedConnectionsSupported()
APIを使用して、この関数がデバイスでサポートされているかどうかを確認できます。
デバイスがセカンダリ制限付きWi-Fiネットワークに接続できるようにするには、次の手順に従います。
setOemPaid
またはsetOemPrivate
をtrueに設定してWi-Fiネットワークの提案を追加します。ConnectivityManager
で、対応する機能を使用してNetworkRequest
を提出します。-
NET_CAPABILITY_OEM_PAID
のsetOemPaid
-
NET_CAPABILITY_OEM_PRIVATE
のsetOemPrivate
-
デバイスは、OEM有料またはOEMプライベート提案に一致するネットワークでスキャン結果を検出すると、セカンダリネットワークとして自動的に接続します。
制限付きインターネット接続の同時検証
この機能を検証するには、次のCTSおよびACTSテストを使用します。
- CTS:
MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
- ACTS:
WifiStaConcurrencyNetworkRequestTest
ベンダーWi-Fiチップのガイドライン
Wi-Fiチップベンダーの場合、Wi-Fi STA / STAの同時実行をサポートするには、次のガイドラインを使用してください。
Wi-Fiチップは、デュアル同時STA接続をサポートする必要があります。これは、以下をサポートすることを意味します。
- 各STAインターフェイスには、フレームワークによってプログラム可能な一意のMACがあります。
- セカンダリSTAインターフェイスは、動的に作成および破棄できます。
- 各STAは、異なるSSIDに接続できます(同じ帯域内または異なる帯域内のいずれか)。
- 各STAは、同じSSIDに接続できます(同じ帯域内または異なる帯域内のいずれか)。 2つのSTAを同じBSSIDに接続しないでください。
重要な機能は、インターフェイスごとに動作する必要があり、プライマリインターフェイスで使用できる必要があります。以下は、これらの重要な機能のリストです。
ローミングは、少なくともプライマリインターフェイス(
IWifiChip.setMultiStaPrimaryConnection()
を使用して設定)でサポートされている必要があります。ローミングが両方のインターフェイスでサポートされている場合、1つの接続に関する決定が、2番目の同時接続と衝突してはなりません。たとえば、一方のインターフェイスがもう一方の接続のBSSIDにローミングしてはなりません。APF(およびARPやNSなどの他のオフロード)は、少なくともプライマリインターフェイス(
IWifiChip.setMultiStaPrimaryConnection()
を使用して設定)でサポートされている必要があります。リンク層の統計は、インターフェイスごとに動作する必要があります。
以下は、さまざまな同時実行シナリオで推奨されるWi-Fiチップの実装です。
Wi-Fiチップは、フレームワークが現在の関数を指定するために次の定数のいずれかを使用して
IWifiChip.setMultiStaUseCase()
を呼び出すことを許可する必要があります。-
DUAL_STA_TRANSIENT_PREFER_PRIMARY
:Make-Before-Break機能を指定します。プライマリ接続の品質は、セカンダリ接続よりも優先する必要があります。 -
DUAL_STA_NON_TRANSIENT_UNBIASED
:ローカルのみの同時接続とインターネット接続、または制限付きインターネット接続の同時機能を指定します。両方の接続の品質を等しく優先する必要があります。
-
デュアルコンカレントSTAは、MCC、SCC、およびDBSの動作モードにつながる可能性があるため、フレームワークが
IWifiChip.setMultiStaUseCase()
を呼び出して機能を示す場合、ベンダーの実装は最適な無線構成を選択する必要があります。一般的なガイドラインは次のとおりです。- 可能な場合は、2x2 + 2x2DBSが推奨されます。
- 接続品質に過度の影響を与えるため、可能であれば1x1 + 1x1DBSは避けてください。代わりに、MCCをお勧めします。
- MCCのデューティサイクルは、さまざまな機能のためにドライバまたはファームウェアによって構成可能である必要があります。フレームワークはMCCのデューティサイクルを直接設定しませんが、
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent
を使用してこの情報を照会します。 MCCを使用する場合は、プライマリ接続とセカンダリ接続の間に次のデューティサイクルを使用することをお勧めします。
-
DUAL_STA_TRANSIENT_PREFER_PRIMARY
:70%がプライマリ、30%がセカンダリ。 -
DUAL_STA_NON_TRANSIENT_UNBIASED
:プライマリ50%、セカンダリ50%。
-