Android は、Wi-Fi アクセス ポイントとローカル専用 Wi-Fi アクセス ポイントを介したテザリングを含む、Wi-Fi アクセス ポイント(Soft AP)をサポートしています。
Soft AP 機能により、以下の設定が可能になります。
- SSID と BSSID
- セキュリティの種類(WPA3 を含む)
- ステルス SSID
- 運用バンドと運用チャネル(ACS を含む)
- 許可するクライアント数の上限
- 自動シャットダウンのタイムアウト値
- 関連付けられたデバイスのユーザー制御を可能にする許可リストとブロックリスト
- AP の BSSID に対する MAC ランダム化のレベル
- 802.11ax と 802.11be
デバイス制御の可用性はデバイス機能によって決まります。Android 11 では、このような機能を取得する API が導入されています。デバイス メーカーがオーバーレイを使用して基本デバイス機能を指定することもできます。
API の一部はシステム API で、システムの設定アプリのみがアクセスできるように権限によって制限されています。
アクセス ポイント API を使ったアプリを開発する
テザリングされた Wi-Fi アクセス ポイントのデフォルト実装は AOSP 設定アプリによって提供されますが、Soft AP 設定のすべての API を利用しているとは限りません。
アクセス ポイントまたはローカル専用アクセス ポイントを介したテザリングをサポートするには、以下の関数を実行する必要があります。
テザリングされたアクセス ポイントの場合は
WifiManager#registerSoftApCallback
、ローカル専用アクセス ポイントの場合はWifiManager#registerLocalOnlyHotspotSoftApCallback
を使用して、デバイスの機能を取得するコールバックを登録します。SoftApCallback
コールバックには、次のメソッドが用意されています。SoftApCallback#onCapabilityChanged
: デバイス機能に関する情報(サポートされるクライアントの最大数、SAE または ACS がサポートされるかどうかなど)を提供します。SoftApCallback#onInfoChanged
: バンドと周波数の情報を含む、実行中の Soft AP に関する情報を提供します(開始時のみ有効)。SoftApCallback#onConnectedClientsChanged
: 接続されているクライアントのリストを提供します。各クライアントの MAC アドレスを取得できます。IP 情報を取得するには、TetheringEventCallback#onClientsChanged
コールバックを使用します。SoftApCallback#onStateChanged
: Soft AP が有効または無効になったときに状態の更新情報を提供します。SoftApCallback#onBlockedClientConnecting
: ブロックされたクライアントの情報をブロックされた理由を含めて提供します。理由は、デバイスがサポートできるクライアントの最大数に達したか、クライアントの接続が明示的に承認されていないかのいずれかです。
テザリングされたアクセス ポイントの場合:
WifiManager#setSoftApConfiguration
メソッドを呼び出し、SoftApConfiguration
インスタンスを指定して、テザリング用の Soft AP 構成を設定します。SoftApConfiguration.Builder
クラスを使用してSoftApConfiguration
を構築します。TetheringManager#startTethering
でテザリング メソッドを呼び出してテザリングを開始します。
ローカル専用アクセス ポイントの場合:
- 特定のソフト AP 構成のローカル専用アクセス ポイントを開始するには、
WifiManager#startLocalOnlyHotspot
メソッドを呼び出します。
許可リストとブロックリストを実装する
一般的に、携帯通信会社は、Soft AP への関連付けを許可するデバイスの制御をユーザーに提供する必要があります。次に示すように、そのためのメカニズムはいくつかあります。
SoftApConfiguration.Builder#setMaxNumberOfClients
を使用して、Soft AP に関連付けることができるデバイスの最大数を制限します。デバイスがサポートするクライアントの最大数より小さい値を指定する必要があります。最大数はSoftApCapability#getMaxSupportedClients
から取得できます。許可リストとブロックリストを使用して動的な制御を提供します。
- Soft AP のデフォルト構成では、MAC アドレスが
SoftApConfiguration.Builder#setBlockedClientList
に追加されているデバイスを除くすべてのデバイスを Soft AP に関連付けることができます。 Soft AP 設定で
SoftApConfiguration.Builder#setClientControlByUserEnabled(true)
が指定されている場合は、許可リストが使用されます。- MAC アドレスが
SoftApConfiguration.Builder#setBlockedClientList
に含まれているすべてのデバイスは、関連付けがブロックされます。 - MAC アドレスが
SoftApConfiguration.Builder#setAllowedClientList
に含まれているすべてのデバイスは、関連付けが許可されます。 - その他のすべてのデバイス(つまり、MAC アドレスが許可リストにもブロックリストにも含まれていないデバイス)は関連付けがブロックされますが、
SoftApCallback#onBlockedClientConnecting
が呼び出されて、制御アプリ(つまり、設定アプリ)によるアクションの実行が許可されます。たとえば、ユーザーに確認を求め、ユーザーの操作に応じてデバイスを許可リストまたはブロックリストに追加するアクションが可能です。
- MAC アドレスが
デバイスが許可リスト機能を使用できるのは、この機能がデバイスでサポートされている場合のみです。デバイスでサポートされているかどうかは、
SoftApCapability#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
を使用して確認できます。- Soft AP のデフォルト構成では、MAC アドレスが
実装
デバイス メーカーがアクセス ポイントを介したテザリング、またはローカル専用アクセス ポイントをサポートするには、設定アプリ、フレームワーク、HAL / ファームウェアのサポートを提供する必要があります。
設定アプリ: AOSP 設定アプリは、SSID とセキュリティ認証情報を使用してテザリング アクセス ポイントを構成するためのベースラインを提供します。このコードはそのまま使用することも、アクセス ポイント API を使ったアプリの開発で説明されている追加機能を提供するために変更することもできます。
フレームワーク: AOSP フレームワークのコードでは、アクセス ポイント API を使ったアプリの開発で説明されているすべての機能がサポートされています。
アクセス ポイントの HAL / ファームウェア: HIDL IHostapd.hal バージョン 1.2 以降または AIDL IHostapd.aidl。
カスタマイズ
デバイス メーカーが実装をカスタマイズするには、packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
に記載されている以下のオーバーレイと携帯通信会社構成を設定する必要があります。
config_wifiFrameworkSoftApShutDownTimeoutMilliseconds
: デフォルトのシャットダウン タイムアウト間隔。SoftApConfiguration#setAutoShutdownEnabled
が有効になっている場合にのみ有効です。SoftApConfiguration#setShutdownTimeoutMillis
でオーバーライドできます。config_wifiHardwareSoftapMaxClientCount
: サポートされているクライアントの最大数のハードウェア制限。デバイスがサポートするクライアントの最大数は、ハードウェアと携帯通信会社の制約の最小要件です(CarrierConfigManager.Wifi#KEY_HOTSPOT_MAX_CLIENT_COUNT
で指定されます)。最終結果はSoftApCapabilities#getMaxSupportedClients
でアプリに提供されます。config_wifiSofapClientForceDisconnectSupported
: デバイスが強制的にクライアントの接続を切断できるかどうか。許可リストとブロックリストを有効にする場合は必須です。SoftApCapabilities#areFeaturesSupported(SOFTAP_FEATURE_CLIENT_FORCE_DISCONNECT)
を通じて制御アプリ(設定アプリ)に通知されます。- (13 から利用可能)
config_wifiSoftapPassphraseAsciiEncodableCheck
: Soft AP のパスフレーズが ASCII としてエンコード可能であることが必要かどうか。 config_wifiSoftapAutoUpgradeToBridgedConfigWhenSupported
: 新しいデバイスがサポートされている場合に、クラウド構成の復元中に帯域設定構成をデュアルバンドに自動的にアップグレードするかどうか。- (13 から利用可能)
config_wifiSoftapAutoAppendLowerBandsToBandConfigurationEnabled
: 共存の処理を回避するために、フレームワークが帯域構成に低帯域を自動的に付加するかどうか。 config_wifiSoftApDynamicCountryCodeUpdateSupported
: AP モードにおける国コードの動的な更新がデバイスでサポートされるかどうか。- チャネル サポート:
config_wifiSoftap2gChannelList
、config_wifiSoftap5gChannelList
、config_wifiSoftap6gChannelList
、config_wifiSoftap60gChannelList
。 - 新しいデバイスでアクセス ポイント構成を復元する際に、対応するエントリをデフォルトにリセットするかどうかを指定する復元サポート:
config_wifiSoftapResetChannelConfig
、config_wifiSoftapResetHiddenConfig
、config_wifiSoftapResetUserControlConfig
、config_wifiSoftapResetAutoShutdownTimerConfig
、config_wifiSoftapResetMaxClientSettingConfig
。これらはデフォルトではtrue
に設定されます。つまり、値はリセットされます。このことは、新しいデバイスが構成をサポートしていない場合に重要です。 - ハードウェア機能:
config_wifi_softap_acs_supported
config_wifi_softap_sae_supported
- (13 から利用可能)
config_wifiSoftapOweTransitionSupported
- (13 から利用可能)
config_wifiSoftapOweSupported
config_wifi_softap_ieee80211ac_supported
config_wifiSoftapIeee80211axSupported
- (13 から利用可能)
config_wifiSoftapIeee80211beSupported
config_wifiSoftapMacAddressCustomizationSupported
config_wifiSoftapHeSuBeamformerSupported
config_wifiSoftapHeSuBeamformeeSupported
config_wifiSoftapHeMuBeamformerSupported
config_wifiSoftapHeTwtSupported
config_wifiSoftap24ghzSupported
config_wifiSoftap5ghzSupported
config_wifiSoftap6ghzSupported
config_wifiSoftap60ghzSupported
config_wifiSoftapAcsIncludeDfs
検証
Android には、アクセス ポイント機能を検証するための単体テストと互換性テストスイート(CTS)テストのセットが用意されています。アクセス ポイント機能は、ベンダー テストスイート(VTS)でもテストできます。
単体テスト
以下のテストにより、アクセス ポイント パッケージを検証します。
サービステスト:
atest packages/modules/Wifi/service/tests/wifitests/
マネージャー テスト:
atest packages/modules/Wifi/framework/tests/
互換性テストスイート(CTS)によるテスト
CTS テストにより、アクセス ポイント機能を検証します。CTS は機能が有効になったときに検出して、関連付けられたテストを自動的に組み込みます。
CTS テストをトリガーするには、次のコマンドを実行します。
atest android.net.wifi.cts.WifiManagerTest
ベンダー テストスイート(VTS)
HIDL インターフェースが実装されている場合は、次のコマンドを実行します。
atest VtsHalWifiHostapdV1_2Target
AIDL インターフェースが実装されている場合は、次のコマンドを実行します。
atest VtsHalHostapdTargetTest