codecamp

鸿蒙OS P2P功能章

场景介绍

WLAN P2P 功能用于设备与设备之间的点对点数据传输,应用可以通过接口完成以下功能:

  1. 发现对端设备。
  2. 建立与移除群组。
  3. 向对端设备发起连接。
  4. 获取 P2P 相关信息。

接口说明

WifiP2pController 提供 WLAN P2P 功能,接口说明如下。

接口名 描述 所需权限
init(EventRunner eventRunner, WifiP2pCallback callback) 初始化 P2P 的信使,当且仅当信使被成功初始化,P2P 的其他功能才可以正常使用。 ohos.permission.GET_WIFI_INFOohos.permission.SET_WIFI_INFO
discoverDevices(WifiP2pCallback callback) 搜索附近可用的 P2P 设备。 ohos.permission.GET_WIFI_INFO
stopDeviceDiscovery(WifiP2pCallback callback) 停止搜索附近的 P2P  设备。 ohos.permission.GET_WIFI_INFO
createGroup(WifiP2pConfig wifiP2pConfig, WifiP2pCallback callback) 建立 P2P 群组。 ohos.permission.GET_WIFI_INFO
removeGroup(WifiP2pCallback callback) 移除 P2P 群组。 ohos.permission.GET_WIFI_INFO
requestP2pInfo(int requestType, WifiP2pCallback callback) 请求 P2P 相关信息,如群组信息、连接信息、设备信息等。 ohos.permission.GET_WIFI_INFO
connect(WifiP2pConfig wifiP2pConfig, WifiP2pCallback callback) 向指定设备发起连接。 ohos.permission.GET_WIFI_INFO
cancelConnect(WifiP2pCallback callback) 取消向指定设备发起的连接。 ohos.permission.GET_WIFI_INFO

启动与停止 P2P 搜索的开发步骤

  1. 调用 WifiP2pController 的 getInstance(Context context) 接口,获取 P2P 控制器实例,用于管理 P2P 操作。

  1. 调用 init(EventRunner eventRunner, WifiP2pCallback callback)初始化 P2P 控制器实例。

  1. 发起 P2P 搜索。

  1. 获取 P2P 搜索回调信息。

  1. 停止 P2P 搜索。

   try {
       // 获取P2P管理对象
       WifiP2pController wifiP2pController = WifiP2pController.getInstance(this);
       // 初始化P2P管理对象,用于建立P2P信使等行为
       wifiP2pController.init(EventRunner.create(true), null);
       // 创建P2P回调对象
       P2pDiscoverCallBack p2pDiscoverCallBack = new P2pDiscoverCallBack();
       // 发起P2P搜索
       wifiP2pController.discoverDevices(p2pDiscoverCallBack);
       // 停止P2P搜索
       wifiP2pController.stopDeviceDiscovery(p2pDiscoverCallBack);
   } catch (RemoteException re) {
       HiLog.warn(LABEL, "exception happened.");
   }

    
   // 获取P2P启动与停止搜索的回调信息(失败或者成功)
   private class P2pDiscoverCallBack extends WifiP2pCallback {
       @Override
       public void eventExecFail(int reason) {
           HiLog.info(LABEL, "discoverDevices eventExecFail reason : %{public}d", reason);
       }

    
       @Override
       public void eventExecOk() {
           HiLog.info(LABEL, "discoverDevices eventExecOk");
       }
   }

创建与移除群组的开发步骤

  1. 调用 WifiP2pController 的 getInstance(Context context)接口,获取 P2P 控制器实例,用于管理 P2P 操作。

  1. 调用 init(EventRunner eventRunner, WifiP2pCallback callback)初始化 P2P 控制器实例。

  1. 创建 P2P 群组。

  1. 移除 P2P 群组。

   try {
       // 获取P2P管理对象
       WifiP2pController wifiP2pController = WifiP2pController.getInstance(this);
       // 初始化P2P管理对象,用于建立P2P信使等行为
       wifiP2pController.init(EventRunner.create(true), null);
       // 创建用于P2P建组需要的配置
       WifiP2pConfig wifiP2pConfig = new WifiP2pConfig("DEFAULT_GROUP_NAME", "DEFAULT_PASSPHRASE");
       wifiP2pConfig.setDeviceAddress("02:02:02:02:03:04");
       wifiP2pConfig.setGroupOwnerBand(0);
       // 创建P2P回调对象
       P2pCreateGroupCallBack p2pCreateGroupCallBack = new P2pCreateGroupCallBack();
       // 创建P2P群组
       wifiP2pController.createGroup(wifiP2pConfig, p2pCreateGroupCallBack);
       // 移除P2P群组
       wifiP2pController.removeGroup(p2pCreateGroupCallBack);
   } catch (RemoteException re) {
       HiLog.warn(LABEL, "exception happened.");
   }

    
   private class P2pCreateGroupCallBack extends WifiP2pCallback {
       @Override
       public void eventExecFail(int reason) {
           HiLog.info(LABEL, "CreateGroup eventExecFail reason : %{public}d", reason);
       }

    
       @Override
       public void eventExecOk() {
           HiLog.info(LABEL, "CreateGroup eventExecOk");
       }
   }

发起 P2P 连接的开发步骤

  1. 调用 WifiP2pController 的 getInstance(Context context) 接口,获取 P2P 控制器实例,用于管理 P2P 操作。

  1. 调用 init(EventRunner eventRunner, WifiP2pCallback callback)初始化 P2P 控制器实例。

  1. 调用 requestP2pInfo()查询 P2P 可用设备信息。

  1. 根据场景不同,从可用设备信息中选择目标设备。

  1. 调用 connect 接口发起连接。

   try {
       // 获取P2P管理对象
       WifiP2pController wifiP2pController = WifiP2pController.getInstance(this);
       // 初始化P2P管理对象,用于建立P2P信使等行为
       wifiP2pController.init(EventRunner.create(true), null);
       // 查询可用P2P设备信息,通过回调获取P2P设备信息
       P2pRequestPeersCallBack p2pRequestPeersCallBack = new P2pRequestPeersCallBack();
       wifiP2pController.requestP2pInfo(WifiP2pController.DEVICE_LIST_REQUEST, p2pRequestPeersCallBack);
   } catch (RemoteException re) {
       HiLog.warn(LABEL, "exception happened.");
   }

    
   private class P2pRequestPeersCallBack extends WifiP2pCallback {
       @Override
       public void eventP2pDevicesList(List<WifiP2pDevice> devices) {
           HiLog.info(LABEL, "eventP2pDevicesList when start connect group");
           // 根据场景不同,选择不同的设备进行连接,这里,通过MAC地址搜索到指定设备
           WifiP2pConfig wifiP2pConfig = getSameP2pConfigFromDevices(devices);
           try {
               if (wifiP2pConfig != null) {
                   // 向指定的设备发起连接
                   wifiP2pController.connect(wifiP2pConfig, null);
                   }
           } catch (RemoteException re) {
               HiLog.warn(LABEL, "exception happened in connect.");
           }
       }
   }

    
   private WifiP2pConfig getSameP2pConfigFromDevices(List<WifiP2pDevice> devices) {
       if (devices == null) {
           return null;
       }
       for (int i = 0; i < devices.size(); i++) {
           WifiP2pDevice p2pDevice = devices.get(i);
           HiLog.info(LABEL, "p2pDevice.getDeviceAddress() : %{private}s", p2pDevice.getDeviceAddress());
           if (p2pDevice.getDeviceAddress() != null
                   && p2pDevice.getDeviceAddress().equals(TARGET_P2P_MAC_ADDRESS)) {
               HiLog.info(LABEL, "received same mac address");
               WifiP2pConfig wifiP2pConfig = new WifiP2pConfig("DEFAULT_GROUP_NAME", "DEFAULT_PASSPHRASE");
               wifiP2pConfig.setDeviceAddress(p2pDevice.getDeviceAddress());
               return wifiP2pConfig;
           }
       }
       return null;
   }

请求P2P相关信息的开发步骤

  1. 调用 WifiP2pController 的 getInstance()接口,获取 P2P 控制器实例,用于管理 P2P 操作。

  1. 调用 init()初始化 P2P 控制器实例。

  1. 调用 requestP2pInfo()查询 P2P 群组信息。

  1. 调用 requestP2pInfo()查询 P2P 设备信息。

  1. 根据场景不同,可以调用 requestP2pInfo 获取需要的信息。

   try {
       // 获取P2P管理对象
       WifiP2pController wifiP2pController = WifiP2pController.getInstance(this);
       // 初始化P2P管理对象,用于建立P2P信使等行为
       wifiP2pController.init(EventRunner.create(true), null);
       // 查询可用P2P群组信息,通过回调获取P2P群组信息
       P2pRequestGroupInfoCallBack p2pRequestGroupInfoCallBack = new P2pRequestGroupInfoCallBack();
       wifiP2pController.requestP2pInfo(WifiP2pController.GROUP_INFO_REQUEST, p2pRequestGroupInfoCallBack);
       // 查询可用P2P设备信息,通过回调获取P2P设备信息
       P2pRequestDeviceInfoCallBack p2pRequestDeviceInfoCallBack = new P2pRequestDeviceInfoCallBack();
       wifiP2pController.requestP2pInfo(WifiP2pController.DEVICE_INFO_REQUEST, p2pRequestDeviceInfoCallBack);
       // 通过调用requestP2pInfo接口,可以查询以下关键信息
       wifiP2pController.requestP2pInfo(WifiP2pController.NETWORK_INFO_REQUEST, callback); // 网络信息
       wifiP2pController.requestP2pInfo(WifiP2pController.DEVICE_LIST_REQUEST, callback); // 设备列表信息
   } catch (RemoteException re) {
       HiLog.warn(LABEL, "exception happened.");
   }

    
   // 群组信息回调
   private class P2pRequestGroupInfoCallBack extends WifiP2pCallback {
       @Override
       public void eventP2pGroup(WifiP2pGroup group) {
           HiLog.info(LABEL, "P2pRequestGroupInfoCallBack eventP2pGroup");
           doSthFor(group);
       }
   }
   // 设备信息回调
   private class P2pRequestDeviceInfoCallBack extends WifiP2pCallback {
       @Override
       public void eventP2pGroup(WifiP2pDevice p2pDevice) {
           HiLog.info(LABEL, "eventP2pGroup");
               doSthFor(p2pDevice);
       }
   }
鸿蒙OS WLAN基础功能
鸿蒙OS WLAN消息通知
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

鸿蒙OS 开发

鸿蒙OS 术语

鸿蒙OS Java API参考

鸿蒙OS ohos.aafwk.ability

鸿蒙OS ohos.aafwk.abilityjet.activedata

鸿蒙OS ohos.aafwk.content

鸿蒙OS java.lang

鸿蒙OS java.Util

鸿蒙OS java.Util class

鸿蒙OS ohos.data.dataability

鸿蒙OS ohos.data.dataability class

鸿蒙OS ohos.agp.components

鸿蒙OS ohos.agp.components interface

鸿蒙OS ohos.agp.components class

鸿蒙OS ohos.global.configuration

鸿蒙OS java.io

鸿蒙OS ohos.data.resultset

鸿蒙OS ohos.data.resultset interface

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }