更新记录

1.0.0(2021-08-25) 下载此版本

首次发布


平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 11.0 armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


安卓WiFi Direct原生插件

介绍

基于WiFi Direct标准实现无线网络中的设备无需通过无线路由器即可相互连接。支持WiFi Direct的功能包括:设备发现、服务注册与发现、一对一直连、一对多直连等。本插件封装了安卓android.net.wifi.p2p所有接口,对分散于各类的事件回调做统一的归整为一个监听回调方便应用处理事件。

限制

  1. 只支持安卓。

使用场景

  1. 在没有加入WiFi无线路由器网络的情况下实现设备的直接连接,手机与手机间自动互相发现建立连接,分享照片、音乐、视频、文件与交换信息等。
  2. 零配置实现手机动态发现智能设备。不需要事先配置设备的信息,手机可动态发现同一服务类型的所有设备并选择需要的设备建立连接。

使用前注意事项

使用前需对WiFi Direct的功能及网络模型有基本的了解,WiFi Direct只负责发现设备与服务,并在两者之间建立WiFi的直连网络(可以是一对一或一对多),连接建立后怎么传输数据就跟WiFi Direct无关了。可以在WiFi Direct的网络连接上使用任何基于以太网的协议,如TCP、UDP或是应用层协议http, ftp, WebSocket等。 WiFi Direct网络是基于星形模型,连接建立之前首先建立一个群组,群里有一个群主,其他都是组员,组员都与群主连接。如果群里只有两个成员,其中一个是群主另一个是组员。群组没有建立之前设备可互相发现(可看到WiFi网络发射范围内支持WiFi Direct的设备),设备可发布提供的服务描述信息方便在建立连接之前选择设备进行连接。设备发现后可知道对方的设备地址(MAC地址)加上服务描述信息(如果对方有发布)。设备选定后发起连接,连接建立时会自动创建群组。群主可由系统自动指定或是先表明是否要成为群主。连接建立后双方都可知道自己是否为群主以及群主的IP地址。

使用方法

以下是基本用法,简单介绍插件的大概使用方法。实际应用要复杂许多。

  1. 加载插件
// 加载WiFi Direct插件
// 插件名称为'zodiac-wfd'
const wfd = uni.requireNativePlugin('zodiac-wfd');
// 加载事件监听插件
const globalEvent = uni.requireNativePlugin('globalEvent');
  1. 初始化
// 初始化插件,可在页面onLoad()中调用
wfd.init();
  1. 注册事件监听回调
// 可在页面onLoad()中调用
// 'wfdStatusChange'为默认的事件名称
globalEvent.addEventListener('wfdStatusChange', (e) => {
    // 在此处理事件的相应逻辑
    // 参数e为事件的详细内容,格式请参考“事件格式”章节
    this.handleWfdStatusChange(e);
});
  1. 寻找WiFi网络覆盖范围内的设备
// ret为1表示调用接口成功,0表示调用接口失败
// 注意:插件大部分接口都是异步的,调用接口的返回成功并不表示设备发现任务已经成功启动,
// 任务启动是成功或失败需要在事件监听回调里才知道
// 调用接口失败则不会收到任何事件通知了
const ret = wfd.discoverPeers();
  1. 在事件监听回调处理寻找设备结果
// 处理所有WiFi Direct的事件
handleWfdStatusChange(e) {
    const status = e.status;
    if (status == 50) {
        // 设备发现任务已成功启动
    } else if (status == 51) {
        // 设备发现任务已经终止
    } else if (status == 52) {
        // 已发现设备,详细信息在e.data
        this.deviceList = e.data;
    } else if (status == 109) {
        // 设备发现任务启动失败
    }
}
  1. 连接设备
// ret为1表示调用接口成功,0表示调用接口失败
// 注意:插件大部分接口都是异步的,调用接口的返回成功并不表示连接已经完成,
// 连接是否完成或失败需要在事件监听回调里才知道
// 调用接口失败则不会收到任何事件通知了
const ret = wfd.connect({
    // 设备地址,调用wfd.discoverPeers()后,在事件监听回调里获得的
    deviceAddress: this.deviceList[0].deviceAddress, 
    groupOwnerIntent: -1 // 表示是否想成为群主的意愿,-1为系统自动指定
});
  1. 在事件监听回调处理连接结果
// 处理所有WiFi Direct的事件
handleWfdStatusChange(e) {
    const status = e.status;
    if (status == 61) {
        // 通知连接结果
        if (e.data.groupFormed) {
            // 群组已建立,连接成功
            // e.data.isGroupOwner => 是否为群主
            // e.data.ip => 群主IP地址
            // e.data.bindIp => 本机IP地址(本机IP地址安卓API没有提供,是插件提供的)
        }
        else {
            // 无法建立群组,连接失败
        }
    } else if (status == 111) {
        // 连接发生错误
    } 
}
  1. 移除群组(断开所有连接)
// ret为1表示调用接口成功,0表示调用接口失败
// 注意:插件大部分接口都是异步的,调用接口的返回成功并不表示移除群组已经完成,
// 群组是否移除完成或失败需要在事件监听回调里才知道
// 调用接口失败则不会收到任何事件通知了
const ret = wfd.removeGroup();
  1. 在事件监听回调处理移除群组结果
// 处理所有WiFi Direct的事件
handleWfdStatusChange(e) {
    const status = e.status;
    if (status == 21) {
        // 群组成功移除
        // 连接中断信息在status = 61里获得
    } else if (status == 108) {
        // 移除群组失败
    } 
}
  1. 释放资源
// 当插件不再使用时调用
// 可在页面的onUnload()里调用
wfd.cleanUp();

方法

init

用途 初始化插件。可在页面onLoad()中调用。

限制及注意事项 需在调用插件其他方法之前调用。

输入值

返回值 数字类型,1表示初始化成功。0示初始化失败,此时不可再调用插件其他方法。

reset

用途 重置插件到初始化状态。释放所有资源,并重新创建。

限制及注意事项 init()方法在整个插件生命周期只能调用一次,reset可调用多次。

输入值

返回值 数字类型,1表示重置成功。0表示重置失败,此时不可再调用插件其他方法(除了cleanUp()方法)。

addServiceRequest

用途 增加服务搜索条件。调用成功后插件会根据搜索条件寻找符合条件的服务。

限制及注意事项

  1. 调用此方法后并不会马上启动搜索,需要调用discoverServices()方法才会启动服务搜索。
  2. 此方法是异步的,调用接口的返回成功并不表示增加服务搜索条件已经完成,搜索条件是否已经新增成功或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。
  3. 增加DNS-SD服务搜索条件时,如果只给serviceType没有给instanceName,只会收到status=82的事件(事件data为dnsSdService对象)。如果要收到status=81的事件(事件data为dnsSdTxtRecord对象),则instanceName必需给值。

输入值 要增加的服务发现搜索条件描述,Object类型,格式如下:

{
    serviceDiscoveryType: 1,
    instanceName: 'myInstance', //DNS-SD服务属性
    serviceType: '_http._tcp', //DNS-SD服务属性
    st: 'upnp:rootdevice' //UPnP服务属性
}
属性 必需 类型 说明
serviceDiscoveryType Number 服务发现类型。有效值为1或2,1为DNS-SD标准的服务(默认),2为UPnP标准的服务。不赋值表示搜索默认服务为DNS-SD标准的服务。
instanceName String 搜索服务的实例名称。只对DNS-SD服务有效。可不指定(不给属性,或是属性给空字符串)。instanceName说明详见DNS-SD服务章节。
serviceType String 搜索服务的服务类型,只对DNS-SD服务有效。可不指定((不给属性,或是属性给空字符串),serviceType不指定时表示要搜索所有DNS-SD的服务。服务类型格式请参考DNS-SD服务章节说明。
st String UPnP服务的搜索条件只对DNS-SD服务有效。可不指定(不给属性,或是属性给空字符串),不指定表示搜索所有UPnP服务。式请参考UPnP服务章节说明。

如果所有属性都不赋值需要传入空Object {}。如下示例:

// 发现所有默认服务发现类型(DNS-SD)的服务
wfd.addServiceRequest({});

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
1 info 执行成功
100 failure 执行失败

removeServiceRequest

用途 移除一个服务发现的搜索条件。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示搜索条件已经移除完成,搜索条件是否已经移除成功或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。

输入值 要移除的服务发现搜索条件描述,Object类型,格式与addServiceRequest()方法一样。调用addServiceRequest()传入什么值,这里就传入同样的值移除对应的搜索条件。

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
2 info 执行成功
101 failure 执行失败

clearServiceRequests

用途 移除所有已经加入的服务发现搜索条件。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示搜索条件已经移除完成,搜索条件是否已经移除成功或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。

输入值 无。

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
3 info 执行成功
102 failure 执行失败

discoverServices

用途 根据已经加入的服务发现搜索条件寻找服务。服务发现搜索条件是调用addServiceRequest()方法加入的。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示寻找服务已经开始,寻找服务是否已经开始或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。

输入值

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
40 info 开始寻找服务
80 info 发现UPnP服务
81 info 发现DNS-SD服务
103 failure 执行失败

discoverPeers

用途 寻找WiFi网络覆盖范围内支持WiFi Direct的设备。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示寻找设备已经开始,寻找设备是否已经开始或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。

输入值

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
50 info 已开始发现设备
52 info 设备清单
109 failure 执行失败

stopPeerDiscovery

用途 停止寻找设备。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示停止寻找设备已经成功停止,停止寻找设备是否已经成功或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。

输入值

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
51 info 已开始停止发现设备
52 info 设备清单
110 failure 执行失败

requestPeers

用途 请求目前已经发现的设备清单。

限制及注意事项

  1. 此方法是异步的,调用接口返回成功只表示已经开始请求设备清单,设备清单会在事件监听回调里返回。调用接口失败则不会收到任何事件通知了。

输入值

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
52 info 设备清单

connect

用途 连接设备,建立网络连接。如果发起连接的设备当前没有加入群组,则connect()会与被连接的设备协调建立群组。如果发起连接的设备已经建立了群组或是已经加入了群组,connect()会邀请被连接的设备加入群组。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示设备已连接成功,设备是否已经连接成功或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。
  2. 安卓10.0(不含)以下版本只支持输入值属性deviceAddress、groupOwnerIntent、wps等基本属性,如果使用了基本属性以外的属性则忽略,deviceAddress必需赋值。安卓10.0或以上版本可使用全部属性。
  3. 安卓10.0或以上版本也可以只使用基本属性,此时passphrase属性不能赋值(不要出现passphrase属性),deviceAddress必需赋值。
  4. 安卓10.0或以上版本如果要使用基本属性以外的属性,passphrase及networkName必需赋值且不能为空字符串。

输入值 Object类型,格式如下:

{
    deviceAddress: '00-E9-3A-A9-06-09',
    groupOwnerIntent: -1,
    wps: {
        BSSID: '00-E9-3A-A9-06-09',
        pin: '12345',
        setup: 0
    },
    persistent: false,
    band: 0,
    frequency: 2400,
    networkName: 'DIRECT-xY-XXX',
    passphrase: 'xxx'
}
属性 必需 类型 说明
deviceAddress String 要连接设备的MAC地址。如不赋值则会根据networkName取出SSID部分,连接拥有此SSID的设备。安卓10.0(不含)以下版本deviceAddress必需赋值。
groupOwnerIntent Number 要成为群主的意愿。-1表示系统自动指定,15表示发起连接方想成为群主,0表示发起连接方不想成为群主。想成为群主,并不保证连接建立后会成为群主。不想成为群主,并不保证连接建立后会不是群主。不赋值默认为-1。
wps Object 详见Wi-Fi Protected Setup information。安卓9.0或以上版本已不再使用。
wps.BSSID String 当wps.setup=2时需给BSSID。
wps.pin String 当wps.setup=1,2,3时需给pin。
wps.setup Number WPS配置类型。0=PBC,1=DISPLAY,2=KEYPAD,3=LABEL。
persistent Booleon 是否保存群组设定参数。默认为false。需安卓10.0或以上版本才生效。
band Number 加入群组时指定频道,可选值0,1,2。0为系统扫码所有可用频道自动选择加入的群组,1为指定2.4GHz频道,2为指定5GHz频道。默认值为0。band不能与frequency同时使用。需安卓10.0或以上版本才生效。
frequency Number 加入群组时指定频率,单位为MHz。默认值为0,表示系统扫码所有可用频率自动选择加入的群组。frequency不能与band同时使用。需安卓10.0或以上版本才生效。
networkName String 加入群组时指定网络名称。网络名称格式为:"DIRECT-xy",x, y必须是英文字母或数字,"DIRECT-xy"后面可跟着SSID容许的字符串。需安卓10.0或以上版本才生效。
passphrase String 群组密码,长度8-63字符。需安卓10.0或以上版本才生效。

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
61 info 连接信息
111 failure 连接失败

cancelConnet

用途 取消连接设备。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示连接已经成功取消,取消连接设备是否已经成功或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。
  2. 只有在调用connect()分法还没完成前(还没返回status=61或status=111的事件)生效。如果连接已经建立或连接失败,则无法取消连接。

输入值

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
60 info 连接已取消
112 failure 取消连接失败

requestConnectionInfo

用途 请求目前的连接信息。

限制及注意事项

  1. 此方法是异步的,调用接口返回成功只表示已经开始请求连接信息,连接信息会在事件监听回调里返回。调用接口失败则不会收到任何事件通知了。

输入值

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
61 info 连接信息

requestDeviceInfo

用途 请求本机设备信息。

限制及注意事项

  1. 此方法是异步的,调用接口返回成功只表示已经开始请求本机设备信息,本机设备信息会在事件监听回调里返回。调用接口失败则不会收到任何事件通知了。
  2. 需要安卓10.0或以上版本才有效,否则调用时返回0(调用失败)。

输入值

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
70 info 本机设备信息

requestP2pState

用途 请求目前的WiFi Direct状态(是否可用)。

限制及注意事项

  1. 此方法是异步的,调用接口返回成功只表示已经开始请求WiFi Direct状态,WiFi Direct状态会在事件监听回调里返回。调用接口失败则不会收到任何事件通知了。
  2. 需要安卓10.0或以上版本才有效,否则调用时返回0(调用失败)。

输入值

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
200 info WiFi Direct状态

addLocalService

用途 注册服务。服务注册成功后则可以被发现。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示服务已经成功注册,服务是否已经成功注册或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。

输入值 要注册的服务描述,Object类型,格式如下:

{
    serviceDiscoveryType: 1,
    instanceName: 'myInstance', //DNS-SD服务属性
    serviceType: '_http._tcp', //DNS-SD服务属性
    txtRecordMap: { //DNS-SD服务属性
        key1: 'value1',
        key2: 'value2'
    },
    uuid: '6859dede-8574-59ab-9332-123456789012', //UPnP服务属性
    device: 'urn:schemas-upnp-org:device:MediaServer:1', //UPnP服务属性
    services: ['urn:schemas-upnp-org:service:ContentDirectory:1'] //UPnP服务属性
}
属性 必需 类型 说明
serviceDiscoveryType Number 服务注册类型。有效值为1或2,1为DNS-SD标准的服务(默认),2为UPnP标准的服务。不赋值表示注册默认服务为DNS-SD标准的服务。
instanceName String 注册服务的实例名称。只对DNS-SD服务有效。serviceDiscoveryType=1时必须指定。instanceName说明详见DNS-SD服务章节。
serviceType String 注册服务的服务类型,只对DNS-SD服务有效。serviceDiscoveryType=1时必须指定。服务类型格式请参考DNS-SD服务章节说明。
txtRecordMap Object 注册服务的自定义属性,只对DNS-SD服务有效。可选属性。txtRecordMap Object的属性为key,属性值为value,属性值为字符串类型。服务自定义属性请参考DNS-SD服务章节说明。
uuid String 注册服务的唯一标识,只对UPnP服务有效。serviceDiscoveryType=2时必须指定。uuid说明详见UPnP服务章节。
device String 注册服务所属的设备标识,只对UPnP服务有效。serviceDiscoveryType=2时必须指定。设备标识格式说明详见UPnP服务章节。
services Array 注册的服务标识数组,服务标识为字符串类型,只对UPnP服务有效。serviceDiscoveryType=2时必须指定。服务标识格式说明详见UPnP服务章节。

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
10 info 服务注册成功
104 failure 服务注册失败

removeLocalService

用途 移除已注册的服务。服务注册移除成功后则不会被发现。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示服务注册已经成功移除,服务注册是否已经成功移除或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。

输入值 要移除注册的服务描述,Object类型,格式同addLocalService()方法。

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
11 info 注册服务移除成功
105 failure 注册服务移除失败

clearLocalServices

用途 移除所有已注册的服务。服务注册移除成功后则不会被发现。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示服务注册已经成功移除,服务注册是否已经成功移除或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。

输入值 无。

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
12 info 所有注册服务移除成功
106 failure 注册服务移除失败

createGroup

用途 创建群组。如果要保证本机在建立连接后是群主身份,则需先创建群组,由其他设备连接本机。群组创建后会建立一个WiFi热点让没有WiFi Direct支持的设备也可以接入。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示群组已经创建成功,群组是否已经创建成功或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。
  2. 如果输入值不是空对象{}需要安卓10.0或以上版本才有效。安卓10.0以下版本,如果输入值不是空对象{},则忽略输入值属性,用默认参数创建群组。
  3. 此方法一般不使用,除非想保证本机在群组中是群主身份,让其他设备加入此群组,或是建立一个WiFi热点让没有WiFi Direct支持的设备也可以接入。

输入值 要创建群组的描述,Object类型,格式如下:

{
    persistent: false,
    band: 0,
    frequency: 2400,
    networkName: 'DIRECT-xY-XXX',
    passphrase: 'xxx'
}
属性 必需 类型 说明
persistent Boolean 是否保存群组设定参数。默认为false。
band Number 创建群组时指定频道,可选值0,1,2。0为系统根据可用频道自动选择,1为2.4GHz,2为5GHz。默认值为0。band不能与frequency同时使用。
frequency Number 创建群组时指定频率,单位为MHz。默认值为0,表示系统根据可用频率自动选择。frequency不能与band同时使用。
networkName String 创建群组时指定网络名称。网络名称格式为:"DIRECT-xy",x, y必须是英文字母或数字,"DIRECT-xy"后面可跟着SSID容许的字符串。如果输入值不是空对象{},则必须给值,不能为空字符串。
passphrase String 群组密码,长度8-63字符。如果输入值不是空对象{},则必须给值,不能为空字符串。

如果所有属性都不赋值需要传入空Object {}。如下示例:

// 用默认参数创建群组
wfd.createGroup({});

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
20 info 创建群组成功
107 failure 创建群组失败

removeGroup

用途 移除群组。移除群组后,所有此群组内的连接将中断。

限制及注意事项

  1. 此方法是异步的,调用接口的返回成功并不表示群组已经成功移除,群组是否已经成功移除或失败需要在事件监听回调里才知道。调用接口失败则不会收到任何事件通知了。

输入值 无。

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
21 info 群组移除成功
108 failure 群组移除失败

requestGroupInfo

用途 请求群组信息。

限制及注意事项

  1. 此方法是异步的,调用接口返回成功只表示已经开始请求群组信息,群组信息会在事件监听回调里返回。调用接口失败则不会收到任何事件通知了。

输入值 无。

返回值 数字类型,0表示调用失败。1表示调用成功。

相关事件

status statusType 说明
30 info 群组信息

getEventName

用途 获取插件发布事件时的事件名称。默认值为'wfdStatusChange'。

限制

输入值

返回值 字符串类型的事件名称。

setEventName

用途 设定插件发布事件时的事件名称。默认值为'wfdStatusChange'。调用此方法后插件发布事件的事件名称将会更改,一般在调用globalEvent.addEventListener()方法之前调用setEventName()。

一般情况不需要变更事件名称,除非默认的事件名称与其他插件所用的事件名称冲突。

限制 setEventName()方法一般在调用init()方法之后及调用globalEvent.addEventListener()方法之前调用,如下例:

// 可在页面onLoad()中调用
// 初始化插件
wfd.init();
// 变更事件名称
wfd.setEventName('myEventName');
// 注册事件监听回调,监听事件名称为'myEventName'的事件
globalEvent.addEventListener('myEventName', (e) => {
    // 在此处理事件的相应逻辑
    // 参数e为事件的详细内容,格式请参考“事件格式”章节
});

输入值 字符串类型的事件名称。

返回值

cleanUp

用途 释放插件占用资源。可在页面的onUnload()里调用。

限制 当不再使用插件时必需调用。

输入值

返回值

事件格式

在注册事件监听回调时,如下例:

globalEvent.addEventListener('wfdStatusChange', (e) => {
    // 在此处理事件的相应逻辑
    // 参数e为事件的详细内容
});

第一个参数'wfdStatusChange'为事件名称,第二个参数为回调函数,回调函数入参e格式为:

{
    status: 1,
    eventType: 'info',
    data: {},
    reason: 1
}
属性名 必须 类型 说明
status Number 事件状态。
eventType String 事件类型。
data Object 事件详细信息。
reason Number 错误原因码。
status eventType data 说明
1 info addServiceRequest的输入值 addServiceRequest成功
2 info removeServiceRequest的输入值 removeServiceRequest成功
3 info clearServiceRequests成功
10 info addLocalService的输入值 addLocalService成功
11 info removeLocalService的输入值 removeLocalService成功
12 info clearLocalServices成功
20 info createGroup的输入值 createGroup成功
21 info removeGroup成功
30 info groupInfo对象 刷新群组信息
40 info discoverServices成功,寻找服务已开始
50 info discoverPeers成功,寻找设备已开始
51 info stopPeerDiscovery成功
52 info device对象的数组 刷新设备信息,data包含已发现的设备
60 info cancelConnect成功,连接已取消
61 info connectionInfo对象 刷新连接信息
70 info device对象 刷新本机信息
80 info upnpService对象 刷新UPnP服务信息
81 info dnsSdTxtRecord对象 刷新DNS-SD服务TXT记录
82 info dnsSdService对象 刷新DNS-SD服务信息
100 failure addServiceRequest的输入值 addServiceRequest失败
101 failure removeServiceRequest的输入值 removeServiceRequest失败
102 failure clearServiceRequests失败
103 failure discoverServices失败
104 failure addLocalService的输入值 addLocalService失败
105 failure removeLocalService的输入值 removeLocalService失败
106 failure clearLocalServices失败
107 failure createGroup的输入值 createGroup失败
108 failure removeGroup失败
109 failure discoverPeers失败
110 failure stopPeerDiscovery失败
111 failure connect的输入值 connect失败
112 failure cancelConnect失败
200 info {available: true} WiFi Direct可用
200 failure {available: false, reason: 1} WiFi Direct不可用。reason=1(WiFi Direct disabled),reason=2(WiFi Direct channel disconnected),reason=3(WiFi disabled)。
reason 说明
0 内部错误
1 该功能不支持
2 系统繁忙,无法执行该功能

groupInfo对象

属性 类型 说明
interface String WiFi Direct网络的interface名称。
networkName String WiFi Direct网络的网络名称(SSID)。
passphrase String 加入群组的密码。只有在群主的设备上才会有这个属性。此密码是用在没有WiFi Direct功能的设备用WiFi热点的方式加入群组,以热点的方式加入群组需要passphrase及networkName(SSID)。
isGroupOwner Boolean 是否为群主。true=群主,false=非群主。
owner Object 群主的设备信息,为device对象。
clientList Array 群组内设备列表,为device对象的数组。
frequency Number 群组所使用的频率,以MHz为单位。需要安卓10.0或以上。
networkId Number wpa_supplicant的networkId,需要安卓11.0或以上。
bindIp String 本机WiFi Direct网络所绑定的IP地址。

device对象

属性 类型 说明
deviceAddress String 设备的MAC地址。
deviceName String 设备的名称。
primaryDeviceType String 主要设备类型。
secondaryDeviceType String 次要设备类型。
status Number 设备状态。0=已连接,1=已邀请,2=连接失败,3=可用,4=不可用。
isGroupOwner Boolean 是否为群主。true=群主,false=非群主。
isServiceDiscoveryCapable Boolean 此设备上的服务是否可被发现。true=可被发现,false=不可被发现。
wpsDisplaySupported Boolean 是否支持WPS Display配置。true=支持,false=不支持。
wpsKeypadSupported Boolean 是否支持WPS Keypad配置。true=支持,false=不支持。
wpsPbcSupported Boolean 是否支持WPS Pbc配置。true=支持,false=不支持。

connectionInfo对象

属性 类型 说明
groupFormed Boolean 群组是否已建立。true=群组已建立,false=群组未建立。
isGroupOwner Boolean 是否为群主。true=群主,false=非群主。
ip String 群主IP地址。

upnpService对象

属性 类型 说明
uniqueServiceNames Array 群组是否已建立。true=群组已建立,false=群组未建立。
srcDevice Object 提供UPnP服务的设备,格式为device对象。

dnsSdTxtRecord对象

属性 类型 说明
fullDomainName String DNS-SD服务的完整域名。格式为"[instanceName].[serviceType].local."。例如:"myService._http._tcp.local."。
txtRecordMap Object DNS-SD服务的自定义属性,以名值对的方式表示。txtRecordMap Object的属性为key,属性值为value,属性值为字符串类型。服务自定义属性请参考DNS-SD服务章节说明。
srcDevice Object 提供DNS-SD服务的设备,格式为device对象。

dnsSdService对象

属性 类型 说明
instanceName String DNS-SD服务的实例名称。
registrationType String DNS-SD服务的注册类型,格式为:"[serviceType].local.",例如:"_http._tcp.local."。
srcDevice Object 提供DNS-SD服务的设备,格式为device对象。

DNS-SD服务

DNS-SD全名为DNS Service Discovery,是一种利用标准DNS协议(包括程序界面、服务器、网络封包格式)来寻找网络上服务的方法。RFC 6763对DNS-SD有完整的描述。DNS-SD兼容mDNS,但不依赖mDNS。本插件支持DNS-SD服务的注册与发现,注册DNS-SD服务的信息包括实例名称(instanceName),服务类型(serviceType)及TXT Record。注册服务时需指定instanceName及serviceType,TXT Record为可选。

实例名称(instanceName)

instanceName为服务的显示名称,instanceName除了不能包含ASCII的控制字符(0x00-0x1F0x7F)没有其他限制,instanceName可以包含unicode字符。instanceName是以UTF-8编码存储,存储的总长度限制为63bytes,每个UTF-8编码需要1-4byte空间,因此最差情况能容纳15个unicode字符。

服务类型(serviceType)

服务类型可理解为设备提供服务所使用的网络协议,例如www服务使用基于tcp的http网络协议,服务类型为'_http._tcp'。已注册的服务类型可参考Service Name and Transport Protocol Port Number Registry。服务类型的格式为:

_<Service Name>._<Transport Protocol>

<Service Name><Transport Protocol>可在上述的已注册的服务类型网页里查找。

TXT Record

TXT Record用来描述服务的详细信息,以名值对(key/value)的方式呈现。 key必需是可打印的US-ASCII字符(0x20-0x7E不包括等号"="),长度最少是1个字符最多是9个字符。key是大小写无关(大写小写视为相同)。key在TXT Record中不能重复。 value的值没有什么限制,可包含任何unicode字符。value的长度不能超过245 bytes。 TXT Record由多个名值对组成,所有名值对加起来的总长度一般在200 bytes以下(所有key+value的byte数),最多不要超过500 bytes。 按RFC 6763的建议,名值对要包含版本标签并且放在TXT Record的第一个名值对。版本标签key为"txtvers",value为从1开始的整数往上递增,如1,2,3等。

UPnP服务

UPnP全名为Universal Plug and Play,主要的目的让设备可以零配置的连接网络并被自动发现,包括设备可以动态加入网络、获取设备IP地址、发布设备名称及规格参数等。本插件支持UpnP服务的注册与发现,注册UpnP服务的信息包括uuid、device及services。

uuid

符合RFC 4122所规范的唯一标识。

device

device为一字符串表示注册服务的设备,device的格式请参考UPnP™ Device Architecture 1.1

services

services为一数组包含要注册的service,service为一字符串表示要注册的服务,service的格式请参考UPnP™ Device Architecture 1.1

其他注意事项

  1. 在发现DNS-SD服务时会返回两种事件,事件status=81,data为dnsSdTxtRecord对象及事件status=81,data为dnsSdService对象。dnsSdTxtRecord对象包含自定义的服务属性,dnsSdService对象包含instanceName及registrationType(serviceType + ".local.")。如果按照DNS-SD规范中规定,服务的IP地址及端口应该存放在DNS的SRV记录,应该是放在dnsSdService对象中返回,但是调用addLocalService()方法时并没法给IP地址及端口,这是因为WiFi Direct是在设备加入群组建立连接之后才会获得IP地址,因此没法在注册服务时就同时注册IP地址及端口。为了发布服务的IP地址及端口,只能在设备加入群组建立连接之后调用removeLocalService()方法将之前注册的服务移除,重新注册服务,将IP地址及端口放在TXT Record中。
  2. 本插件暂不支持设定及查询WiFi Display信息。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

android.permission.ACCESS_FINE_LOCATION android.permission.ACCESS_NETWORK_STATE android.permission.ACCESS_WIFI_STATE android.permission.CHANGE_NETWORK_STATE android.permission.CHANGE_WIFI_STATE

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

请参考开源项目地址的开源协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问