1# 分布式DeviceProfile部件<a name="ZH-CN_TOPIC_0000001128264105"></a> 2 3- [简介](#section11660541593) 4- [目录](#section1464106163817) 5- [约束](#section1718733212019) 6- [使用](#section10729231131110) 7- [相关仓](#section176111311166) 8 9## 简介<a name="section11660541593"></a> 10 11DeviceProfile是设备硬件能力和系统软件特征的管理器,典型的Profile有设备类型、设备名称、设备OS类型、OS版本号等。DeviceProfile提供快速访问本地和远端设备Profile的能力,是发起分布式业务的基础。主要功能如下: 12 13- 本地设备Profile的插入、删除、查询。 14- 远程设备Profile的查询。 15- 订阅远程Profile变化的通知。 16- 跨设备同步Profile。 17 18DeviceProfile模块组成如下图所示: 19 20## 系统架构<a name="section13587185873516"></a> 21 22**图 1** DeviceProfile组件架构图<a name="fig4460722185514"></a> 23 24 25![](figures/dp-architecture_zh.png) 26 27 28## 目录<a name="section1464106163817"></a> 29 30DeviceProfile主要代码目录结构如下: 31 32``` 33├── interfaces 34│ └── innerkits 35│ └── distributeddeviceprofile // innerkits接口 36├── ohos.build 37├── sa_profile // said声明文件 38│ ├── 6001.xml 39│ └── BUILD.gn 40└── services 41 └── distributeddeviceprofile 42 ├── BUILD.gn 43 ├── include 44 │ ├── authority // 权限校验 45 │ ├── contentsensor // CS数据采集头文件 46 │ ├── dbstorage // 数据库操作头文件 47 │ ├── devicemanager // 设备管理头文件 48 │ └── subscribemanager // 订阅管理头文件 49 ├── src 50 │ ├── authority // 权限校验 51 │ ├── contentsensor // CS数据采集实现 52 │ ├── dbstorage // 数据库操作实现 53 │ ├── devicemanager // 设备管理实现 54 │ └── subscribemanager // 订阅管理实现 55 └── test // 测试用例 56``` 57 58## 约束<a name="section1718733212019"></a> 59 60- 组网设备需在同一局域网中。 61- 组网之前,需先完成设备绑定,绑定流程参见安全子系统中说明。 62 63## 使用<a name="section10729231131110"></a> 64 65### 查询Profile信息 66 67* GetDeviceProfile参数描述 68 69| 名称 | 类型 | 必填 | 描述 | 70| --------- | ---------------------------- | ---- | ----------------------------------- | 71| deviceId | std::string | 是 | 查询指定设备的profile,空值表示查询本地 | 72| serviceId | std::string | 是 | 查询的service id | 73| profile | ServiceCharacteristicProfile | 是 | 返回值 | 74 75* 代码示例 76 77```c++ 78// 声明返回值 79ServiceCharacteristicProfile profile; 80// 执行查询接口GetDeviceProfile 81DistributedDeviceProfileClient::GetInstance().GetDeviceProfile(deviceId, serviceId, profile); 82std::string jsonData = profile.GetCharacteristicProfileJson(); 83result.append("jsonData:" + jsonData + "\n"); 84``` 85 86### 插入Profile信息 87 88* PutDeviceProfile参数描述 89 90| 名称 | 类型 | 必填 | 描述 | 91| --------- | ---------------------------- | ---- | ----------------------------------- | 92| profile | ServiceCharacteristicProfile | 是 | 需要插入的profile信息 | 93 94* 代码示例 95 96```c++ 97// 声明并填充插入数据 98ServiceCharacteristicProfile profile; 99profile.SetServiceId(serviceId); 100profile.SetServiceType(serviceType); 101nlohmann::json j; 102j["testVersion"] = "3.0.0"; 103j["testApiLevel"] = API_LEVEL; 104profile.SetCharacteristicProfileJson(j.dump()); 105// 执行插入接口PutDeviceProfile 106DistributedDeviceProfileClient::GetInstance().PutDeviceProfile(profile); 107``` 108 109### 删除Profile信息 110 111* DeleteDeviceProfile参数描述 112 113| 名称 | 类型 | 必填 | 描述 | 114| --------- | ---------------------------- | ---- | ----------------------------------- | 115| serviceId | std::string | 是 | 删除特定serviceid的记录 | 116 117* 代码示例 118 119```c++ 120// 声明并填充插入数据 121std::string serviceId = "test"; 122// DeleteDeviceProfile 123DistributedDeviceProfileClient::GetInstance().DeleteDeviceProfile(serviceId); 124``` 125 126### 同步Profile信息 127 128* SyncDeviceProfile参数描述 129 130| 名称 | 类型 | 必填 | 描述 | 131| --------- | ---------------------------- | ---- | ----------------------------------- | 132| syncOption| SyncOption | 是 | 指定同步范围和模式 | 133| syncCb | IProfileEventCallback | 是 | 同步结果回调 | 134 135* 代码示例 136 137```c++ 138// 定义同步模式和范围 139SyncOptions syncOption; 140syncOption.SetSyncMode((OHOS::DeviceProfile::SyncMode)atoi(mode.c_str())); 141for (const auto& deviceId : deviceIds) { 142 syncOption.AddDevice(deviceId); 143} 144// 执行同步接口 145DistributedDeviceProfileClient::GetInstance().SyncDeviceProfile(syncOption, 146 std::make_shared<ProfileEventCallback>()); 147``` 148 149### 订阅Profile事件(同步、变更事件) 150 151* SubscribeProfileEvents参数描述 152 153| 名称 | 类型 | 必填 | 描述 | 154| -------------- | ---------------------------- | ---- | ----------------------------------- | 155| subscribeInfos | SubscribeInfo | 是 | 指定订阅的事件类型 | 156| eventCb | IProfileEventCallback | 是 | 订阅事件回调 | 157| failedEvents | ProfileEvent | 是 | 失败事件 | 158 159* 代码示例 160 161```c++ 162auto callback = std::make_shared<ProfileEventCallback>(); 163std::list<SubscribeInfo> subscribeInfos; 164 165// 订阅EVENT_PROFILE_CHANGED事件 166ExtraInfo extraInfo; 167extraInfo["deviceId"] = deviceId; 168extraInfo["serviceIds"] = serviceIds; 169SubscribeInfo changeEventInfo; 170changeEventInfo.profileEvent = ProfileEvent::EVENT_PROFILE_CHANGED; 171changeEventInfo.extraInfo = std::move(extraInfo); 172subscribeInfos.emplace_back(changeEventInfo); 173 174// 订阅EVENT_SYNC_COMPLETED事件 175SubscribeInfo syncEventInfo; 176syncEventInfo.profileEvent = ProfileEvent::EVENT_SYNC_COMPLETED; 177subscribeInfos.emplace_back(syncEventInfo); 178 179// 执行订阅接口 180std::list<ProfileEvent> failedEvents; 181DistributedDeviceProfileClient::GetInstance().SubscribeProfileEvents(subscribeInfos, 182 callback, failedEvents); 183 184// 解除订阅 185std::list<ProfileEvent> profileEvents; 186profileEvents.emplace_back(ProfileEvent::EVENT_PROFILE_CHANGED); 187DistributedDeviceProfileClient::GetInstance().UnsubscribeProfileEvents(profileEvents, 188 callback, failedEvents); 189``` 190 191## 相关仓<a name="section176111311166"></a> 192 193[**deviceprofile_device_info_manager**](https://gitee.com/openharmony/deviceprofile_device_info_manager)