WifiP2pManagerService

WLAN 直连(对等连接或 P2P)概览  |  Connectivity  |  Android Developers

WLAN 扫描流程

扫描流程分为三步:

  1. 为 SCAN_RESULTS_AVAILABLE_ACTION 注册一个广播监听器,系统会在完成扫描请求时调用此监听器,提供其成功/失败状态。对于搭载 Android 10(API 级别 29)及更高版本的设备,系统将针对平台或其他应用在设备上执行的所有完整 WLAN 扫描发送此广播。应用可以使用广播被动监听设备上所有扫描的完成情况,无需发出自己的扫描。

  2. 使用 WifiManager.startScan() 请求扫描。请务必检查方法的返回状态,因为调用可能因以下任一原因失败:

    • 由于短时间扫描过多,扫描请求可能遭到节流。
    • 设备处于空闲状态,扫描已停用。
    • WLAN 硬件报告扫描失败。
  3. 使用 WifiManager.getScanResults() 获取扫描结果。系统返回的扫描结果为最近更新的结果,但如果当前扫描尚未完成或成功,可能会返回以前扫描的结果。也就是说,如果在收到成功的 SCAN_RESULTS_AVAILABLE_ACTION 广播前调用此方法,您可能会获得较旧的扫描结果。

注意:需要开启定位和wifi的权限

  可让具有相应硬件的设备通过 Wi-Fi 直接相互连接,而无需中间接入点。借助这些 API,您可以发现并连接到其他设备(当每台设备支持 Wi-Fi 点对点时),然后通过高速连接进行通信,这些距离远远超过蓝牙连接。这对于在用户之间共享数据的应用非常有用,例如多人游戏或照片共享应用。

WLAN P2P API 包含以下主要部分:

  • 可让您发现、请求和连接到对等方的方法,这些方法在 WifiP2pManager 类中定义。
  • 可让您收到关于 WifiP2pManager 方法调用成功或失败的通知的监听器。调用 WifiP2pManager 方法时,每个方法都可以接收作为参数传入的特定监听器。
  • 用于通知您 Wi-Fi 点对点框架检测到的特定事件(例如连接断开或新发现对等设备)的 intent。

您会经常一起使用 API 的这三个主要组件。例如,您可以为对 discoverPeers() 的调用提供 WifiP2pManager.ActionListener,以便 ActionListener.onSuccess() 和 ActionListener.onFailure() 方法可以通知您。如果 discoverPeers() 方法发现对等设备列表已更改,系统也会广播 WIFI_P2P_PEERS_CHANGED_ACTION intent。

发现对等设备

调用 discoverPeers() 以检测范围内且可用于连接的可用对等设备。对此函数的调用是异步进行的,如果您创建了 WifiP2pManager.ActionListener,系统会使用 onSuccess() 和 onFailure() 将成功或失败传达给应用。onSuccess() 方法只会通知您发现过程已成功,而不会提供它发现的实际对等设备(如果有)的任何信息。以下代码示例展示了如何进行设置

 

连接到对等设备

获得可能对等设备的列表并选择要连接的设备后,请调用 connect() 方法来连接到该设备。此方法调用需要 WifiP2pConfig 对象,其中包含要连接的设备的相关信息。WifiP2pManager.ActionListener 可以通知您连接成功或失败。以下代码展示了如何创建与设备的连接。

传输数据

 

建立连接后,您可以使用套接字在设备之间传输数据。数据传输的基本步骤如下:

  1. 创建 ServerSocket。此套接字会等待来自指定端口上的客户端的连接,并阻塞直至连接发生,因此请在后台线程中执行此操作。
  2. 创建客户端 Socket。客户端使用服务器套接字的 IP 地址和端口连接到服务器设备。
  3. 将数据从客户端发送到服务器。当客户端套接字成功连接到服务器套接字后,您可以使用字节流将数据从客户端发送到服务器。
  4. 服务器套接字等待客户端连接(使用 accept() 方法)。此调用会阻塞,直到客户端连接为止,因此请在另一个线程中调用。发生连接时,服务器设备可以从客户端接收数据。

 

  • 19
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值