概要:
本文主要介紹基于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些毛病,還望大家多多包涵,并請及時向我反饋交換。謝謝!