17、Wi-Fi Direct

Wi-Fi Direct简介

从Android4.0(API Level=14)开始,允许通过Wi-Fi模块在两个移动设备之间建立直接连接(这种技术称为Wi-Fi Direct),这种连接不需要无线路由作为中介,而只是像蓝牙一样在两个设备之间直接建立的数据传输通道。在Android SDK中提供了一些API,通过这些API可以发现其它支持Wi-Fi Direct的设备,也可以接收其它设备的Wi-Fi Direct请求。在Wi-Fi Direct出现之前,通常使用蓝牙或利用无线路由连接多部Android设备,蓝牙的有效距离比较短,而且传输速率不如Wi-Fi。不过有了Wi-Fi Direct后,两部设备可以直接连接,既方便又快速,非常适合数据分享。

Wi-Fi Direct的核心API

Wi-Fi Direct API主要包含如下几部分。

# WifiP2pManager类。该类中提供了允许用户发现、请求和连接其它支持Wi-Fi Direct设备的API。

# 用于监听Wi-Fi Direct请求的广播接收器。

# 被Wi-Fi Direct框架检测到的事件通知,例如,终止连接、发现新的Wi-Fi Direct设备等。

Wi-Fi Direct广播接收器

# WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION:检测Wi-Fi是否可用,并且将检测结果通知相应的窗口。

# WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION:调用WifiP2pManager.requestPeers方法获取成功连接的设备列表。

# WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION:响应Wi-Fi连接状态(连接或断开)。

# WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION:响应设备的Wi-Fi状态变化。

广播接收器的授权

<uses-sdk android:minSdkVersion="14" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

发现Wi-Fi Direct设备

使用Wi-Fi Direct进行通信,首先要搜索周围有没有其它的Wi-Fi Direct设备。完成这项工作需要调用WifiP2pManager.discoverPeers方法。

 1 mChannel = mManager.initialize(this, getMainLooper(), null);
 2 mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener()
 3 {
 4     //  成功发现周围有Wi-Fi Direct设备
 5     @Override
 6     public void onSuccess() {
 7         ...
 8     }
 9     //  未发现周围有Wi-Fi Direct设备
10     @Override
11     public void onFailure(int reasonCode) {
12         ...
13     }
14 });
 1 PeerListListener myPeerListListener;
 2 ...
 3 if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
 4
 5 if (mManager != null)
 6 {
 7     //  异步获取可用的Wi-Fi Direct设备
 8         mManager.requestPeers(mChannel, myPeerListListener);
 9     }
10 }
11
12 public interface PeerListListener
13 {
14      public void onPeersAvailable(WifiP2pDeviceList peers);
15 }

连接Wi-Fi设备

 1 WifiP2pDevice device;
 2 … … //  需要从设备列表中获取相应的设备(WifiP2pDevice对象)
 3 //  创建WifiP2pConfig对象
 4 WifiP2pConfig config = new WifiP2pConfig();
 5 //  存储设备的MAC地址
 6 config.deviceAddress = device.deviceAddress;
 7 //  开始连接设备
 8 mManager.connect(mChannel, config, new ActionListener() {
 9     //  当成功连接设备后调用该方法
10     @Override
11     public void onSuccess() {
12         //success logic
13     }
14     连接设备失败后调用该方法
15     @Override
16     public void onFailure(int reason) {
17         //failure logic
18     }
19 });

数据传输

 1 WifiP2pManager. requestConnectionInfo(...)
 2
 3 public void requestConnectionInfo(Channel c, ConnectionInfoListener listener);
 4
 5
 6 public interface ConnectionInfoListener
 7 {
 8     public void onConnectionInfoAvailable(WifiP2pInfo info);
 9 }
10
11
12 WifiP2pInfo.groupOwnerAddress.getHostAddress
13
14 客户端用Socket连接、服务端用ServerSocket.accept等待客户端连接

17、Wi-Fi Direct

时间: 2024-10-10 12:20:32

17、Wi-Fi Direct的相关文章

《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(2)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

17、Cocos2dx 3.0游戏开发找小三之内置的常用层:三剑客LayerColor、LayerGradient、Menu

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30477587 为了方便游戏开发者,Cocos2d-x 内置了 3 种特殊的 Layer: 具体如下所示: LayerColor:一个单纯的实心色块. LayerGradient:一个色块,但可以设置两种颜色的渐变效果. Menu:十分常用的游戏菜单. LayerColor 与 与 LayerGradient 这两个层十分简单,都仅仅包含一个色块. 不同

[安卓] 17、一个简单的例子学安卓侧滑设计——用开源slidingmenu

效果如下: 下面是工程结构: 整个工程包括android-v7.SlidingMenu-lib和主工程SlidingMenuTest部分 其中前两个作为lib,后一个为主工程 主工程包含两个lib工程方法为:(易错点) 选择主工程属性 而主工程包括: 逻辑部分:(SRC)其中MainActivity.java是主入口,在主入口内调用部分函数可加载MainFragment.java所对应的Fragment 而CircleImageView.java主要负责使头像呈圆形用的 显示部分:(layout

17、如何对字符串进行左, 右, 居中对齐 18、如何去掉字符串中不需要的字符 19、如何读写文本文件 20、如何处理二进制文件 21、如何设置文件的缓冲

17.如何对字符串进行左, 右, 居中对齐 info = "GBK" print(info.ljust(20)) print(info.ljust(20,'#')) print(info.rjust(20,'#')) print(info.center(20,"#")) print(format(info,'<20')) print(format(info,'>20')) print(format(info,'^20')) result: GBK GBK

17、蛤蟆的数据结构笔记之十七链表实现多项式

17.蛤蟆的数据结构笔记之十七链表实现多项式 本篇名言:"人生不是一种享乐,而是一桩十分沉重的工作."列夫托尔斯泰. 栈的应用在上面中基本覆盖了很多,接下去我们来补充下链表在多项式实现中的例子. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/46653857 1.  多项式 这个问题是符号多项式的处理问题,已经成为表处理中的一个经典例子.把每项表示为一个结点,该结点包括系数域.指数域和指向下一项的指针.类型申明如下

【ThinkingInC++】17、使用函数指针

/** * 功能:使用函数指针 * 时间:2014年8月14日07:23:42 * 作者:cutter_point */ #include<iostream> #include<cstdlib> using namespace std; void fun1() { cout<<"The function fun1 called.."<<endl; } int main() { void (*fp)(); //一个指向不需要参数的函数返回v

西安电子地图下载 来自谷歌电子地图库 地图展示15、17、19级

西安电子地图下载 来自谷歌电子地图库 地图展示15.17.19级 一般来说商业用图几乎相同就是17级左右,提供的下载全然满足大多数人浏览使用,假设用于旅行外出当然级数越高越好,假设是驴行,那就更有必要下载完整的地图以作不时之需. 百度网盘下载资源:http://pan.baidu.com/s/1gdteIhP 谷歌电子地图下载器:http://www.arceyes.com/download/sggm.rar 百度电子地图下载器:http://www.arceyes.com/download/s

杭州电子地图 高清15、17、19级别 谷歌电子地图资源

杭州电子地图.下载与谷歌电子地图库.最高级别19级.商用级别17级别.预览图为15.17.19级别,百度网盘打开下载,假设须要很多其它电子地图请下载专业谷歌电子地图下载器. 百度网盘下载资源:http://pan.baidu.com/s/1eQu2vVc 谷歌电子地图下载器:http://www.arceyes.com/download/sggm.rar 百度电子地图下载器:http://www.arceyes.com/download/sgbdm.rar 万能地图下载器,下载包含电子地图.卫星