程序员人生 网站导航

[置顶] Android WiFiDirect 一个jar包搞定一切

栏目:综合技术时间:2016-12-01 15:42:56

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

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

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

正文:
1,系统功能描写:
本SDK终究目的就是完成通讯,下图能很好的说明(图中结构仅供参考)。
这里写图片描述
2,接入与配置:
a,下载SDKjia包,地址:http://download.csdn.net/detail/coycleipenghui/9634551;
b,导入到项目中(FriendMusic为demo项目);
这里写图片描述
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> 列表

连接装备
在搜索完成后会得到周围装备列表对象,这里传入任意1装备对象便可约请其加入组。

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

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

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐