1# 拖拽事件 2 3ArkUI开发框架针对拖拽事件提供了[NODE_ON_PRE_DRAG](../reference/apis-arkui/_ark_u_i___native_module.md#arkui_nodeeventtype),[NODE_ON_DRAG_START](../reference/apis-arkui/_ark_u_i___native_module.md#arkui_nodeeventtype),[NODE_ON_DROP](../reference/apis-arkui/_ark_u_i___native_module.md#arkui_nodeeventtype),[NODE_ON_DRAG_ENTER](../reference/apis-arkui/_ark_u_i___native_module.md#arkui_nodeeventtype),[NODE_ON_DRAG_MOVE](../reference/apis-arkui/_ark_u_i___native_module.md#arkui_nodeeventtype),[NODE_ON_DRAG_LEAVE](../reference/apis-arkui/_ark_u_i___native_module.md#arkui_nodeeventtype),[NODE_ON_DRAG_END](../reference/apis-arkui/_ark_u_i___native_module.md#arkui_nodeeventtype)等组件事件,当拖拽在不同的阶段时会触发对应的组件事件,完成对应的数据处理操作,实现期望的拖拽交互能力。 4 5## 通用拖拽 6 7ArkUI提供了使用C和C++开发拖拽功能的能力,开发者可调用C API实现拖拽功能。以下以Image组件为例,详细介绍实现C API实现拖拽功能的基本步骤,以及在开发过程中需要注意的事项。 8 91. 组件拖拽设置。 10 11 获取[Node-API](../reference/apis-arkui/_ark_u_i___native_module.md#oh_arkui_getmoduleinterface),创建节点等操作均需通过Node-API完成。 12 13 ```cpp 14 ArkUI_NativeNodeAPI_1 *nodeAPI = nullptr; 15 OH_ArkUI_GetModuleInterface(ARKUI_NATIVE_NODE, ArkUI_NativeNodeAPI_1, nodeAPI); 16 ``` 17 18 创建Image节点,并设置draggable和其它相关属性。 19 20 ```cpp 21 auto image = nodeAPI->createNode(ARKUI_NODE_IMAGE); 22 ArkUI_NumberValue NODE_IMAGE_SRC_Item = {.string = "/pages/common/1111.png"}; 23 ArkUI_NumberValue imageWidthValue[] = {100}; 24 ArkUI_AttributeItem imageWidthItem = {imageWidthValue, 1}; 25 ArkUI_NumberValue imageHeightValue[] = {100}; 26 ArkUI_AttributeItem imageHeightItem = {imageHeightValue, 1}; 27 ArkUI_NumberValue marginValue[] = {20}; 28 ArkUI_AttributeItem marginItem = {marginValue, 1}; 29 nodeAPI->setAttribute(image, NODE_WIDTH, &imageWidthItem); 30 nodeAPI->setAttribute(image, NODE_HEIGHT, &imageHeightItem); 31 nodeAPI->setAttribute(image, NODE_IMAGE_SRC, &NODE_IMAGE_SRC_Item); 32 nodeAPI->setAttribute(image, NODE_MARGIN, &marginItem); 33 nodeAPI->registerNodeEvent(image, NODE_ON_DRAG_START, 1, nullptr); 34 auto returnValue1 = OH_ArkUI_SetNodeDraggable(image, true); 35 ``` 36 372. 自定义拖拽预览和背板图。 38 39 创建[pixelMap](../reference/apis-image-kit/_image___native_module.md#oh_pixelmapnative_createpixelmap),设置pixelMap的宽高等各项属性。设置Image节点的[dragPreviewOption](../reference/apis-arkui/drag__and__drop_8h.md#函数),可用于设置跟手图的圆角、角标等。 40 41 ```cpp 42 // 创建pixelMap 43 uint8_t data[960000]; 44 size_t dataSize = 960000; 45 for (int i = 0; i < dataSize; i++) { 46 data[i] = i + 1; 47 } 48 // 创建参数结构体实例,并设置参数 49 OH_Pixelmap_InitializationOptions *createOpts; 50 OH_PixelmapInitializationOptions_Create(&createOpts); 51 OH_PixelmapInitializationOptions_SetWidth(createOpts, 400); 52 OH_PixelmapInitializationOptions_SetHeight(createOpts, 600); 53 OH_PixelmapInitializationOptions_SetPixelFormat(createOpts, PIXEL_FORMAT_BGRA_8888); 54 OH_PixelmapInitializationOptions_SetAlphaType(createOpts, PIXELMAP_ALPHA_TYPE_UNKNOWN); 55 // 创建Pixelmap实例 56 OH_PixelmapNative *pixelmap = nullptr; 57 OH_PixelmapNative_CreatePixelmap(data, dataSize, createOpts, &pixelmap); 58 OH_PixelmapNative_Rotate(pixelmap, 45); 59 OH_PixelmapNative_Opcity(pixelmap, 0.1); 60 OH_PixelmapNative_Scale(pixelmap, 0.5, 1.0); 61 OH_PixelmapNative_Translate(pixelmap, 50.0, 10.0); 62 OH_ArkUI_SetNodeDragPreview(image, pixelmap); 63 auto *previewOptions = OH_ArkUI_CreateDragPreviewOption(); 64 auto returnValue2 = OH_ArkUI_DragPreviewOption_SetNumberBadgeEnabled(previewOptions, true); 65 auto returnValue3 = OH_ArkUI_DragPreviewOption_SetBadgeNumber(previewOptions, 10); 66 auto returnValue4 = OH_ArkUI_DragPreviewOption_SetDefaultRadiusEnabled(previewOptions, true); 67 OH_ArkUI_SetNodeDragPreviewOption(image, previewOptions); 68 ``` 69 703. 设置相关事件。 71 72 C API的事件通过统一的回调来接收,当收到事件时通过[eventType](../reference/apis-arkui/_ark_u_i___native_module.md#arkui_nodeeventtype)进行区分。 73 74 ```cpp 75 nodeAPI->registerNodeEventReceiver([](ArkUI_NodeEvent *event) { 76 auto eventType = OH_ArkUI_NodeEvent_GetEventType(event); 77 auto targetId = OH_ArkUI_NodeEvent_GetTargetId(event); 78 auto *dragEvent = OH_ArkUI_NodeEvent_GetDragEvent(event); 79 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 80 "targetId=%{public}d,eventType=%{public}d,", targetId, 81 eventType); 82 switch (eventType) { 83 case NODE_ON_CLICK: { 84 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 85 "ARKUI_NODE_BUTTON click! dragable"); 86 break; 87 } 88 case NODE_ON_PRE_DRAG: { 89 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", "NODE_ON_PRE_DRAG EventReceiver"); 90 break; 91 } 92 case NODE_ON_DRAG_START: { 93 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 94 "NODE_ON_DRAG_START EventReceiver"); 95 break; 96 } 97 case NODE_ON_DROP: { 98 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", "NODE_ON_DROP EventReceiver"); 99 break; 100 } 101 case NODE_ON_DRAG_ENTER: { 102 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 103 "NODE_ON_DRAG_ENTER EventReceiver"); 104 break; 105 } 106 case NODE_ON_DRAG_MOVE: { 107 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 108 "NODE_ON_DRAG_MOVE EventReceiver"); 109 break; 110 } 111 case NODE_ON_DRAG_LEAVE: { 112 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 113 "NODE_ON_DRAG_LEAVE EventReceiver"); 114 break; 115 } 116 case NODE_ON_DRAG_END: { 117 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", "NODE_ON_DRAG_END EventReceiver"); 118 break; 119 } 120 } 121 }); 122 ``` 123 1244. 处理NODE_ON_DRAG_START事件。 125 126 在NODE_ON_DRAG_START事件中,应用可以执行起拖阶段所需的操作,通常涉及处理起拖过程的数据。例如,创建UdmfRecord,将用于拖拽图片所需的数据 imageUri以fileUri类型添加到[UdmfRecord](../reference/apis-arkdata/_u_d_m_f.md#oh_udmfrecord)中,接着将UdmfRecord设置到[udmfData](../reference/apis-arkdata/_u_d_m_f.md#oh_udmfdata)中,最后将UdmfData设置到[DragEvent](../reference/apis-arkui/_ark_u_i___native_module.md#arkui_dragevent)中。 127 128 ```cpp 129 case NODE_ON_DRAG_START: { 130 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 131 "NODE_ON_DRAG_START EventReceiver"); 132 OH_UdmfRecord *record = OH_UdmfRecord_Create(); 133 int returnValue; 134 OH_UdsFileUri *imageValue = OH_UdsFileUri_Create(); 135 returnValue = OH_UdsFileUri_SetFileUri(imageValue, "/pages/common/1111.png"); 136 returnValue = OH_UdmfRecord_AddFileUri(record, imageValue); 137 OH_UdmfData *data = OH_UdmfData_Create(); 138 returnValue = OH_UdmfData_AddRecord(data, record); 139 returnValue = OH_ArkUI_DragEvent_SetData(dragEvent, data); 140 break; 141 } 142 ``` 143 1445. 处理NODE_ON_DROP事件。 145 146 在NODE_ON_DROP事件中,应用可以执行与落入阶段相关的操作,通常需要获取拖拽过程中传递的数据。例如,获取[udmfData](../reference/apis-arkdata/_u_d_m_f.md#oh_udmfdata),判断是否存在所需的数据类型,从[UdmfRecord](../reference/apis-arkdata/_u_d_m_f.md#oh_udmfrecord)中提取相应的数据,最后销毁指针。 147 148 ```cpp 149 case NODE_ON_DROP: { 150 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 151 "NODE_ON_DRAG_START EventReceiver"); 152 // 获取UDMF data 153 int returnValue; 154 // 创建OH_UdmfData对象 155 OH_UdmfData *data = OH_UdmfData_Create(); 156 returnValue = OH_ArkUI_DragEvent_GetUdmfData(dragEvent, data); 157 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 158 "OH_ArkUI_DragEvent_GetUdmfData returnValue = %{public}d", returnValue); 159 // 判断OH_UdmfData是否有对应的类型 160 bool resultUdmf = OH_UdmfData_HasType(data, UDMF_META_GENERAL_FILE); 161 if (resultUdmf) { 162 // 获取OH_UdmfData的记录 163 unsigned int recordsCount = 0; 164 OH_UdmfRecord **records = OH_UdmfData_GetRecords(data, &recordsCount); 165 // 获取records中的元素 166 int returnStatus; 167 for (int i = 0; i < recordsCount; i++) { 168 // 从OH_UdmfRecord中获取文件类型数据 169 OH_UdsFileUri *imageValue = OH_UdsFileUri_Create(); 170 returnStatus = OH_UdmfRecord_GetFileUri(records[i], imageValue); 171 const char* fileUri = OH_UdsFileUri_GetFileUri(imageValue); 172 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 173 "dragTest OH_UdmfRecord_GetPlainText " 174 "returnStatus= %{public}d " 175 "fileUri= %{public}s", 176 returnStatus, fileUri); 177 // 使用结束后销毁指针 178 OH_UdsFileUri_Destroy(imageValue); 179 } 180 } else { 181 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 182 "OH_UdmfData_HasType not contain UDMF_META_PLAIN_TEXT"); 183 } 184 break; 185 } 186 ``` 187 188## DragAction主动发起拖拽 189 190除了通用拖拽以外,ArkUI还提供了使用C API实现主动发起拖拽的能力。以下以文本拖拽为例,详细介绍实现C-API实现主动发起拖拽的基本步骤,以及在开发过程中需要注意的事项。 191 1921. 节点注册事件。 193 194 创建Button节点,设置按钮相关属性,同时需要注册[NODE_ON_TOUCH_INTERCEPT](../reference/apis-arkui/_ark_u_i___native_module.md#arkui_nodeeventtype)事件。 195 196 ```cpp 197 // buttonTouch作为targetId,用于区分不同target的事件。 198 enum { 199 buttonTouch 200 } 201 202 ArkUI_NativeNodeAPI_1 *nodeAPI = nullptr; 203 OH_ArkUI_GetModuleInterface(ARKUI_NATIVE_NODE, ArkUI_NativeNodeAPI_1, nodeAPI); 204 auto button = nodeAPI->createNode(ARKUI_NODE_BUTTON); 205 ArkUI_AttributeItem NODE_Button_SRC_Item = {.string = "button"}; 206 ArkUI_NumberValue buttonWidthValue[] = {200}; 207 ArkUI_AttributeItem buttonWidthItem = {buttonWidthValue, 1}; 208 ArkUI_NumberValue buttonHeightValue[] = {100}; 209 ArkUI_AttributeItem buttonHeightItem = {buttonHeightValue, 1}; 210 ArkUI_NumberValue marginValue[] = {20}; 211 ArkUI_AttributeItem marginItem = {marginValue, 1}; 212 nodeAPI->setAttribute(button, NODE_WIDTH, &buttonWidthItem); 213 nodeAPI->setAttribute(button, NODE_HEIGHT, &buttonHeightItem); 214 nodeAPI->setAttribute(button, NODE_MARGIN, &marginItem); 215 nodeAPI->setAttribute(button, NODE_BUTTON_LABEL, &NODE_Button_SRC_Item); 216 nodeAPI->registerNodeEvent(button, NODE_ON_TOUCH_INTERCEPT, buttonTouch, nullptr); 217 ``` 2182. 接收NODE_ON_TOUCH_INTERCEPT事件。 219 220 DragAction主动发起拖拽需通过事件触发,在NODE_ON_TOUCH_INTERCEPT事件中执行发起拖拽所需的操作,通过[targetId](../reference/apis-arkui/_ark_u_i___native_module.md#oh_arkui_nodeevent_gettargetid)区分不同按钮触发的事件。 221 222 ```cpp 223 nodeAPI->registerNodeEventReceiver([](ArkUI_NodeEvent *event) { 224 auto eventType = OH_ArkUI_NodeEvent_GetEventType(event); 225 auto targetId = OH_ArkUI_NodeEvent_GetTargetId(event); 226 ArkUI_NodeHandle node = OH_ArkUI_NodeEvent_GetNodeHandle(event); 227 auto *dragEvent = OH_ArkUI_NodeEvent_GetDragEvent(event); 228 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 229 "targetId=%{public}d,eventType=%{public}d,", targetId, 230 eventType); 231 switch (eventType) { 232 case NODE_ON_TOUCH_INTERCEPT: { 233 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 234 "ARKUI_NODE_BUTTON touch intercept"); 235 break; 236 switch (targetId) { 237 case buttonTouch: { 238 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", "dragTest button touch!"); 239 } 240 } 241 } 242 case NODE_ON_DROP: { 243 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", "NODE_ON_DROP EventReceiver"); 244 } 245 } 246 }); 247 ``` 2483. 起拖阶段设置。 249 250 在NODE_ON_TOUCH_INTERCEPT事件中,需要对DragAction进行相关设置。为了主动发起拖拽,需要创建[pixelMap](../reference/apis-image-kit/_image___native_module.md#oh_pixelmapnative_createpixelmap),设置[dragPreviewOption](../reference/apis-arkui/drag__and__drop_8h.md#函数)和跟手点,并将拖拽过程中的文本数据设置到DragAction中。 251 252 ```cpp 253 case NODE_ON_TOUCH_INTERCEPT: { 254 // 设置pixelMap 255 uint8_t data[960000]; 256 size_t dataSize = 960000; 257 for (int i = 0; i < dataSize; i++) { 258 data[i] = i + 1; 259 } 260 // 创建参数结构体实例,并设置参数 261 OH_Pixelmap_InitializationOptions *createOpts; 262 OH_PixelmapInitializationOptions_Create(&createOpts); 263 OH_PixelmapInitializationOptions_SetWidth(createOpts, 200); 264 OH_PixelmapInitializationOptions_SetHeight(createOpts, 300); 265 OH_PixelmapInitializationOptions_SetPixelFormat(createOpts, PIXEL_FORMAT_BGRA_8888); 266 OH_PixelmapInitializationOptions_SetAlphaType(createOpts, PIXELMAP_ALPHA_TYPE_UNKNOWN); 267 // 创建Pixelmap实例 268 OH_PixelmapNative *pixelmap = nullptr; 269 OH_PixelmapNative_CreatePixelmap(data, dataSize, createOpts, &pixelmap); 270 OH_PixelmapNative_Rotate(pixelmap, 90.0); 271 OH_PixelmapNative_Opacity(pixelmap, 0.2); 272 OH_PixelmapNative_Scale(pixelmap, 0.8, 1.0); 273 OH_PixelmapNative_Flip(pixelmap, true, true); 274 std::vector<OH_PixelmapNative *> pixelVector; 275 pixelVector.push_back(pixelmap); 276 int returnValue; 277 switch (targetId) { 278 case buttonTouch: { 279 // 创建DragAction 280 auto action1 = OH_ArkUI_CreateDragActionWithNode(node); 281 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 282 "OH_ArkUI_CreateDragActionWithNode returnValue = %{public}p", action1); 283 returnValue = 284 OH_ArkUI_DragAction_SetPixelMaps(action1, pixelVector.data(), pixelVector.size()); 285 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 286 "OH_ArkUI_DragAction_SetPixelMaps returnValue = %{public}d", returnValue); 287 // 设置DragPreviewOption 288 auto *previewOptions1 = OH_ArkUI_CreateDragPreviewOption(); 289 OH_ArkUI_DragPreviewOption_SetScaleMode( 290 previewOptions1, ArkUI_DragPreviewScaleMode::ARKUI_DRAG_PREVIEW_SCALE_DISABLED); 291 OH_ArkUI_DragPreviewOption_SetDefaultShadowEnabled(previewOptions1, true); 292 OH_ArkUI_DragPreviewOption_SetDefaultRadiusEnabled(previewOptions1, true); 293 returnValue = OH_ArkUI_DragAction_SetDragPreviewOption(action1, previewOptions1); 294 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 295 "OH_ArkUI_DragAction_SetDragPreviewOption returnValue = %{public}d", 296 returnValue); 297 // 设置pointerId 298 returnValue = OH_ArkUI_DragAction_SetPointerId(action1, 0); // -1 0 10 299 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 300 "OH_ArkUI_DragAction_SetPointerId returnValue = %{public}d", returnValue); 301 // 设置touchPoint 302 returnValue = OH_ArkUI_DragAction_SetTouchPointX(action1, 200); // -1 0 200 303 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 304 "OH_ArkUI_DragAction_SetTouchPointX returnValue = %{public}d", returnValue); 305 returnValue = OH_ArkUI_DragAction_SetTouchPointY(action1, 200); // -1 0 200 306 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 307 "OH_ArkUI_DragAction_SetTouchPointY returnValue = %{public}d", returnValue); 308 // 设置unifiedData 309 // 创建OH_UdmfRecord对象 310 OH_UdmfRecord *record = OH_UdmfRecord_Create(); 311 // 向OH_UdmfRecord中添加纯文本类型数据 312 OH_UdsPlainText *plainText = OH_UdsPlainText_Create(); 313 int returnStatus; 314 OH_UdsPlainText_SetAbstract(plainText, "this is plainText Abstract example"); 315 OH_UdsPlainText_SetContent(plainText, "this is plainText Content example"); 316 returnStatus = OH_UdmfRecord_AddPlainText(record, plainText); 317 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 318 "dragTest OH_UdmfRecord_AddPlainText returnStatus = %{public}d", returnStatus); 319 // 创建OH_UdmfData对象 320 OH_UdmfData *data = OH_UdmfData_Create(); 321 // 向OH_UdmfData中添加OH_UdmfRecord 322 returnStatus = OH_UdmfData_AddRecord(data, record); 323 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 324 "dragTest OH_UdmfData_AddRecord returnStatus = %{public}d", returnStatus); 325 returnValue = OH_ArkUI_DragAction_SetData(action1, data); 326 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 327 "OH_ArkUI_DragAction_SetData returnValue = %{public}d", returnValue); 328 // startDrag 329 returnValue = OH_ArkUI_StartDrag(action1); 330 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 331 "OH_ArkUI_StartDrag returnValue = %{public}d", returnValue); 332 OH_ArkUI_DragAction_Dispose(action1); 333 } 334 } 335 } 336 ``` 3374. 处理NODE_ON_DROP事件。 338 339 在NODE_ON_DROP事件中,应用可以执行与落入阶段相关的操作。通常情况下,需要从DragEvent中获取拖拽过程中传递的数据,DragAction中的拖拽数据也需要通过DragEvent获取。 340 341 ```cpp 342 case NODE_ON_DROP: { 343 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", "NODE_ON_DROP EventReceiver"); 344 // 获取UDMF data 345 int returnValue; 346 // 创建OH_UdmfData对象 347 OH_UdmfData *data = OH_UdmfData_Create(); 348 returnValue = OH_ArkUI_DragEvent_GetUdmfData(dragEvent, data); 349 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 350 "OH_ArkUI_DragEvent_GetUdmfData returnValue = %{public}d", returnValue); 351 // 判断OH_UdmfData是否有对应的类型 352 bool resultUdmf = OH_UdmfData_HasType(data, UDMF_META_PLAIN_TEXT); 353 if (resultUdmf) { 354 // 获取OH_UdmfData的记录 355 unsigned int recordsCount = 0; 356 OH_UdmfRecord **records = OH_UdmfData_GetRecords(data, &recordsCount); 357 // 获取records中的元素 358 int returnStatus; 359 for (int i = 0; i < recordsCount; i++) { 360 // 从OH_UdmfRecord中获取纯文本类型数据 361 OH_UdsPlainText *plainTextValue = OH_UdsPlainText_Create(); 362 returnStatus = OH_UdmfRecord_GetPlainText(records[i], plainTextValue); 363 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 364 "dragTest OH_UdmfRecord_GetPlainText " 365 "returnStatus= %{public}d", 366 returnStatus); 367 auto getAbstract = OH_UdsPlainText_GetAbstract(plainTextValue); 368 auto getContent = OH_UdsPlainText_GetContent(plainTextValue); 369 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 370 "OH_UdsPlainText_GetAbstract = " 371 "%{public}s, OH_UdsPlainText_GetContent = " 372 "%{public}s", 373 getAbstract, getContent); 374 // 使用结束后销毁指针 375 OH_UdsPlainText_Destroy(plainTextValue); 376 } 377 } else { 378 OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "dragTest", 379 "OH_UdmfData_HasType not contain UDMF_META_PLAIN_TEXT"); 380 } 381 break; 382 } 383 ```