Android WLAN 直连

WLAN 直连功能又称“Wi-Fi 点对点”,它允许支持设备直接使用 WLAN 直连协议发现其他设备并与之互连,无需连接到互联网或移动网络。此功能是基于 Wi-Fi 联盟 (WFA) Wi-Fi 直连规范构建的,它支持在断开网络的情况下,在可信设备和应用之间共享高吞吐量数据。

示例和源代码

要使用此功能,设备制造商必须实现 Wi-Fi 供应商和客户端 HAL 接口。

在 Android 13 中,客户端接口使用 AIDL 进行 HAL 定义。在 Android 14 及更高版本中,供应商 HAL 接口使用 AIDL 进行定义。在 Android 12 及更低版本中,客户端和供应商 HAL 接口使用 HIDL 进行定义。

以下是采用 Wi-Fi 直连功能所需的 Wi-Fi HAL surface:

  • hardware/interfaces/wifi/aidlhardware/interfaces/wifi/1.3 或更高版本
  • hardware/interfaces/wifi/supplicant/aidlhardware/interfaces/wifi/supplicant/1.2 或更高版本

实现

设备制造商需要提供框架和 HAL/固件支持:

  • 框架:
    • AOSP 代码
    • 启用 Wi-Fi 直连:需要功能标记
  • Wi-Fi 直连(点对点)HAL 支持(意味着固件支持)

为实现此功能,设备制造商需采用 Wi-Fi HIDL 或 AIDL 接口,并为 Wi-Fi 直连启用功能标志。在位于 device/<oem>/<device> 的 device.mk 中,修改 PRODUCT_COPY_FILES 环境变量,以便支持 Wi-Fi 直连功能:

```
PRODUCT_COPY_FILES +=
frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml
```

支持 Wi-Fi 直连的所有其他要求都包含在 AOSP 中。

随机分配 MAC 地址

Android 要求 WLAN 直连设备地址和接口地址是随机分配的。它们必须不同于设备的真实 MAC 地址,并且必须满足以下要求:

  • 如果没有保存任何永久性群组,则 WLAN 直连设备地址必须是在创建接口时随机分配的;否则设备地址必须继续使用最后生成的 MAC 地址。
  • 每次建立连接时,Wi-Fi 直连接口地址(也称为群组地址)必须是随机分配的。

Wi-Fi 直连随机分配 MAC 地址是在“wpa_supplicant”中实现的,并由两项配置控制:p2p_device_random_mac_addr 和 p2p_interface_random_mac_addr

要启用此功能,设备制造商必须满足以下条件:

  • 实现 Wi-Fi 客户端 ISupplicantP2pIface::setMacRandomization API。根据已实现的接口,相应位置如下:
    • hardware/interface/wifi/supplicant/1.2(适用于 HIDL)
    • hardware/interface/wifi/supplicant/aidl(适用于 AIDL)
  • 在设备自定义叠加层中将 config_wifi_p2p_mac_randomization_supported 设置为“true”。

验证

Android 提供了一组单元测试、集成测试(Android Connectivity Test Suite 或 ACTS)、兼容性测试套件 (CTS) 测试和 CTS 验证程序测试,以验证 Wi-Fi 直连功能。您也可以使用供应商测试套件 (VTS) 来测试 Wi-Fi 直连功能。

单元测试

使用以下测试验证 WLAN 直连软件包。

服务测试:

atest com.android.server.wifi.p2p

Manager 测试:

atest android.net.wifi.p2p

集成测试 (ACTS)

ACTS Wi-Fi 直连测试套件(位于 tools/test/connectivity/acts_tests/tests/google/wifi/p2p)实现 Wi-Fi 直连的功能测试。

兼容性测试套件 (CTS) 测试

使用 CTS 测试来验证 Wi-Fi 直连功能。CTS 会检测何时启用了这项功能,并会自动包含相关测试。

要触发 CTS 测试,请运行以下命令:

% atest android.net.wifi.p2p.cts

CTS 验证程序测试

CTS 验证程序测试使用以下两种设备验证 WLAN 直连行为:测试设备和已知良好的设备。如需运行测试,请打开 CTS 验证程序并转到“Wi-Fi 直连测试”部分。

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为AI助手,我无法为您提供具体的 Android Studio 代码编写教程。以下是一些可以帮助您编写 WLAN 直连应用的步骤和建议: 步骤1:了解 WLAN 直连 WLAN 直连是一种无需路由器的连接方式,可以让设备直接相互连接。在 WLAN 直连连接中,一个设备充当热点,另一个设备连接该热点。这种连接方式通常用于设备之间的文件共享和数据传输。 步骤2:创建新项目 在 Android Studio 中创建一个新项目,选择“Empty Activity”模板。 步骤3:添加权限 在 AndroidManifest.xml 文件中添加以下权限: ``` <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> ``` 步骤4:创建 UI 在 MainActivity.java 文件中编写代码以创建用户界面。您可以使用 TextView、EditText、Button 等视图组件来实现用户界面。 步骤5:实现 WLAN 直连功能 在 MainActivity.java 文件中编写代码以实现 WLAN 直连功能。以下是一个简单的示例代码: ``` WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.SSID = "WLAN直连热点名称"; wifiConfiguration.preSharedKey = "WLAN直连密码"; wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); int netId = wifiManager.addNetwork(wifiConfiguration); wifiManager.disconnect(); wifiManager.enableNetwork(netId, true); wifiManager.reconnect(); ``` 此代码将创建一个 WLAN 直连配置文件,并将该配置文件添加到设备的 Wi-Fi 管理器中。然后,它会断开当前的 Wi-Fi 连接,连接到 WLAN 直连热点,并重新连接到该热点。 步骤6:测试应用 在模拟器或连接到实际设备上运行应用程序。在应用程序中输入 WLAN 直连热点的名称和密码,然后单击“连接”按钮。如果一切正常,应用程序将连接到 WLAN 直连热点。 总结 这是一个简单的 WLAN 直连应用程序的示例。您可以根据需要修改和扩展此代码。请注意,WLAN 直连功能在不同的 Android 版本和设备上可能会有所不同。因此,您可能需要进行设备和版本的测试以确保应用程序在所有设备上都能正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值