Android WiFi P2P

概述:

Wi-Fi peer-to-peer(P2P)让Android4.0及之后版本的设备可以使用合适的硬件来通过WiFi直接连接对方而不用中间访问点. 使用这些API, 我们可以发现和连接其它支持WiFi P2P的设备, 并可以跨越比蓝牙远的多的距离高速通信. 这对那些需要在用户间共享数据的APP很有用, 比如一个多用户游戏或者照片分享APP. WiFi P2P包含这些主要的部分:

l  可以让我们发现, 请求和连接的定义在WifiP2pManager类中的方法.

l  可以提醒我们WifiP2pManager方法调用成功或者失败的监听器. 当调用WifiP2pManager中的方法, 每个方法都传递收到一个指定的listener作为参数.

l  当WiFi P2Pframework检测到指定事件的时候通过intent提醒我们. 比如丢失连接或者发现了新的目标.

我们会经常一起使用这三个组件. 栗如, 可以提供一个WifiP2pManager.ActionListener给discoverPeers(), 这样就可以得到ActionListener.onSuccess()和ActionListener.onFailure()的提醒. 当discoverPeers()发现peer列表发生变化的时候会发出一个WIFI_P2P_PEERS_CHANGED_ACTION的intent广播.

API总览:

WifiP2pManager类提供了很多方法允许我们使用WiFi硬件来做比如发现和连接到其它设备的操作. 我们可以做这些事儿:

方法

描述

initialize()

注册APP到WiFi framework. 必须先于任何WiFi方法执行.

connect()

启动一个与指定配置的设备的P2P连接.

cancelConnect()

取消任何正在进行的P2P连接.

requestConnectInfo()

请求设备的连接信息.

createGroup()

通过当前设备作为一个组的拥有者创建一个P2P组.

removeGroup()

移除当前的P2P组.

requestGroupInfo()

请求P2P组信息.

discoverPeers()

初始化peer发现.

requestPeers()

请求当前发现的peer的列表.

WifiP2pManager中的方法可以接收监听器, 这样WiFi P2Pframework可以提醒我们的activity状态变化. 可用的监听器接口和相应的WifiP2pManager方法可以参考下表:

监听器接口

关联方法

WifiP2pManager.ActionListener

Connect(), cancelConnect(), createGroup(), removeGroup(), discoverPeers()

WifiP2pManager.ChannelListener

Initialize()

WifiP2pManager.ConnectionInfoListener

requestConnectInfo()

WifiP2pManager.GroupInfoListener

requestGroupInfo()

WifiP2pManager.PeerListListener

requestPeers()

WiFi P2P API还定义了一些广播的intent, 在WiFi P2P事件发生的时候会发送广播,比如当一个新的peer被发现或者设备的WiFi状态发生变化的时候. 我们可以注册接收这些intent来处理这些事件:

Intent

Description

WIFI_P2P_CONNECTION_CHANGED_ACTION

当设备WiFi连接状态改变的时候广播.

WIFI_P2P_PEERS_CHANGED_ACTION

当我们调用discoverPeers()时候广播. 如果我们处理了这个intent, 那么可能会经常调用requestPeers()来获得peer的列表更新peer的list.

WIFI_P2P_STATE_CHANGED_ACTION

WiFi P2P启动或者关闭的时候广播.

WIFI_P2P_ THIS_DEVICE_CHANGED_ACTION

当一个设备的详细信息发生变化的时候会广播, 比如设备的名字.

为WiFi P2P Intent创建一个Broadcast Receiver:

Broadcast receiver让我们可以接收Androidframework发出的广播, 这样我们的APP就可以响应我们感兴趣的事件了. 创建它的基础步骤是这样的:

1.      创建一个类, 继承自BroadcastReceiver类. 我们最常为其构造方法指定的参数是WifiP2pManager和WifiP2pManager.Channel. 这让broadcast receiver可以给activity发送更新, 就好像访问了WiFi硬件和通信通道一样.

2.      在broadcast receiver的onReceive()方法中检查感兴趣的intent. 比如如果broadcast receiver收到了一个WIFI_P2P_PEERS_CHANGED_ACTION intent, 我们就可以调用requestPeers()方法来得到当前发现的peer的列表.

下面的代码展示了如何创建一个典型的broadcast receiver. 它接收一个WifiP2pManager对象和一个activity作为参数, 并使用这俩类来处理感兴趣的intent:

/**
 * A BroadcastReceiver that notifies of important Wi-Fi p2p events.
 */

public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {

    private WifiP2pManager mManager;
    private Channel mChannel;
    private MyWiFiActivity mActivity;

    public WiFiDirectBroadcastReceiver(WifiP2pManager manager, Channel channel,
            MyWifiActivity activity) {
        super();
        this.mManager = manager;
        this.mChannel = channel;
        this.mActivity = activity;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

       

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值