android wifi-direct 实操指南

如果你们只是想用,而不需要了解运作的的话直接用我上传到github的代码就好了,傻瓜式操作。 点击这里进入github


wifi-direct这个是什么东西,能搜索这种文章的人估计也清楚,我就不多说了,简单那的来说,就是对一个可以不启动热点,不用蓝牙,从而建立一个小型局域网的功能,在距离和速度方面也基本与wifi热点不差。废话不多说,直接开干。

基本实现工作流程

需要注意的是两台机器即需要同时处于搜索阶段才能获得对方的信息

获得wifip2p服务

(WifiP2pManager) activity.getSystemService(Context.WIFI_P2P_SERVICE);

初始化wifiP2P通道

WifiP2pManager.Channel wifiChannel = wifiP2pManager.initialize(...)

动态注册P2P的相关广播参数,并监听需要的事件()
//表明Wi-Fi对等网络(P2P)是否已经启用 
WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION
//表明可用的对等点的列表发生了改变 
WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION
//表示Wi-Fi对等网络的连接状态发生了改变 
WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION
//表示该设备的配置信息发生了改变
WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION

这里我们只用到WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION,因为这个我们可以用来获得设备列表

监听列表事件并获得设备列表
    public class BroadcaseWifiDirect extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i(tag, "broadcase.action=" + intent.getAction());
            switch (intent.getAction()) {
                ....
                case WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION: {
                    wifiP2pManager.requestPeers(wifiChannel, new WifiP2pManager.PeerListListener() {
                        //获得设备列表
                        @Override
                        public void onPeersAvailable(WifiP2pDeviceList wifiP2pDeviceList) {
                            Log.i(tag, "onPeersAvailable");
                            hzcWifiDirectListener.onGetDevicesList(wifiP2pDeviceList);
                        }
                    });
                }
                break;
            }
        }
    }
链接设备
    public void connectionDevice(final WifiP2pDevice device) {
        WifiP2pConfig config = new WifiP2pConfig();
        config.deviceAddress = device.deviceAddress;
        wifiP2pManager.connect(wifiChannel, config, new WifiP2pManager.ActionListener() {...}
        });
    }

接下来可以进行业务通讯了

你可能感兴趣的:(android,wifi)