最近要开始做wifi项目, 就顺便把google相关文档翻译了一下, 记录下学习历程.
Wi-Fi对等网络(Wi-Fi Peer-to-Peer)
Wifi对等网络允许具有Android4.0以上系统及配备了合适的硬件的设备通过wifi直接连接而不需要中间热点的支持.使用这些API,你可以查找和连接其他支持wifi-P2P设备,并能快速连接进行通讯,且通讯距离远远超过蓝牙.这对那些多人共享数据的设备及其有用,比例多人连机游戏,照片分享等.
Wifi-P2P APIs包含如下几个方面:
- Methods: WifiP2pManager类中定义了各种方法允许你去查找,请求和连接对等设备.
- Listeners: 当调用WifiP2pManger中的方法时,每个方法都接收一个特定的监听器作为参数,而监听器(Listeners)会通知你调用WifiP2pManager中的方法是否成功.
- Intents: 通知用户由WIFI-P2P框架检测到的具体事件的意图(Intents),诸如连接断开,发现新的对等设备.
你会经常同时使用APIs中的这三个主要组件的相关功能,比如,你可以使用discoverPeers()
中的监听器WifiP2pManager.ActionListener
去执行回调,以便在ActionListener.onSuccess()
和ActionListener.onFailure()
时得到通知.如果discoverPeers()
方法发现对等设备列表发生变化,会发出WIFI-P2P-PEERS-CHANGED-ACTION
意图的广播.
API总预览
WifiP2pManager类为用户和设备上的wifi硬件交互提供了各种方法,做诸如查找,连接对等设备.下面这些行为(actions)是可执行的:
表一 Wi-FiP2P方法
方法 | 释意 |
---|---|
initalize() | 注册wifi框架,这方法必须在其他wifi-p2p方法前调用 |
connect() | 开始让具有特定配置的设备开始点对点的连接(peer to peer) |
cancelConncet() | 取消所有进行中的点对点的群体协商 |
requestConnectInfo() | 请求设备的连接信息 |
createGroup() | 使用当前设备作为组所有者创建一个点对点的组 |
removeGroup() | 移除当前点对点的组群 |
requestGroupInfo() | 请求点对点组群信息 |
discoverPeers() | 初始化点的查找 |
requestPeers() | 请求当前已查到到的点群表里 |
WifiP2pManager方法能让你传递一个监听器,以便Wi-Fi框架能够通知
你activity调用者的状态,这些可用的监听器接口和相应的WifiP2pManager方法调用监听器如下表描述:
表一 Wi-FiP2P监听器
监听接口 | 相关行为(actions) |
---|---|
WifiP2pManager.ActionListener | connect(), cancelConnect(), createGroup(), removeGroup(), and discoverPeers() |
WifiP2pManager.ChannelListener | initialize() |
WifiP2pManager.ConnectionInfoListener | requestConnectInfo() |
WifiP2pManager.GroupInfoListener | requestGroupInfo() |
WifiP2pManager.PeerListListener | requestPeers() |
Wi-Fi P2P APIs定义了某些Wi-FiP2P事件发生发送广播的意图(Intents),诸如当一个新的peer被发现或者一个设备的wifi状态改变时发送的广播意图.你可以在你的应用中注册广播接收器去接收这些广播意图,这些意图如下表:
表三: Wi-FiP2P意图:
意图 | 描述 |
---|---|
WIFI_P2P_CONNECTION_CHANGED_ACTION | 当设备wifi连接状态改变发送的广播 |
WIFI_P2P_PEERS_CHANGED_ACTION | 调用discoverPeers()时发送的广播.如果在应用中处理这意图,你通常会调用requsetPeers()获取peers的更新列表 |
WIFI_P2P_STATE_CHANGED_ACTION | 当WifiP2P可用或者不可用时发送的广播 |
WIFI_P2P_THIS_DEVICE_CHANGED_ACTION | 当设备的详细信息改变,如设备的名称,发出的广播 |
为Wi-Fi P2P意图创建广播接收器
广播接收器可以接收来自android系统的发出的广播意图,以便你的应用程序能够为自己比较感兴趣的事件作出响应. 创建一个广播接受者处理wifi-p2p意图最基本的步骤如下:
- 创建一个类继承BroadcastReceiver类.对于该类的构造函数,最好传递wifip2pManager和WifiP2pManager.Channel两个参数,而且广播接受者会注册在需要的activity中. 如果有需要,这允许广播接受者发送更新信息,访问wifi硬件以及通讯频道.
- 在广播接受者中,在onReceive()方法可以检查你所有感兴趣的意图.实现任何必要的行为取决于所接受的意图.比如,如果广播接受者接受了WIFI_P2P_PEERS_CHANGED_ACTION意图,你便可以使用requsetPeers()方法获得当前已被查到的peers列表.
下面的代码会向你展示如何创建一个典型的广播接受者.这个广播接受者将一个WifiP2pManager对象和一个activity对象作为参数,并当广播接受者接收一个意图时使用这两个类去实现需要的行为(carry out needed
actions).
/**
* A BroadcastReceiver that notifies of important Wi-Fi p2p events.
*/
public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {
private WifiP2pManager mManager;
private Channel mChannel;