17、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主要包含如下几部分。
<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设备。完成这项工作需要调用WifiP2pManager.discoverPeers方法。
mChannel = mManager.initialize(this, getMainLooper(), null);
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener()
{
// 成功发现周围有Wi-Fi Direct设备
@Override
public void onSuccess() {
...
}
// 未发现周围有Wi-Fi Direct设备
@Override
public void onFailure(int reasonCode) {
...
}
});
PeerListListener myPeerListListener;
...
if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { if (mManager != null)
{
// 异步获取可用的Wi-Fi Direct设备
mManager.requestPeers(mChannel, myPeerListListener);
}
} public interface PeerListListener
{
public void onPeersAvailable(WifiP2pDeviceList peers);
}
WifiP2pDevice device;
… … // 需要从设备列表中获取相应的设备(WifiP2pDevice对象)
// 创建WifiP2pConfig对象
WifiP2pConfig config = new WifiP2pConfig();
// 存储设备的MAC地址
config.deviceAddress = device.deviceAddress;
// 开始连接设备
mManager.connect(mChannel, config, new ActionListener() {
// 当成功连接设备后调用该方法
@Override
public void onSuccess() {
//success logic
}
连接设备失败后调用该方法
@Override
public void onFailure(int reason) {
//failure logic
}
});
WifiP2pManager. requestConnectionInfo(...) public void requestConnectionInfo(Channel c, ConnectionInfoListener listener); public interface ConnectionInfoListener
{
public void onConnectionInfoAvailable(WifiP2pInfo info);
} WifiP2pInfo.groupOwnerAddress.getHostAddress 客户端用Socket连接、服务端用ServerSocket.accept等待客户端连接
17、Wi-Fi Direct的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之17、ABP应用层——参数有效性验证
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之17.ABP应用层——参数有效性验证 ABP是“ASP.NET Boilerplate Project (ASP. ...
- [安卓] 17、一个简单的例子学安卓侧滑设计——用开源slidingmenu
效果如下: 下面是工程结构: 整个工程包括android-v7.SlidingMenu-lib和主工程SlidingMenuTest部分 其中前两个作为lib,后一个为主工程 主工程包含两个lib工程 ...
- 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(2)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 17、Map接口及其常用子类(Hashtable、HashMap、WeakHashMap)
17.Map接口 Map没有继承Collection接口,Map提供key到value的映射.一个Map中不能包含相同的key,每个key只能映射一个value.Map接口提供3种集合的视图,Map的 ...
- 17、字符串转换整数 (atoi)
17.字符串转换整数 (atoi) 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非 ...
- mysql数据库优化课程---17、mysql索引优化
mysql数据库优化课程---17.mysql索引优化 一.总结 一句话总结:一些字段可能会使索引失效,比如like,or等 1.check表监测的使用场景是什么? 视图 视图建立在两个表上, 删除了 ...
- 17、bootStrap组件
1.bootStrap组件 无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. 2.字体图标 ①不要和其他图标混合使用 ②只能对内容为空的元素起作用 3.下拉菜单 <di ...
- 第3节 hive高级用法:16、17、18
第3节 hive高级用法:16.hive当中常用的几种数据存储格式对比:17.存储方式与压缩格式相结合:18.总结 hive当中的数据存储格式: 行式存储:textFile sequenceFile ...
- 17、生命周期-BeanPostProcessor在Spring底层的使用
17.生命周期-BeanPostProcessor在Spring底层的使用 bean赋值.注入其他组件.@Autowired注解.生命周期注解.@Async --都是 BeanPostProcesso ...
随机推荐
- QTreeView使用点点滴滴
QTreeView比较复杂,在这里记下所有用到的操作: ------------------------------------------------------------------------ ...
- Java笔记——面向切面编程(AOP模式)
原文:http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html Aspect Oriented Programming 面向切面 ...
- java Process的waitFor()
java Process的waitFor() 在编写Java程序时,有时候我们需要调用其他的诸如exe,shell这样的程序或脚本.在Java中提供了两种方法来启动其他程序: (1) 使用Runtim ...
- SSIS ->> 生成时间格式
有时我们需要生成一个文件,文件名的构成是当前时间的特定字符串格式,如yyyyMMddHHmmss 当前时间变成yyyyMMddHHmmss这个格式: (DT_WSTR,4) YEAR(GETDATE( ...
- 等宽格子堆砌 js
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【USACO】【section1.1】Your Ride Is Here
以前的账号忘记了,只能从头了. 入门题不解释,就是sumg和sumc初始值置1不能置0.开始享用一个循环计算出sumg和sumc,其实两个数组最大程度为6,节省不了什么时间. /*ID:Moment1 ...
- js中indexOF和lastIndexOf
indexOFindexOf() 方法返回某个指定的字符串值在字符串中首次出现的位置(从左向右).没有匹配的则返回-1,否则返回首次出现位置的字符串的下标值. var src="images ...
- 在linux系统下检查postgresql数据库安装,登录数据库及简单的查看数据库
1. 检查Linux系统是否安装数据库 首先查看自己的系统是否安装了postgresql数据库命令如下: rpm -qa | grep postgresql 如果没有显示查询结果(如下图所示)说 ...
- JAVA中的内部类使用总结
1) 内部类的优点是:内部类可以访问外部类的私有成员变量,而不需要new外部类的对象. 2) 内部类又分为:静态内部类.匿名内部类.局部内部类.成员内部类. 3) ...
- Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory
Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...