概要:
本文主要介绍基于Android原生WiFidirect封装的jar包。其中实现的要点有:
1,IP列表管理;
2,一行代码配置WiFidirect;
3,实现了文本,文件,buffer的通信传递;
4,自动连接与恢复(当应用强制退出后,再次进入的自动连接过程)。
以上4点都是原生WiFidirect未实现的,相信对想基于WiFidirect进行开发的朋友会有所帮助。

想必对WiFidirect有些了解的朋友都知道,WiFidirect在Android4.0后得以支持,并且传递数度,距离都远好于WiFi热点与蓝牙,并且开启WiFidirect不影响正常的wifi上网。做近场通信绝对是个好东西!

为了方便以后的开发,这里本人将整个WiFidirect通信工作从WiFidirect的开启、搜索、连接、传递信息都进行了封装。基本做到了在项目中以极少的代码较好的使用WiFidirect进行通信。这里笔者也分享给大家。

正文:

1,系统功能描述:

本SDK最终目的就是完成通信,下图能很好的说明(图中结构仅供参考)。

android wifi 状态检测 android wifi direct_通信


2,接入与配置:

a,下载SDKjia包  ; b,导入到项目中(FriendMusic为demo项目);

android wifi 状态检测 android wifi direct_android_02


c,初始化配置;

(1)WifiDirectManager.getInstance().init() // 初始化SDK

(2)WifiDirectManager.getInstance().setFileSaveDir() //设置缓存路径

具体代码如下:

WifiDirectManager.getInstance().init(getActivity(), new OnPeersDataChangeListener() {//设备变化通知接口
            @Override
            public void onPeersDataChange() {
                //周围设备发生改变
            }
        }, new OnGroupListChangeListener() {
            @Override

            public void onGroupListChange() {
			  //组内设备(已连接设备)发生改变 
           }

        }, new OnReceiveDataListener() {//数据接收接 其中MyWifiP2pDevice 是指该数据来源设备
            @Override
	            public void onReceiveText(final String text, final MyWifiP2pDevice myWifiP2pDevice) {                      
	            //收到文本消息
	            }

            @Override
            public void onReceiveByte(final byte[] bytes, MyWifiP2pDevice myWifiP2pDevice) {    
                 //收到byte数组

                 }

            @Override
            public void onReceiveFile(final String s,final MyWifiP2pDevice myWifiP2pDevice,final String tag) {
                //收到文件 s为本地文件存储路径
                    
            }
        });
        WifiDirectManager.getInstance().setFileSaveDir(Environment.getExternalStorageDirectory()+"/FriendMusic/musicCache");//设置文件缓存路径

3,使用:
开启WiFidirect:

WifiDirectManager.getInstance().open();

关闭WiFidirect:

WifiDirectManager.getInstance().close();

搜索周围设备:

WifiDirectManager.getInstance().startSearch();//搜索结果将通过OnPeersDataChangeListener监听器触发

在OnPeersDataChangeListener触发后即可调用下面方法更新设备列表。
//获取周围设备:

WifiDirectManager.getInstance().getPeers();//返回值是ArrayList<MyWifiDirectDevice> 列表

获取组中设备

WifiDirectManager.getInstance().getGroup();//返回值是ArrayList<MyWifiDirectDevice> 列表

连接设备
在搜索完成后会得到周围设备列表对象,这里传入任意一设备对象即可邀请其加入组。

WifiDirectManager.getInstance().addGroups(myWifiP2pDevice);

发送文本消息:

WifiDirectManager.getInstance().sendTextByDevice(wifiP2pDevice,"msg");//传入对方设备对象以及文本类容

发送文件:

WifiDirectManager.getInstance().sendFileByDevice(wifiP2pDevice,"file_path","filetag");//传入设备对象,文件路径,以及文件标签。其中文件标签是为了方面接收方在收到文件时可以对文件做基本的判断,由用户自定义。

发送byte数组:

WifiDirectManager.getInstance().sendBufferByDevice(wifiP2pDevice,new byte[10]);

4,总结:
根据本SDK本人制作了一个demo项目供大家参考。基于WiFidirect的音乐播放器,在连接后能够查看好友的手机音乐歌单,能控制对方设备进行播放(基于json文本传输),并且能在自己设备上播放好友设备的歌曲(基于文件传输)。个人觉得也是一款好玩的音乐app,适合好友之间一起玩。详情可查看下一篇博客 基于WiFidirect的音乐播放器

下载地址:https://github.com/coyclei/FriendMusic2018 笔者能力有限,SDK中难免会出现一些错误,还望大家多多包涵,并请及时向我反馈交流。谢谢!