简介

当没有 Wi-Fi 访问点或互联网访问时,Android* 应用可能需要对等连接在两台或多台 Android* 设备之间建立连接。 比如,文件共享应用和多人游戏。

该功能可使用 NFC、蓝牙或 Wi-Fi 对等技术来实施。 特定案例中的首选技术需要根据所需的距离、连接速度、功耗和独特的技术特性来决定。

本文将对 Wi-Fi 对等技术进行评估。 Wi-Fi 对等(P2P)支持具备适当应用的 Android 4.0 或更高版本在没有接入点的情况下通过 Wi-Fi 彼此连接。 Android Wi-Fi P2P 框架符合 Wi-Fi Direct 标准。 一般情况下,Wi-Fi Direct 支持更快的速度和更远的距离,但是所需的功耗比蓝牙连接高。上一章研究了Android* Bullet 物理引擎移植至英特尔 架构详解

实施

本文将重点介绍在两台 Android 设备之间建立套接字连接的基本步骤。

如要使用 Wi-Fi P2P,应用必须将最低软件开发套件版本正确设置为 14,并在 AndroidManifest.xml 文件中申请如下许可:

  • ACCESS_WIFI_STATE

  • CHANGE_WIFI_STATE

  • ACCESS_NETWORK_STATE

  • CHANGE_NETWORK_STATE

  • INTERNET

应用需要调用WifiP2pManager对象的initialize()方法,以使用 Wi-Fi P2P 框架注册应用。 这种方法必须在执行 Wi-Fi P2P 操作前调用。

应用需要为以下 Wi-Fi P2P intent 创建和注册广播接收器:

  • WIFI_P2P_CONNECTION_CHANGED_ACTION

  • WIFI_P2P_PEERS_CHANGED_ACTION

  • WIFI_P2P_STATE_CHANGED_ACTION

  • WIFI_P2P_THIS_DEVICE_CHANGED_ACTION

执行以上步骤后,应用将能够在 WifiP2pManager 对象中调用 Wi-Fi P2P 方法,并接收 Wi-Fi P2P intent。 大部分的 WifiP2pManager 方法是异步的,因此开发人员需要向每种方法调用提供 listener 来获取状态和结果。

如要发现可用的 Wi-Fi P2P 设备,需要调用WifiP2pManager对象的discoverPeers()方法。 发现流程将会一直执行,知道设备打开 Wi-Fi P2P 连接或调用stopPeerDiscovery方法。

当应用接收WIFI_P2P_PEERS_CHANGED_ACTIONintent 时,使用 WifiP2pManager 对象的requestPeers()方法将能够获得发现的对等设备列表。

如要连接获取的对等设备列表中的某台设备,需要准备包含完整deviceAddress字段的WifiP2pConfig对象,并调用 WifiP2pManager 对象的connect()方法。

成功连接后,通过调用WifiP2pManager对象的requestConnectInfo()方法获取设备 IP 地址。

然后,使用 IP 地址创建一个 Socket 和 ServerSocket 对象。 使用标准的套接字接口执行通信。

以下是调用方法并接收 intent 以准备为 Wi-Fi P2P 设备建立连接的图表:

如要在两台 Android 设备之间建立 Wi-Fi P2P 连接,至少需要执行这些步骤。 应用应为所有 Wi-Fi P2P intent 和 listener 实施处理程序,以充分响应不同的事件,如连接丢失或 Wi-Fi 禁用。 请参阅 Android 文档,了解更多信息。


更多相关文章

  1. Android(安卓)API Guides---Near Field Communication
  2. Android菜鸟的成长笔记(4)——你真的理解了吗?
  3. android中基于网络和GPS的不同精度定位
  4. 一个现有Android工程作为组件加入到另一个Android工程最简便方法
  5. Android指纹解锁,更好的接入到应用中
  6. Android深入学习之各种隐私权限判断和获取方法总结
  7. Android拷贝工程不覆盖原工程的配置方法
  8. Android微信SDK API 调用教程
  9. Android(安卓)管理多个fragment(处理Activity被回收的情况)

随机推荐

  1. Android——文件存储
  2. 修改android框架代码
  3. 布局属性
  4. 安卓开发笔记(六)—— SQLite数据库与Conte
  5. 安卓-关于EditText的那些事......
  6. Android(安卓)BrocastReciver广播使用
  7. Android 与web的相互调用
  8. Android 自定义属性与xmlns
  9. 《Android深入透析》之Android事件分发机
  10. Android基础概念