1# @ohos.rpc (RPC通信) 2 3本模块提供进程间通信能力,包括设备内的进程间通信(IPC)和设备间的进程间通信(RPC),前者基于Binder驱动,后者基于软总线驱动。 4 5> **说明:** 6> 7> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8> 9> - 本模块从API version 9开始支持异常返回功能。 10 11## 导入模块 12 13``` 14import rpc from '@ohos.rpc'; 15``` 16 17## ErrorCode<sup>9+</sup> 18 19从API version 9起,IPC支持异常返回功能。错误码对应数值及含义如下。 20 21**系统能力**:SystemCapability.Communication.IPC.Core 22 23 | 名称 | 值 | 说明 | 24 | ------------------------------------- | ------- | --------------------------------------------- | 25 | CHECK_PARAM_ERROR | 401 | 检查参数失败。 | 26 | OS_MMAP_ERROR | 1900001 | 执行系统调用mmap失败。 | 27 | OS_IOCTL_ERROR | 1900002 | 在共享内存文件描述符上执行系统调用ioctl失败。 | 28 | WRITE_TO_ASHMEM_ERROR | 1900003 | 向共享内存写数据失败。 | 29 | READ_FROM_ASHMEM_ERROR | 1900004 | 从共享内存读数据失败。 | 30 | ONLY_PROXY_OBJECT_PERMITTED_ERROR | 1900005 | 只有proxy对象允许该操作。 | 31 | ONLY_REMOTE_OBJECT_PERMITTED_ERROR | 1900006 | 只有remote对象允许该操作。 | 32 | COMMUNICATION_ERROR | 1900007 | 和远端对象进行进程间通信失败。 | 33 | PROXY_OR_REMOTE_OBJECT_INVALID_ERROR | 1900008 | 非法的代理对象或者远端对象。 | 34 | WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR | 1900009 | 向MessageSequence写数据失败。 | 35 | READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR | 1900010 | 读取MessageSequence数据失败。 | 36 | PARCEL_MEMORY_ALLOC_ERROR | 1900011 | 序列化过程中内存分配失败。 | 37 | CALL_JS_METHOD_ERROR | 1900012 | 执行JS回调方法失败。 | 38 | OS_DUP_ERROR | 1900013 | 执行系统调用dup失败。 | 39 40 41## MessageSequence<sup>9+</sup> 42 43 在RPC或IPC过程中,发送方可以使用MessageSequence提供的写方法,将待发送的数据以特定格式写入该对象。接收方可以使用MessageSequence提供的读方法从该对象中读取特定格式的数据。数据格式包括:基础类型及数组、IPC对象、接口描述符和自定义序列化对象。 44 45### create 46 47 static create(): MessageSequence 48 49 静态方法,创建MessageSequence对象。 50 51**系统能力**:SystemCapability.Communication.IPC.Core 52 53**返回值:** 54 55 | 类型 | 说明 | 56 | --------------- | ------------------------------- | 57 | MessageSequence | 返回创建的MessageSequence对象。 | 58 59**示例:** 60 61 ```ts 62 let data = rpc.MessageSequence.create(); 63 console.log("RpcClient: data is " + data); 64 ``` 65 66### reclaim 67 68reclaim(): void 69 70释放不再使用的MessageSequence对象。 71 72**系统能力**:SystemCapability.Communication.IPC.Core 73 74**示例:** 75 76 ```ts 77 let reply = rpc.MessageSequence.create(); 78 reply.reclaim(); 79 ``` 80 81### writeRemoteObject 82 83writeRemoteObject(object: [IRemoteObject](#iremoteobject)): void 84 85序列化远程对象并将其写入MessageSequence对象。 86 87**系统能力**:SystemCapability.Communication.IPC.Core 88 89**参数:** 90 91 | 参数名 | 类型 | 必填 | 说明 | 92 | ------ | ------------------------------- | ---- | ----------------------------------------- | 93 | object | [IRemoteObject](#iremoteobject) | 是 | 要序列化并写入MessageSequence的远程对象。 | 94 95**错误码:** 96 97以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 98 99 | 错误码ID | 错误信息 | 100 | -------- | -------- | 101 | 1900008 | proxy or remote object is invalid | 102 | 1900009 | write data to message sequence failed | 103 104**示例:** 105 106 ```ts 107 class TestRemoteObject extends rpc.RemoteObject { 108 constructor(descriptor) { 109 super(descriptor); 110 } 111 } 112 let data = rpc.MessageSequence.create(); 113 let testRemoteObject = new TestRemoteObject("testObject"); 114 try { 115 data.writeRemoteObject(testRemoteObject); 116 } catch(error) { 117 console.info("Rpc write remote object fail, errorCode " + error.code); 118 console.info("Rpc write remote object fail, errorMessage " + error.message); 119 } 120 ``` 121 122### readRemoteObject 123 124readRemoteObject(): IRemoteObject 125 126从MessageSequence读取远程对象。此方法用于反序列化MessageSequence对象以生成IRemoteObject。远程对象按写入MessageSequence的顺序读取。 127 128**系统能力**:SystemCapability.Communication.IPC.Core 129 130**返回值:** 131 132 | 类型 | 说明 | 133 | ------------------------------- | ------------------ | 134 | [IRemoteObject](#iremoteobject) | 读取到的远程对象。 | 135 136**错误码:** 137 138以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 139 140 | 错误码ID | 错误信息 | 141 | -------- | -------- | 142 | 1900008 | proxy or remote object is invalid | 143 | 1900010 | read data from message sequence failed | 144 145**示例:** 146 147 ```ts 148 class TestRemoteObject extends rpc.RemoteObject { 149 constructor(descriptor) { 150 super(descriptor); 151 } 152 } 153 let data = rpc.MessageSequence.create(); 154 let testRemoteObject = new TestRemoteObject("testObject"); 155 try { 156 data.writeRemoteObject(testRemoteObject); 157 let proxy = data.readRemoteObject(); 158 } catch(error) { 159 console.info("Rpc write remote object fail, errorCode " + error.code); 160 console.info("Rpc write remote object fail, errorMessage " + error.message); 161 } 162 ``` 163 164### writeInterfaceToken 165 166writeInterfaceToken(token: string): void 167 168将接口描述符写入MessageSequence对象,远端对象可使用该信息校验本次通信。 169 170**系统能力**:SystemCapability.Communication.IPC.Core 171 172**参数:** 173 174 | 参数名 | 类型 | 必填 | 说明 | 175 | ------ | ------ | ---- | ------------------ | 176 | token | string | 是 | 字符串类型描述符。 | 177 178**错误码:** 179 180以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 181 182 | 错误码ID | 错误信息 | 183 | -------- | -------- | 184 | 1900009 | write data to message sequence failed | 185 186**示例:** 187 188 ```ts 189 let data = rpc.MessageSequence.create(); 190 try { 191 data.writeInterfaceToken("aaa"); 192 } catch(error) { 193 console.info("rpc write interface fail, errorCode " + error.code); 194 console.info("rpc write interface fail, errorMessage " + error.message); 195 } 196 ``` 197 198### readInterfaceToken 199 200readInterfaceToken(): string 201 202从MessageSequence对象中读取接口描述符,接口描述符按写入MessageSequence的顺序读取,本地对象可使用该信息检验本次通信。 203 204**系统能力**:SystemCapability.Communication.IPC.Core 205 206**返回值:** 207 208 | 类型 | 说明 | 209 | ------ | ------------------------ | 210 | string | 返回读取到的接口描述符。 | 211 212**错误码:** 213 214以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 215 216 | 错误码ID | 错误信息 | 217 | -------- | -------- | 218 | 1900010 | read data from message sequence failed | 219 220**示例:** 221 222```ts 223class Stub extends rpc.RemoteObject { 224 onRemoteRequest(code, data, reply, option) { 225 try { 226 let interfaceToken = data.readInterfaceToken(); 227 console.log("RpcServer: interfaceToken is " + interfaceToken); 228 } catch(error) { 229 console.info("RpcServer: read interfaceToken failed, errorCode " + error.code); 230 console.info("RpcServer: read interfaceToken failed, errorMessage " + error.message); 231 } 232 return true; 233 } 234} 235``` 236 237### getSize 238 239getSize(): number 240 241获取当前创建的MessageSequence对象的数据大小。 242 243**系统能力**:SystemCapability.Communication.IPC.Core 244 245**返回值:** 246 247 | 类型 | 说明 | 248 | ------ | ----------------------------------------------- | 249 | number | 获取的MessageSequence实例的数据大小。以字节为单位。 | 250 251**示例:** 252 253 ```ts 254 let data = rpc.MessageSequence.create(); 255 let size = data.getSize(); 256 console.log("RpcClient: size is " + size); 257 ``` 258 259### getCapacity 260 261getCapacity(): number 262 263获取当前MessageSequence对象的容量大小。 264 265**系统能力**:SystemCapability.Communication.IPC.Core 266 267**返回值:** 268 269 | 类型 | 说明 | 270 | ------ | ----- | 271 | number | 获取的MessageSequence实例的容量大小。以字节为单位。 | 272 273**示例:** 274 275 ```ts 276 let data = rpc.MessageSequence.create(); 277 let result = data.getCapacity(); 278 console.log("RpcClient: capacity is " + result); 279 ``` 280 281### setSize 282 283setSize(size: number): void 284 285设置MessageSequence对象中包含的数据大小。 286 287**系统能力**:SystemCapability.Communication.IPC.Core 288 289**参数:** 290 291 | 参数名 | 类型 | 必填 | 说明 | 292 | ------ | ------ | ---- | ------ | 293 | size | number | 是 | MessageSequence实例的数据大小。以字节为单位。 | 294 295**示例:** 296 297 ```ts 298 let data = rpc.MessageSequence.create(); 299 try { 300 data.setSize(16); 301 console.log("RpcClient: setSize is " + data.getSize()); 302 } catch(error) { 303 console.info("rpc set size of MessageSequence fail, errorCode " + error.code); 304 console.info("rpc set size of MessageSequence fail, errorMessage " + error.message); 305 } 306 ``` 307 308### setCapacity 309 310setCapacity(size: number): void 311 312设置MessageSequence对象的存储容量。 313 314**系统能力**:SystemCapability.Communication.IPC.Core 315 316**参数:** 317 318 | 参数名 | 类型 | 必填 | 说明 | 319 | ------ | ------ | ---- | --------------------------------------------- | 320 | size | number | 是 | MessageSequence实例的存储容量。以字节为单位。 | 321 322**错误码:** 323 324以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 325 326 | 错误码ID | 错误信息 | 327 | -------- | -------- | 328 | 1900011 | parcel memory alloc failed | 329 330**示例:** 331 332 ```ts 333 let data = rpc.MessageSequence.create(); 334 try { 335 data.setCapacity(100); 336 console.log("RpcClient: setCapacity is " + data.getCapacity()); 337 } catch(error) { 338 console.info("rpc memory alloc fail, errorCode " + error.code); 339 console.info("rpc memory alloc fail, errorMessage " + error.message); 340 } 341 ``` 342 343### getWritableBytes 344 345getWritableBytes(): number 346 347获取MessageSequence的可写字节空间大小。 348 349**系统能力**:SystemCapability.Communication.IPC.Core 350 351**返回值:** 352 353 | 类型 | 说明 | 354 | ------ | ------ | 355 | number | 获取到的MessageSequence实例的可写字节空间。以字节为单位。 | 356 357**示例:** 358 359```ts 360class Stub extends rpc.RemoteObject { 361 onRemoteRequest(code, data, reply, option) { 362 let getWritableBytes = data.getWritableBytes(); 363 console.log("RpcServer: getWritableBytes is " + getWritableBytes); 364 return true; 365 } 366} 367``` 368 369### getReadableBytes 370 371getReadableBytes(): number 372 373获取MessageSequence的可读字节空间。 374 375**系统能力**:SystemCapability.Communication.IPC.Core 376 377**返回值:** 378 379 | 类型 | 说明 | 380 | ------ | ------- | 381 | number | 获取到的MessageSequence实例的可读字节空间。以字节为单位。 | 382 383**示例:** 384 385 ```ts 386class Stub extends rpc.RemoteObject { 387 onRemoteRequest(code, data, reply, option) { 388 let result = data.getReadableBytes(); 389 console.log("RpcServer: getReadableBytes is " + result); 390 return true; 391 } 392} 393 ``` 394 395### getReadPosition 396 397getReadPosition(): number 398 399获取MessageSequence的读位置。 400 401**系统能力**:SystemCapability.Communication.IPC.Core 402 403**返回值:** 404 405 | 类型 | 说明 | 406 | ------ | ------ | 407 | number | 返回MessageSequence实例中的当前读取位置。 | 408 409**示例:** 410 411 ```ts 412 let data = rpc.MessageSequence.create(); 413 let readPos = data.getReadPosition(); 414 console.log("RpcClient: readPos is " + readPos); 415 ``` 416 417### getWritePosition 418 419getWritePosition(): number 420 421获取MessageSequence的写位置。 422 423**系统能力**:SystemCapability.Communication.IPC.Core 424 425**返回值:** 426 427 | 类型 | 说明 | 428 | ------ | ----- | 429 | number | 返回MessageSequence实例中的当前写入位置。 | 430 431**示例:** 432 433 ```ts 434 let data = rpc.MessageSequence.create(); 435 data.writeInt(10); 436 let bwPos = data.getWritePosition(); 437 console.log("RpcClient: bwPos is " + bwPos); 438 ``` 439 440### rewindRead 441 442rewindRead(pos: number): void 443 444重新偏移读取位置到指定的位置。 445 446**系统能力**:SystemCapability.Communication.IPC.Core 447 448**参数:** 449 450 | 参数名 | 类型 | 必填 | 说明 | 451 | ------ | ------ | ---- | ------- | 452 | pos | number | 是 | 开始读取数据的目标位置。 | 453 454**示例:** 455 456 ```ts 457 let data = rpc.MessageSequence.create(); 458 data.writeInt(12); 459 data.writeString("sequence"); 460 let number = data.readInt(); 461 console.log("RpcClient: number is " + number); 462 try { 463 data.rewindRead(0); 464 } catch(error) { 465 console.info("rpc rewind read data fail, errorCode " + error.code); 466 console.info("rpc rewind read data fail, errorMessage " + error.message); 467 } 468 let number2 = data.readInt(); 469 console.log("RpcClient: rewindRead is " + number2); 470 ``` 471 472### rewindWrite 473 474rewindWrite(pos: number): void 475 476重新偏移写位置到指定的位置。 477 478**系统能力**:SystemCapability.Communication.IPC.Core 479 480**参数:** 481 482 | 参数名 | 类型 | 必填 | 说明 | 483 | ------ | ------ | ---- | ----- | 484 | pos | number | 是 | 开始写入数据的目标位置。 | 485 486**示例:** 487 488 ```ts 489 let data = rpc.MessageSequence.create(); 490 data.writeInt(4); 491 try { 492 data.rewindWrite(0); 493 } catch(error) { 494 console.info("rpc rewind read data fail, errorCode " + error.code); 495 console.info("rpc rewind read data fail, errorMessage " + error.message); 496 } 497 data.writeInt(5); 498 let number = data.readInt(); 499 console.log("RpcClient: rewindWrite is: " + number); 500 ``` 501 502### writeByte 503 504writeByte(val: number): void 505 506将字节值写入MessageSequence实例。 507 508**系统能力**:SystemCapability.Communication.IPC.Core 509 510**参数:** 511 512 | 参数名 | 类型 | 必填 | 说明 | 513 | ------ | ------ | ---- | ----- | 514 | val | number | 是 | 要写入的字节值。 | 515 516**错误码:** 517 518以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 519 520 | 错误码ID | 错误信息 | 521 | -------- | ------- | 522 | 1900009 | write data to message sequence failed | 523 524**示例:** 525 526 ```ts 527 let data = rpc.MessageSequence.create(); 528 try { 529 data.writeByte(2); 530 } catch(error) { 531 console.info("rpc write byte fail, errorCode " + error.code); 532 console.info("rpc write byte fail, errorMessage" + error.message); 533 } 534 ``` 535 536### readByte 537 538readByte(): number 539 540从MessageSequence实例读取字节值。 541 542**系统能力**:SystemCapability.Communication.IPC.Core 543 544**返回值:** 545 546 | 类型 | 说明 | 547 | ------ | ----- | 548 | number | 返回字节值。 | 549 550**错误码:** 551 552以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 553 554 | 错误码ID | 错误信息 | 555 | ------- | -------- | 556 | 1900010 | read data from message sequence failed | 557 558**示例:** 559 560 ```ts 561 let data = rpc.MessageSequence.create(); 562 try { 563 data.writeByte(2); 564 } catch(error) { 565 console.info("rpc write byte fail, errorCode " + error.code); 566 console.info("rpc write byte fail, errorMessage" + error.message); 567 } 568 try { 569 let ret = data.readByte(); 570 console.log("RpcClient: readByte is: " + ret); 571 } catch(error) { 572 console.info("rpc write byte fail, errorCode " + error.code); 573 console.info("rpc write byte fail, errorMessage" + error.message); 574 } 575 ``` 576 577### writeShort 578 579writeShort(val: number): void 580 581将短整数值写入MessageSequence实例。 582 583**系统能力**:SystemCapability.Communication.IPC.Core 584 585**参数:** 586 587 | 参数名 | 类型 | 必填 | 说明 | 588 | ------ | ------ | --- | --- | 589 | val | number | 是 | 要写入的短整数值。 | 590 591**错误码:** 592 593以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 594 595 | 错误码ID | 错误信息 | 596 | -------- | -------- | 597 | 1900009 | write data to message sequence failed | 598 599**示例:** 600 601 ```ts 602 let data = rpc.MessageSequence.create(); 603 try { 604 data.writeShort(8); 605 } catch(error) { 606 console.info("rpc write short fail, errorCode " + error.code); 607 console.info("rpc write short fail, errorMessage" + error.message); 608 } 609 ``` 610 611### readShort 612 613readShort(): number 614 615从MessageSequence实例读取短整数值。 616 617**系统能力**:SystemCapability.Communication.IPC.Core 618 619**返回值:** 620 621 | 类型 | 说明 | 622 | ------ | -------------- | 623 | number | 返回短整数值。 | 624 625**错误码:** 626 627以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 628 629 | 错误码ID | 错误信息 | 630 | -------- | -------- | 631 | 1900010 | read data from message sequence failed | 632 633**示例:** 634 635 ```ts 636 let data = rpc.MessageSequence.create(); 637 try { 638 data.writeShort(8); 639 } catch(error) { 640 console.info("rpc write short fail, errorCode " + error.code); 641 console.info("rpc write short fail, errorMessage" + error.message); 642 } 643 try { 644 let ret = data.readShort(); 645 console.log("RpcClient: readByte is: " + ret); 646 } catch(error) { 647 console.info("rpc read short fail, errorCode " + error.code); 648 console.info("rpc read short fail, errorMessage" + error.message); 649 } 650 ``` 651 652### writeInt 653 654writeInt(val: number): void 655 656将整数值写入MessageSequence实例。 657 658**系统能力**:SystemCapability.Communication.IPC.Core 659 660**参数:** 661 662 | 参数名 | 类型 | 必填 | 说明 | 663 | ------ | ------ | ---- | ---------------- | 664 | val | number | 是 | 要写入的整数值。 | 665 666**错误码:** 667 668以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 669 670 | 错误码ID | 错误信息 | 671 | -------- | -------- | 672 | 1900009 | write data to message sequence failed | 673 674**示例:** 675 676 ```ts 677 let data = rpc.MessageSequence.create(); 678 try { 679 data.writeInt(10); 680 } catch(error) { 681 console.info("rpc write int fail, errorCode " + error.code); 682 console.info("rpc write int fail, errorMessage" + error.message); 683 } 684 ``` 685 686### readInt 687 688readInt(): number 689 690从MessageSequence实例读取整数值。 691 692**系统能力**:SystemCapability.Communication.IPC.Core 693 694**返回值:** 695 696 | 类型 | 说明 | 697 | ------ | ------------ | 698 | number | 返回整数值。 | 699 700**错误码:** 701 702以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 703 704 | 错误码ID | 错误信息 | 705 | -------- | -------- | 706 | 1900010 | read data from message sequence failed | 707 708**示例:** 709 710 ```ts 711 let data = rpc.MessageSequence.create(); 712 try { 713 data.writeInt(10); 714 } catch(error) { 715 console.info("rpc write int fail, errorCode " + error.code); 716 console.info("rpc write int fail, errorMessage" + error.message); 717 } 718 try { 719 let ret = data.readInt(); 720 console.log("RpcClient: readInt is " + ret); 721 } catch(error) { 722 console.info("rpc read int fail, errorCode " + error.code); 723 console.info("rpc read int fail, errorMessage" + error.message); 724 } 725 ``` 726 727### writeLong 728 729writeLong(val: number): void 730 731将长整数值写入MessageSequence实例。 732 733**系统能力**:SystemCapability.Communication.IPC.Core 734 735**参数:** 736 737 | 参数名 | 类型 | 必填 | 说明 | 738 | ------ | ------ | ---- | ---------------- | 739 | val | number | 是 | 要写入的长整数值 | 740 741**错误码:** 742 743以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 744 745 | 错误码ID | 错误信息 | 746 | -------- | -------- | 747 | 1900009 | write data to message sequence failed | 748 749**示例:** 750 751 ```ts 752 let data = rpc.MessageSequence.create(); 753 try { 754 data.writeLong(10000); 755 } catch(error) { 756 console.info("rpc write long fail, errorCode " + error.code); 757 console.info("rpc write long fail, errorMessage" + error.message); 758 } 759 ``` 760 761### readLong 762 763readLong(): number 764 765从MessageSequence实例中读取长整数值。 766 767**系统能力**:SystemCapability.Communication.IPC.Core 768 769**返回值:** 770 771 | 类型 | 说明 | 772 | ------ | -------------- | 773 | number | 返回长整数值。 | 774 775**错误码:** 776 777以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 778 779 | 错误码ID | 错误信息 | 780 | -------- | -------- | 781 | 1900010 | read data from message sequence failed | 782 783**示例:** 784 785 ```ts 786 let data = rpc.MessageSequence.create(); 787 try { 788 data.writeLong(10000); 789 } catch(error) { 790 console.info("rpc write long fail, errorCode " + error.code); 791 console.info("rpc write long fail, errorMessage" + error.message); 792 } 793 try { 794 let ret = data.readLong(); 795 console.log("RpcClient: readLong is " + ret); 796 } catch(error) { 797 console.info("rpc read long fail, errorCode " + error.code); 798 console.info("rpc read long fail, errorMessage" + error.message); 799 } 800 ``` 801 802### writeFloat 803 804writeFloat(val: number): void 805 806将浮点值写入MessageSequence实例。 807 808**系统能力**:SystemCapability.Communication.IPC.Core 809 810**参数:** 811 812 | 参数名 | 类型 | 必填 | 说明 | 813 | ------ | ------ | ---- | ----- | 814 | val | number | 是 | 要写入的浮点值。 | 815 816**错误码:** 817 818以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 819 820 | 错误码ID | 错误信息 | 821 | -------- | -------- | 822 | 1900009 | write data to message sequence failed | 823 824**示例:** 825 826 ```ts 827 let data = rpc.MessageSequence.create(); 828 try { 829 data.writeFloat(1.2); 830 } catch(error) { 831 console.info("rpc write float fail, errorCode " + error.code); 832 console.info("rpc write float fail, errorMessage" + error.message); 833 } 834 ``` 835 836### readFloat 837 838readFloat(): number 839 840从MessageSequence实例中读取浮点值。 841 842**系统能力**:SystemCapability.Communication.IPC.Core 843 844**返回值:** 845 846 | 类型 | 说明 | 847 | ------ | ------------ | 848 | number | 返回浮点值。 | 849 850**错误码:** 851 852以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 853 854 | 错误码ID | 错误信息 | 855 | -------- | -------- | 856 | 1900010 | read data from message sequence failed | 857 858**示例:** 859 860 ```ts 861 let data = rpc.MessageSequence.create(); 862 try { 863 data.writeFloat(1.2); 864 } catch(error) { 865 console.info("rpc write float fail, errorCode " + error.code); 866 console.info("rpc write float fail, errorMessage" + error.message); 867 } 868 try { 869 let ret = data.readFloat(); 870 console.log("RpcClient: readFloat is " + ret); 871 } catch(error) { 872 console.info("rpc read float fail, errorCode " + error.code); 873 console.info("rpc read float fail, errorMessage" + error.message); 874 } 875 ``` 876 877### writeDouble 878 879writeDouble(val: number): void 880 881将双精度浮点值写入MessageSequence实例。 882 883**系统能力**:SystemCapability.Communication.IPC.Core 884 885**参数:** 886 887 | 参数名 | 类型 | 必填 | 说明 | 888 | ------ | ------ | ---- | ---------------------- | 889 | val | number | 是 | 要写入的双精度浮点值。 | 890 891**错误码:** 892 893以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 894 895 | 错误码ID | 错误信息 | 896 | -------- | -------- | 897 | 1900009 | write data to message sequence failed | 898 899**示例:** 900 901 ```ts 902 let data = rpc.MessageSequence.create(); 903 try { 904 data.writeDouble(10.2); 905 } catch(error) { 906 console.info("rpc read float fail, errorCode " + error.code); 907 console.info("rpc read float fail, errorMessage" + error.message); 908 } 909 ``` 910 911### readDouble 912 913readDouble(): number 914 915从MessageSequence实例读取双精度浮点值。 916 917**系统能力**:SystemCapability.Communication.IPC.Core 918 919**返回值:** 920 921 | 类型 | 说明 | 922 | ------ | ------------------ | 923 | number | 返回双精度浮点值。 | 924 925**错误码:** 926 927以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 928 929 | 错误码ID | 错误信息 | 930 | -------- | -------- | 931 | 1900010 | read data from message sequence failed | 932 933**示例:** 934 935 ```ts 936 let data = rpc.MessageSequence.create(); 937 try { 938 data.writeDouble(10.2); 939 } catch(error) { 940 console.info("rpc write double fail, errorCode " + error.code); 941 console.info("rpc write double fail, errorMessage" + error.message); 942 } 943 try { 944 let ret = data.readDouble(); 945 console.log("RpcClient: readDouble is " + ret); 946 } catch(error) { 947 console.info("rpc read double fail, errorCode " + error.code); 948 console.info("rpc read double fail, errorMessage" + error.message); 949 } 950 ``` 951 952### writeBoolean 953 954writeBoolean(val: boolean): void 955 956将布尔值写入MessageSequence实例。 957 958**系统能力**:SystemCapability.Communication.IPC.Core 959 960**参数:** 961 962 | 参数名 | 类型 | 必填 | 说明 | 963 | ------ | ------- | ---- | ---------------- | 964 | val | boolean | 是 | 要写入的布尔值。 | 965 966**错误码:** 967 968以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 969 970 | 错误码ID | 错误信息 | 971 | -------- | -------- | 972 | 1900009 | write data to message sequence failed | 973 974**示例:** 975 976 ```ts 977 let data = rpc.MessageSequence.create(); 978 try { 979 data.writeBoolean(false); 980 } catch(error) { 981 console.info("rpc write boolean fail, errorCode " + error.code); 982 console.info("rpc write boolean fail, errorMessage" + error.message); 983 } 984 ``` 985 986### readBoolean 987 988readBoolean(): boolean 989 990从MessageSequence实例读取布尔值。 991 992**系统能力**:SystemCapability.Communication.IPC.Core 993 994**返回值:** 995 996 | 类型 | 说明 | 997 | ------- | -------------------- | 998 | boolean | 返回读取到的布尔值。 | 999 1000**错误码:** 1001 1002以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1003 1004 | 错误码ID | 错误信息 | 1005 | -------- | -------- | 1006 | 1900010 | read data from message sequence failed | 1007 1008**示例:** 1009 1010 ```ts 1011 let data = rpc.MessageSequence.create(); 1012 try { 1013 data.writeBoolean(false); 1014 } catch(error) { 1015 console.info("rpc write boolean fail, errorCode " + error.code); 1016 console.info("rpc write boolean fail, errorMessage" + error.message); 1017 } 1018 try { 1019 let ret = data.readBoolean(); 1020 console.log("RpcClient: readBoolean is " + ret); 1021 } catch(error) { 1022 console.info("rpc read boolean fail, errorCode " + error.code); 1023 console.info("rpc read boolean fail, errorMessage" + error.message); 1024 } 1025 ``` 1026 1027### writeChar 1028 1029writeChar(val: number): void 1030 1031将单个字符值写入MessageSequence实例。 1032 1033**系统能力**:SystemCapability.Communication.IPC.Core 1034 1035**参数:** 1036 1037 | 参数名 | 类型 | 必填 | 说明 | 1038 | ------ | ------ | ---- | -------------------- | 1039 | val | number | 是 | 要写入的单个字符值。 | 1040 1041**错误码:** 1042 1043以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1044 1045 | 错误码ID | 错误信息 | 1046 | -------- | -------- | 1047 | 1900009 | write data to message sequence failed | 1048 1049**示例:** 1050 1051 ```ts 1052 let data = rpc.MessageSequence.create(); 1053 try { 1054 data.writeChar(97); 1055 } catch(error) { 1056 console.info("rpc write char fail, errorCode " + error.code); 1057 console.info("rpc write char fail, errorMessage" + error.message); 1058 } 1059 ``` 1060 1061### readChar 1062 1063readChar(): number 1064 1065从MessageSequence实例中读取单个字符值。 1066 1067**系统能力**:SystemCapability.Communication.IPC.Core 1068 1069**返回值:** 1070 1071 | 类型 | 说明 | 1072 | ------ | ---- | 1073 | number | 返回单个字符值。 | 1074 1075**错误码:** 1076 1077以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1078 1079 | 错误码ID | 错误信息 | 1080 | -------- | -------- | 1081 | 1900010 | read data from message sequence failed | 1082 1083**示例:** 1084 1085 ```ts 1086 let data = rpc.MessageSequence.create(); 1087 try { 1088 data.writeChar(97); 1089 } catch(error) { 1090 console.info("rpc write char fail, errorCode " + error.code); 1091 console.info("rpc write char fail, errorMessage" + error.message); 1092 } 1093 try { 1094 let ret = data.readChar(); 1095 console.log("RpcClient: readChar is " + ret); 1096 } catch(error) { 1097 console.info("rpc read char fail, errorCode " + error.code); 1098 console.info("rpc read char fail, errorMessage" + error.message); 1099 } 1100 ``` 1101 1102### writeString 1103 1104writeString(val: string): void 1105 1106将字符串值写入MessageSequence实例。 1107 1108**系统能力**:SystemCapability.Communication.IPC.Core 1109 1110**参数:** 1111 1112 | 参数名 | 类型 | 必填 | 说明 | 1113 | ------ | ------ | ---- | ----------------------------------------- | 1114 | val | string | 是 | 要写入的字符串值,其长度应小于40960字节。 | 1115 1116**错误码:** 1117 1118以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1119 1120 | 错误码ID | 错误信息 | 1121 | -------- | -------- | 1122 | 1900009 | write data to message sequence failed | 1123 1124**示例:** 1125 1126 ```ts 1127 let data = rpc.MessageSequence.create(); 1128 try { 1129 data.writeString('abc'); 1130 } catch(error) { 1131 console.info("rpc write string fail, errorCode " + error.code); 1132 console.info("rpc write string fail, errorMessage" + error.message); 1133 } 1134 ``` 1135 1136### readString 1137 1138readString(): string 1139 1140从MessageSequence实例读取字符串值。 1141 1142**系统能力**:SystemCapability.Communication.IPC.Core 1143 1144**返回值:** 1145 1146 | 类型 | 说明 | 1147 | ------ | -------------- | 1148 | string | 返回字符串值。 | 1149 1150**错误码:** 1151 1152以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1153 1154 | 错误码ID | 错误信息 | 1155 | -------- | -------- | 1156 | 1900010 | read data from message sequence failed | 1157 1158**示例:** 1159 1160 ```ts 1161 let data = rpc.MessageSequence.create(); 1162 try { 1163 data.writeString('abc'); 1164 } catch(error) { 1165 console.info("rpc write string fail, errorCode " + error.code); 1166 console.info("rpc write string fail, errorMessage" + error.message); 1167 } 1168 try { 1169 let ret = data.readString(); 1170 console.log("RpcClient: readString is " + ret); 1171 } catch(error) { 1172 console.info("rpc read string fail, errorCode " + error.code); 1173 console.info("rpc read string fail, errorMessage" + error.message); 1174 } 1175 ``` 1176 1177### writeParcelable 1178 1179writeParcelable(val: Parcelable): void 1180 1181将自定义序列化对象写入MessageSequence实例。 1182 1183**系统能力**:SystemCapability.Communication.IPC.Core 1184 1185**参数:** 1186 1187 | 参数名 | 类型 | 必填 | 说明 | 1188 | ------ | --------- | ---- | ------ | 1189 | val | Parcelable | 是 | 要写入的可序列对象。 | 1190 1191**错误码:** 1192 1193以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1194 1195 | 错误码ID | 错误信息 | 1196 | -------- | -------- | 1197 | 1900009 | write data to message sequence failed | 1198 1199**示例:** 1200 1201 ```ts 1202 class MySequenceable { 1203 num: number; 1204 str: string; 1205 constructor(num, str) { 1206 this.num = num; 1207 this.str = str; 1208 } 1209 marshalling(messageSequence) { 1210 messageSequence.writeInt(this.num); 1211 messageSequence.writeString(this.str); 1212 return true; 1213 } 1214 unmarshalling(messageSequence) { 1215 this.num = messageSequence.readInt(); 1216 this.str = messageSequence.readString(); 1217 return true; 1218 } 1219 } 1220 let parcelable = new MySequenceable(1, "aaa"); 1221 let data = rpc.MessageSequence.create(); 1222 try { 1223 data.writeParcelable(parcelable); 1224 } catch(error) { 1225 console.info("rpc write parcelable fail, errorCode " + error.code); 1226 console.info("rpc write parcelable fail, errorMessage" + error.message); 1227 } 1228 ``` 1229 1230### readParcelable 1231 1232readParcelable(dataIn: Parcelable): void 1233 1234从MessageSequence实例中读取成员变量到指定的对象(dataIn)。 1235 1236**系统能力**:SystemCapability.Communication.IPC.Core 1237 1238**参数:** 1239 1240 | 参数名 | 类型 | 必填 | 说明 | 1241 | ------ | ------------------------- | ---- | ----------------------------------------- | 1242 | dataIn | Parcelable | 是 | 需要从MessageSequence读取成员变量的对象。 | 1243 1244**错误码:** 1245 1246以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1247 1248 | 错误码ID | 错误信息 | 1249 | -------- | -------- | 1250 | 1900010 | read data from message sequence failed | 1251 | 1900012 | call js callback function failed | 1252 1253**示例:** 1254 1255 ```ts 1256 class MySequenceable { 1257 num: number; 1258 str: string; 1259 constructor(num, str) { 1260 this.num = num; 1261 this.str = str; 1262 } 1263 marshalling(messageSequence) { 1264 messageSequence.writeInt(this.num); 1265 messageSequence.writeString(this.str); 1266 return true; 1267 } 1268 unmarshalling(messageSequence) { 1269 this.num = messageSequence.readInt(); 1270 this.str = messageSequence.readString(); 1271 return true; 1272 } 1273 } 1274 let parcelable = new MySequenceable(1, "aaa"); 1275 let data = rpc.MessageSequence.create(); 1276 data.writeParcelable(parcelable); 1277 let ret = new MySequenceable(0, ""); 1278 try { 1279 data.readParcelable(ret); 1280 }catch(error) { 1281 console.info("rpc read parcelable fail, errorCode " + error.code); 1282 console.info("rpc read parcelable fail, errorMessage" + error.message); 1283 } 1284 ``` 1285 1286### writeByteArray 1287 1288writeByteArray(byteArray: number[]): void 1289 1290将字节数组写入MessageSequence实例。 1291 1292**系统能力**:SystemCapability.Communication.IPC.Core 1293 1294**参数:** 1295 1296 | 参数名 | 类型 | 必填 | 说明 | 1297 | --------- | -------- | ---- | ------------------ | 1298 | byteArray | number[] | 是 | 要写入的字节数组。 | 1299 1300**错误码:** 1301 1302以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1303 1304 | 错误码ID | 错误信息 | 1305 | -------- | -------- | 1306 | 1900009 | write data to message sequence failed | 1307 1308**示例:** 1309 1310 ```ts 1311 let data = rpc.MessageSequence.create(); 1312 let ByteArrayVar = [1, 2, 3, 4, 5]; 1313 try { 1314 data.writeByteArray(ByteArrayVar); 1315 } catch(error) { 1316 console.info("rpc write byteArray fail, errorCode " + error.code); 1317 console.info("rpc write byteArray fail, errorMessage" + error.message); 1318 } 1319 ``` 1320 1321### readByteArray 1322 1323readByteArray(dataIn: number[]): void 1324 1325从MessageSequence实例读取字节数组。 1326 1327**系统能力**:SystemCapability.Communication.IPC.Core 1328 1329**参数:** 1330 1331 | 参数名 | 类型 | 必填 | 说明 | 1332 | ------ | -------- | ---- | ------------------ | 1333 | dataIn | number[] | 是 | 要读取的字节数组。 | 1334 1335**错误码:** 1336 1337以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1338 1339 | 错误码ID | 错误信息 | 1340 | -------- | -------- | 1341 | 1900010 | read data from message sequence failed | 1342 1343**示例:** 1344 1345 ```ts 1346 let data = rpc.MessageSequence.create(); 1347 let ByteArrayVar = [1, 2, 3, 4, 5]; 1348 try { 1349 data.writeByteArray(ByteArrayVar); 1350 } catch(error) { 1351 console.info("rpc write byteArray fail, errorCode " + error.code); 1352 console.info("rpc write byteArray fail, errorMessage" + error.message); 1353 } 1354 try { 1355 let array = new Array(5); 1356 data.readByteArray(array); 1357 } catch(error) { 1358 console.info("rpc write byteArray fail, errorCode " + error.code); 1359 console.info("rpc write byteArray fail, errorMessage" + error.message); 1360 } 1361 ``` 1362 1363### readByteArray 1364 1365readByteArray(): number[] 1366 1367从MessageSequence实例中读取字节数组。 1368 1369**系统能力**:SystemCapability.Communication.IPC.Core 1370 1371**返回值:** 1372 1373 | 类型 | 说明 | 1374 | -------- | -------------- | 1375 | number[] | 返回字节数组。 | 1376 1377**错误码:** 1378 1379以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1380 1381 | 错误码ID | 错误信息 | 1382 | -------- | -------- | 1383 | 1900010 | read data from message sequence failed | 1384 1385**示例:** 1386 1387 ```ts 1388 let data = rpc.MessageSequence.create(); 1389 let byteArrayVar = [1, 2, 3, 4, 5]; 1390 try { 1391 data.writeByteArray(byteArrayVar); 1392 } catch(error) { 1393 console.info("rpc write byteArray fail, errorCode " + error.code); 1394 console.info("rpc write byteArray fail, errorMessage" + error.message); 1395 } 1396 try { 1397 let array = data.readByteArray(); 1398 console.log("RpcClient: readByteArray is " + array); 1399 } catch(error) { 1400 console.info("rpc read byteArray fail, errorCode " + error.code); 1401 console.info("rpc read byteArray fail, errorMessage" + error.message); 1402 } 1403 ``` 1404 1405### writeShortArray 1406 1407writeShortArray(shortArray: number[]): void 1408 1409将短整数数组写入MessageSequence实例。 1410 1411**系统能力**:SystemCapability.Communication.IPC.Core 1412 1413**参数:** 1414 1415 | 参数名 | 类型 | 必填 | 说明 | 1416 | ---------- | -------- | ---- | -------------------- | 1417 | shortArray | number[] | 是 | 要写入的短整数数组。 | 1418 1419**错误码:** 1420 1421以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1422 1423 | 错误码ID | 错误信息 | 1424 | -------- | -------- | 1425 | 1900009 | write data to message sequence failed | 1426 1427**示例:** 1428 1429 ```ts 1430 let data = rpc.MessageSequence.create(); 1431 try { 1432 data.writeShortArray([11, 12, 13]); 1433 } catch(error) { 1434 console.info("rpc read byteArray fail, errorCode " + error.code); 1435 console.info("rpc read byteArray fail, errorMessage" + error.message); 1436 } 1437 ``` 1438 1439### readShortArray 1440 1441readShortArray(dataIn: number[]): void 1442 1443从MessageSequence实例中读取短整数数组。 1444 1445**系统能力**:SystemCapability.Communication.IPC.Core 1446 1447**参数:** 1448 1449 | 参数名 | 类型 | 必填 | 说明 | 1450 | ------ | -------- | ---- | -------------------- | 1451 | dataIn | number[] | 是 | 要读取的短整数数组。 | 1452 1453**错误码:** 1454 1455以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1456 1457 | 错误码ID | 错误信息 | 1458 | -------- | -------- | 1459 | 1900010 | read data from message sequence failed | 1460 1461**示例:** 1462 1463 ```ts 1464 let data = rpc.MessageSequence.create(); 1465 try { 1466 data.writeShortArray([11, 12, 13]); 1467 } catch(error) { 1468 console.info("rpc write shortArray fail, errorCode " + error.code); 1469 console.info("rpc write shortArray fail, errorMessage" + error.message); 1470 } 1471 try { 1472 let array = new Array(3); 1473 data.readShortArray(array); 1474 } catch(error) { 1475 console.info("rpc read shortArray fail, errorCode " + error.code); 1476 console.info("rpc read shortArray fail, errorMessage" + error.message); 1477 } 1478 ``` 1479 1480### readShortArray 1481 1482readShortArray(): number[] 1483 1484从MessageSequence实例中读取短整数数组。 1485 1486**系统能力**:SystemCapability.Communication.IPC.Core 1487 1488**返回值:** 1489 1490 | 类型 | 说明 | 1491 | -------- | ---------------- | 1492 | number[] | 返回短整数数组。 | 1493 1494**错误码:** 1495 1496以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1497 1498 | 错误码ID | 错误信息 | 1499 | -------- | -------- | 1500 | 1900010 | read data from message sequence failed | 1501 1502**示例:** 1503 1504 ```ts 1505 let data = rpc.MessageSequence.create(); 1506 try { 1507 data.writeShortArray([11, 12, 13]); 1508 } catch(error) { 1509 console.info("rpc write shortArray fail, errorCode " + error.code); 1510 console.info("rpc write shortArray fail, errorMessage" + error.message); 1511 } 1512 try { 1513 let array = data.readShortArray(); 1514 console.log("RpcClient: readShortArray is " + array); 1515 } catch(error) { 1516 console.info("rpc read shortArray fail, errorCode " + error.code); 1517 console.info("rpc read shortArray fail, errorMessage" + error.message); 1518 } 1519 ``` 1520 1521### writeIntArray 1522 1523writeIntArray(intArray: number[]): void 1524 1525将整数数组写入MessageSequence实例。 1526 1527**系统能力**:SystemCapability.Communication.IPC.Core 1528 1529**参数:** 1530 1531 | 参数名 | 类型 | 必填 | 说明 | 1532 | -------- | -------- | ---- | ------------------ | 1533 | intArray | number[] | 是 | 要写入的整数数组。 | 1534 1535**错误码:** 1536 1537以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1538 1539 | 错误码ID | 错误信息 | 1540 | -------- | -------- | 1541 | 1900009 | write data to message sequence failed | 1542 1543**示例:** 1544 1545 ```ts 1546 let data = rpc.MessageSequence.create(); 1547 try { 1548 data.writeIntArray([100, 111, 112]); 1549 } catch(error) { 1550 console.info("rpc write intArray fail, errorCode " + error.code); 1551 console.info("rpc write intArray fail, errorMessage" + error.message); 1552 } 1553 ``` 1554 1555### readIntArray 1556 1557readIntArray(dataIn: number[]): void 1558 1559从MessageSequence实例中读取整数数组。 1560 1561**系统能力**:SystemCapability.Communication.IPC.Core 1562 1563**参数:** 1564 1565 | 参数名 | 类型 | 必填 | 说明 | 1566 | ------ | -------- | ---- | ------------------ | 1567 | dataIn | number[] | 是 | 要读取的整数数组。 | 1568 1569**错误码:** 1570 1571以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1572 1573 | 错误码ID | 错误信息 | 1574 | -------- | -------- | 1575 | 1900010 | read data from message sequence failed | 1576 1577**示例:** 1578 1579 ```ts 1580 let data = rpc.MessageSequence.create(); 1581 try { 1582 data.writeIntArray([100, 111, 112]); 1583 } catch(error) { 1584 console.info("rpc write intArray fail, errorCode " + error.code); 1585 console.info("rpc write intArray fail, errorMessage" + error.message); 1586 } 1587 let array = new Array(3); 1588 try { 1589 data.readIntArray(array); 1590 } catch(error) { 1591 console.info("rpc read intArray fail, errorCode " + error.code); 1592 console.info("rpc read intArray fail, errorMessage" + error.message); 1593 } 1594 ``` 1595 1596### readIntArray 1597 1598readIntArray(): number[] 1599 1600从MessageSequence实例中读取整数数组。 1601 1602**系统能力**:SystemCapability.Communication.IPC.Core 1603 1604**返回值:** 1605 1606 | 类型 | 说明 | 1607 | -------- | -------------- | 1608 | number[] | 返回整数数组。 | 1609 1610**错误码:** 1611 1612以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1613 1614 | 错误码ID | 错误信息 | 1615 | -------- | -------- | 1616 | 1900010 | read data from message sequence failed | 1617 1618**示例:** 1619 1620 ```ts 1621 let data = rpc.MessageSequence.create(); 1622 try { 1623 data.writeIntArray([100, 111, 112]); 1624 } catch(error) { 1625 console.info("rpc write intArray fail, errorCode " + error.code); 1626 console.info("rpc write intArray fail, errorMessage" + error.message); 1627 } 1628 try { 1629 let array = data.readIntArray(); 1630 console.log("RpcClient: readIntArray is " + array); 1631 } catch(error) { 1632 console.info("rpc read intArray fail, errorCode " + error.code); 1633 console.info("rpc read intArray fail, errorMessage" + error.message); 1634 } 1635 ``` 1636 1637### writeLongArray 1638 1639writeLongArray(longArray: number[]): void 1640 1641将长整数数组写入MessageSequence实例。 1642 1643**系统能力**:SystemCapability.Communication.IPC.Core 1644 1645**参数:** 1646 1647 | 参数名 | 类型 | 必填 | 说明 | 1648 | --------- | -------- | ---- | -------------------- | 1649 | longArray | number[] | 是 | 要写入的长整数数组。 | 1650 1651**错误码:** 1652 1653以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1654 1655 | 错误码ID | 错误信息 | 1656 | -------- | -------- | 1657 | 1900009 | write data to message sequence failed | 1658 1659**示例:** 1660 1661 ```ts 1662 let data = rpc.MessageSequence.create(); 1663 try { 1664 data.writeLongArray([1111, 1112, 1113]); 1665 }catch(error){ 1666 console.info("rpc write longArray fail, errorCode " + error.code); 1667 console.info("rpc write longArray fail, errorMessage" + error.message); 1668 } 1669 ``` 1670 1671### readLongArray 1672 1673readLongArray(dataIn: number[]): void 1674 1675从MessageSequence实例读取的长整数数组。 1676 1677**系统能力**:SystemCapability.Communication.IPC.Core 1678 1679**参数:** 1680 1681 | 参数名 | 类型 | 必填 | 说明 | 1682 | ------ | -------- | ---- | -------------------- | 1683 | dataIn | number[] | 是 | 要读取的长整数数组。 | 1684 1685**错误码:** 1686 1687以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1688 1689 | 错误码ID | 错误信息 | 1690 | -------- | -------- | 1691 | 1900010 | read data from message sequence failed | 1692 1693**示例:** 1694 1695 ```ts 1696 let data = rpc.MessageSequence.create(); 1697 try { 1698 data.writeLongArray([1111, 1112, 1113]); 1699 } catch(error) { 1700 console.info("rpc write longArray fail, errorCode " + error.code); 1701 console.info("rpc write longArray fail, errorMessage" + error.message); 1702 } 1703 let array = new Array(3); 1704 try { 1705 data.readLongArray(array); 1706 } catch(error) { 1707 console.info("rpc read longArray fail, errorCode " + error.code); 1708 console.info("rpc read longArray fail, errorMessage" + error.message); 1709 } 1710 ``` 1711 1712### readLongArray 1713 1714readLongArray(): number[] 1715 1716从MessageSequence实例中读取所有的长整数数组。 1717 1718**系统能力**:SystemCapability.Communication.IPC.Core 1719 1720**返回值:** 1721 1722 | 类型 | 说明 | 1723 | -------- | ---------------- | 1724 | number[] | 返回长整数数组。 | 1725 1726**错误码:** 1727 1728以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1729 1730 | 错误码ID | 错误信息 | 1731 | -------- | -------- | 1732 | 1900010 | read data from message sequence failed | 1733 1734**示例:** 1735 1736 ```ts 1737 let data = rpc.MessageSequence.create(); 1738 try { 1739 data.writeLongArray([1111, 1112, 1113]); 1740 } catch(error) { 1741 console.info("rpc write longArray fail, errorCode " + error.code); 1742 console.info("rpc write longArray fail, errorMessage" + error.message); 1743 } 1744 try { 1745 let array = data.readLongArray(); 1746 console.log("RpcClient: readLongArray is " + array); 1747 } catch(error) { 1748 console.info("rpc read longArray fail, errorCode " + error.code); 1749 console.info("rpc read longArray fail, errorMessage" + error.message); 1750 } 1751 ``` 1752 1753### writeFloatArray 1754 1755writeFloatArray(floatArray: number[]): void 1756 1757将浮点数组写入MessageSequence实例。 1758 1759**系统能力**:SystemCapability.Communication.IPC.Core 1760 1761**参数:** 1762 1763 | 参数名 | 类型 | 必填 | 说明 | 1764 | ---------- | -------- | ---- | ----------------------------------------------------------------------------------------------------------------------- | 1765 | floatArray | number[] | 是 | 要写入的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 | 1766 1767**错误码:** 1768 1769以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1770 1771 | 错误码ID | 错误信息 | 1772 | -------- | -------- | 1773 | 1900009 | write data to message sequence failed | 1774 1775**示例:** 1776 1777 ```ts 1778 let data = rpc.MessageSequence.create(); 1779 try { 1780 data.writeFloatArray([1.2, 1.3, 1.4]); 1781 } catch(error) { 1782 console.info("rpc write floatArray fail, errorCode " + error.code); 1783 console.info("rpc write floatArray fail, errorMessage" + error.message); 1784 } 1785 ``` 1786 1787### readFloatArray 1788 1789readFloatArray(dataIn: number[]): void 1790 1791从MessageSequence实例中读取浮点数组。 1792 1793**系统能力**:SystemCapability.Communication.IPC.Core 1794 1795**参数:** 1796 1797 | 参数名 | 类型 | 必填 | 说明 | 1798 | ------ | -------- | ---- | ----------------------------------------------------------------------------------------------------------------------- | 1799 | dataIn | number[] | 是 | 要读取的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 | 1800 1801**错误码:** 1802 1803以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1804 1805 | 错误码ID | 错误信息 | 1806 | -------- | -------- | 1807 | 1900010 | read data from message sequence failed | 1808 1809**示例:** 1810 1811 ```ts 1812 let data = rpc.MessageSequence.create(); 1813 try { 1814 data.writeFloatArray([1.2, 1.3, 1.4]); 1815 }catch(error){ 1816 console.info("rpc write floatArray fail, errorCode " + error.code); 1817 console.info("rpc write floatArray fail, errorMessage" + error.message); 1818 } 1819 let array = new Array(3); 1820 try { 1821 data.readFloatArray(array); 1822 } catch(error) { 1823 console.info("rpc read floatArray fail, errorCode " + error.code); 1824 console.info("rpc read floatArray fail, errorMessage" + error.message); 1825 } 1826 ``` 1827 1828### readFloatArray 1829 1830readFloatArray(): number[] 1831 1832从MessageSequence实例中读取浮点数组。 1833 1834**系统能力**:SystemCapability.Communication.IPC.Core 1835 1836**返回值:** 1837 1838 | 类型 | 说明 | 1839 | -------- | -------------- | 1840 | number[] | 返回浮点数组。 | 1841 1842**错误码:** 1843 1844以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1845 1846 | 错误码ID | 错误信息 | 1847 | -------- | -------- | 1848 | 1900010 | read data from message sequence failed | 1849 1850**示例:** 1851 1852 ```ts 1853 let data = rpc.MessageSequence.create(); 1854 try { 1855 data.writeFloatArray([1.2, 1.3, 1.4]); 1856 } catch(error) { 1857 console.info("rpc write floatArray fail, errorCode " + error.code); 1858 console.info("rpc write floatArray fail, errorMessage" + error.message); 1859 } 1860 try { 1861 let array = data.readFloatArray(); 1862 console.log("RpcClient: readFloatArray is " + array); 1863 } catch(error) { 1864 console.info("rpc read floatArray fail, errorCode " + error.code); 1865 console.info("rpc read floatArray fail, errorMessage" + error.message); 1866 } 1867 ``` 1868 1869### writeDoubleArray 1870 1871writeDoubleArray(doubleArray: number[]): void 1872 1873将双精度浮点数组写入MessageSequence实例。 1874 1875**系统能力**:SystemCapability.Communication.IPC.Core 1876 1877**参数:** 1878 1879 | 参数名 | 类型 | 必填 | 说明 | 1880 | ----------- | -------- | ---- | ------------------------ | 1881 | doubleArray | number[] | 是 | 要写入的双精度浮点数组。 | 1882 1883**错误码:** 1884 1885以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1886 1887 | 错误码ID | 错误信息 | 1888 | -------- | -------- | 1889 | 1900009 | write data to message sequence failed | 1890 1891**示例:** 1892 1893 ```ts 1894 let data = rpc.MessageSequence.create(); 1895 try { 1896 data.writeDoubleArray([11.1, 12.2, 13.3]); 1897 } catch(error) { 1898 console.info("rpc write doubleArray fail, errorCode " + error.code); 1899 console.info("rpc write doubleArray fail, errorMessage" + error.message); 1900 } 1901 ``` 1902 1903### readDoubleArray 1904 1905readDoubleArray(dataIn: number[]): void 1906 1907从MessageSequence实例中读取双精度浮点数组。 1908 1909**系统能力**:SystemCapability.Communication.IPC.Core 1910 1911**参数:** 1912 1913 | 参数名 | 类型 | 必填 | 说明 | 1914 | ------ | -------- | ---- | ------------------------ | 1915 | dataIn | number[] | 是 | 要读取的双精度浮点数组。 | 1916 1917**错误码:** 1918 1919以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1920 1921 | 错误码ID | 错误信息 | 1922 | -------- | -------- | 1923 | 1900010 | read data from message sequence failed | 1924 1925**示例:** 1926 1927 ```ts 1928 let data = rpc.MessageSequence.create(); 1929 try { 1930 data.writeDoubleArray([11.1, 12.2, 13.3]); 1931 } catch(error) { 1932 console.info("rpc write doubleArray fail, errorCode " + error.code); 1933 console.info("rpc write doubleArray fail, errorMessage" + error.message); 1934 } 1935 let array = new Array(3); 1936 try { 1937 data.readDoubleArray(array); 1938 } catch(error) { 1939 console.info("rpc read doubleArray fail, errorCode " + error.code); 1940 console.info("rpc read doubleArray fail, errorMessage" + error.message); 1941 } 1942 ``` 1943 1944### readDoubleArray 1945 1946readDoubleArray(): number[] 1947 1948从MessageSequence实例读取所有双精度浮点数组。 1949 1950**系统能力**:SystemCapability.Communication.IPC.Core 1951 1952**返回值:** 1953 1954 | 类型 | 说明 | 1955 | -------- | -------------------- | 1956 | number[] | 返回双精度浮点数组。 | 1957 1958**错误码:** 1959 1960以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 1961 1962 | 错误码ID | 错误信息 | 1963 | -------- | -------- | 1964 | 1900010 | read data from message sequence failed | 1965 1966**示例:** 1967 1968 ```ts 1969 let data = rpc.MessageSequence.create(); 1970 try { 1971 data.writeDoubleArray([11.1, 12.2, 13.3]); 1972 } catch(error) { 1973 console.info("rpc write doubleArray fail, errorCode " + error.code); 1974 console.info("rpc write doubleArray fail, errorMessage" + error.message); 1975 } 1976 try { 1977 let array = data.readDoubleArray(); 1978 console.log("RpcClient: readDoubleArray is " + array); 1979 } catch(error) { 1980 console.info("rpc read doubleArray fail, errorCode " + error.code); 1981 console.info("rpc read doubleArray fail, errorMessage" + error.message); 1982 } 1983 ``` 1984 1985### writeBooleanArray 1986 1987writeBooleanArray(booleanArray: boolean[]): void 1988 1989将布尔数组写入MessageSequence实例。 1990 1991**系统能力**:SystemCapability.Communication.IPC.Core 1992 1993**参数:** 1994 1995 | 参数名 | 类型 | 必填 | 说明 | 1996 | ------------ | --------- | ---- | ------------------ | 1997 | booleanArray | boolean[] | 是 | 要写入的布尔数组。 | 1998 1999**错误码:** 2000 2001以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2002 2003 | 错误码ID | 错误信息 | 2004 | -------- | -------- | 2005 | 1900009 | write data to message sequence failed | 2006 2007**示例:** 2008 2009 ```ts 2010 let data = rpc.MessageSequence.create(); 2011 try { 2012 data.writeBooleanArray([false, true, false]); 2013 } catch(error) { 2014 console.info("rpc write booleanArray fail, errorCode " + error.code); 2015 console.info("rpc write booleanArray fail, errorMessage" + error.message); 2016 } 2017 ``` 2018 2019### readBooleanArray 2020 2021readBooleanArray(dataIn: boolean[]): void 2022 2023从MessageSequence实例中读取布尔数组。 2024 2025**系统能力**:SystemCapability.Communication.IPC.Core 2026 2027**参数:** 2028 2029 | 参数名 | 类型 | 必填 | 说明 | 2030 | ------ | --------- | ---- | ------------------ | 2031 | dataIn | boolean[] | 是 | 要读取的布尔数组。 | 2032 2033**错误码:** 2034 2035以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2036 2037 | 错误码ID | 错误信息 | 2038 | -------- | -------- | 2039 | 1900010 | read data from message sequence failed | 2040 2041**示例:** 2042 2043 ```ts 2044 let data = rpc.MessageSequence.create(); 2045 try { 2046 data.writeBooleanArray([false, true, false]); 2047 } catch(error) { 2048 console.info("rpc write booleanArray fail, errorCode " + error.code); 2049 console.info("rpc write booleanArray fail, errorMessage" + error.message); 2050 } 2051 let array = new Array(3); 2052 try { 2053 data.readBooleanArray(array); 2054 } catch(error) { 2055 console.info("rpc read booleanArray fail, errorCode " + error.code); 2056 console.info("rpc read booleanArray fail, errorMessage" + error.message); 2057 } 2058 ``` 2059 2060### readBooleanArray 2061 2062readBooleanArray(): boolean[] 2063 2064从MessageSequence实例中读取所有布尔数组。 2065 2066**系统能力**:SystemCapability.Communication.IPC.Core 2067 2068**返回值:** 2069 2070 | 类型 | 说明 | 2071 | --------- | -------------- | 2072 | boolean[] | 返回布尔数组。 | 2073 2074**错误码:** 2075 2076以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2077 2078 | 错误码ID | 错误信息 | 2079 | -------- | -------- | 2080 | 1900010 | read data from message sequence failed | 2081 2082**示例:** 2083 2084 ```ts 2085 let data = rpc.MessageSequence.create(); 2086 try { 2087 data.writeBooleanArray([false, true, false]); 2088 } catch(error) { 2089 console.info("rpc write booleanArray fail, errorCode " + error.code); 2090 console.info("rpc write booleanArray fail, errorMessage" + error.message); 2091 } 2092 try { 2093 let array = data.readBooleanArray(); 2094 console.log("RpcClient: readBooleanArray is " + array); 2095 } catch(error) { 2096 console.info("rpc read booleanArray fail, errorCode " + error.code); 2097 console.info("rpc read booleanArray fail, errorMessage" + error.message); 2098 } 2099 ``` 2100 2101### writeCharArray 2102 2103writeCharArray(charArray: number[]): void 2104 2105将单个字符数组写入MessageSequence实例。 2106 2107**系统能力**:SystemCapability.Communication.IPC.Core 2108 2109**参数:** 2110 2111 | 参数名 | 类型 | 必填 | 说明 | 2112 | --------- | -------- | ---- | ---------------------- | 2113 | charArray | number[] | 是 | 要写入的单个字符数组。 | 2114 2115**错误码:** 2116 2117以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2118 2119 | 错误码ID | 错误信息 | 2120 | -------- | -------- | 2121 | 1900009 | write data to message sequence failed | 2122 2123**示例:** 2124 2125 ```ts 2126 let data = rpc.MessageSequence.create(); 2127 try { 2128 data.writeCharArray([97, 98, 88]); 2129 } catch(error) { 2130 console.info("rpc write charArray fail, errorCode " + error.code); 2131 console.info("rpc write charArray fail, errorMessage" + error.message); 2132 } 2133 ``` 2134 2135### readCharArray 2136 2137readCharArray(dataIn: number[]): void 2138 2139从MessageSequence实例中读取单个字符数组。 2140 2141**系统能力**:SystemCapability.Communication.IPC.Core 2142 2143**参数:** 2144 2145 | 参数名 | 类型 | 必填 | 说明 | 2146 | ------ | -------- | ---- | ---------------------- | 2147 | dataIn | number[] | 是 | 要读取的单个字符数组。 | 2148 2149**错误码:** 2150 2151以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2152 2153 | 错误码ID | 错误信息 | 2154 | -------- | -------- | 2155 | 1900010 | read data from message sequence failed | 2156 2157**示例:** 2158 2159 ```ts 2160 let data = rpc.MessageSequence.create(); 2161 try { 2162 data.writeCharArray([97, 98, 88]); 2163 } catch(error) { 2164 console.info("rpc write charArray fail, errorCode " + error.code); 2165 console.info("rpc write charArray fail, errorMessage" + error.message); 2166 } 2167 let array = new Array(3); 2168 try { 2169 data.readCharArray(array); 2170 } catch(error) { 2171 console.info("rpc read charArray fail, errorCode " + error.code); 2172 console.info("rpc read charArray fail, errorMessage" + error.message); 2173 } 2174 ``` 2175 2176### readCharArray 2177 2178readCharArray(): number[] 2179 2180从MessageSequence实例读取单个字符数组。 2181 2182**系统能力**:SystemCapability.Communication.IPC.Core 2183 2184**返回值:** 2185 2186 | 类型 | 说明 | 2187 | -------- | ------------------ | 2188 | number[] | 返回单个字符数组。 | 2189 2190**错误码:** 2191 2192以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2193 2194 | 错误码ID | 错误信息 | 2195 | -------- | -------- | 2196 | 1900010 | read data from message sequence failed | 2197 2198**示例:** 2199 2200 ```ts 2201 let data = rpc.MessageSequence.create(); 2202 try { 2203 data.writeCharArray([97, 98, 88]); 2204 } catch(error) { 2205 console.info("rpc write charArray fail, errorCode " + error.code); 2206 console.info("rpc write charArray fail, errorMessage" + error.message); 2207 } 2208 let array = new Array(3); 2209 try { 2210 let array = data.readCharArray(); 2211 console.log("RpcClient: readCharArray is " + array); 2212 } catch(error) { 2213 console.info("rpc read charArray fail, errorCode " + error.code); 2214 console.info("rpc read charArray fail, errorMessage" + error.message); 2215 } 2216 ``` 2217 2218### writeStringArray 2219 2220writeStringArray(stringArray: string[]): void 2221 2222将字符串数组写入MessageSequence实例。 2223 2224**系统能力**:SystemCapability.Communication.IPC.Core 2225 2226**参数:** 2227 2228 | 参数名 | 类型 | 必填 | 说明 | 2229 | ----------- | -------- | ---- | ------------------------------------------------------- | 2230 | stringArray | string[] | 是 | 要写入的字符串数组,数组单个元素的长度应小于40960字节。 | 2231 2232**错误码:** 2233 2234以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2235 2236 | 错误码ID | 错误信息 | 2237 | -------- | -------- | 2238 | 1900009 | write data to message sequence failed | 2239 2240**示例:** 2241 2242 ```ts 2243 let data = rpc.MessageSequence.create(); 2244 try { 2245 data.writeStringArray(["abc", "def"]); 2246 } catch(error) { 2247 console.info("rpc write stringArray fail, errorCode " + error.code); 2248 console.info("rpc write stringArray fail, errorMessage" + error.message); 2249 } 2250 ``` 2251 2252### readStringArray 2253 2254readStringArray(dataIn: string[]): void 2255 2256从MessageSequence实例读取字符串数组。 2257 2258**系统能力**:SystemCapability.Communication.IPC.Core 2259 2260**参数:** 2261 2262 | 参数名 | 类型 | 必填 | 说明 | 2263 | ------ | -------- | ---- | -------------------- | 2264 | dataIn | string[] | 是 | 要读取的字符串数组。 | 2265 2266**错误码:** 2267 2268以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2269 2270 | 错误码ID | 错误信息 | 2271 | -------- | -------- | 2272 | 1900010 | read data from message sequence failed | 2273 2274**示例:** 2275 2276 ```ts 2277 let data = rpc.MessageSequence.create(); 2278 try { 2279 data.writeStringArray(["abc", "def"]); 2280 } catch(error) { 2281 console.info("rpc write stringArray fail, errorCode " + error.code); 2282 console.info("rpc write stringArray fail, errorMessage" + error.message); 2283 } 2284 let array = new Array(2); 2285 try { 2286 data.readStringArray(array); 2287 } catch(error) { 2288 console.info("rpc read stringArray fail, errorCode " + error.code); 2289 console.info("rpc read stringArray fail, errorMessage" + error.message); 2290 } 2291 ``` 2292 2293### readStringArray 2294 2295readStringArray(): string[] 2296 2297从MessageSequence实例读取字符串数组。 2298 2299**系统能力**:SystemCapability.Communication.IPC.Core 2300 2301**返回值:** 2302 2303 | 类型 | 说明 | 2304 | -------- | ---------------- | 2305 | string[] | 返回字符串数组。 | 2306 2307**错误码:** 2308 2309以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2310 2311 | 错误码ID | 错误信息 | 2312 | -------- | -------- | 2313 | 1900010 | read data from message sequence failed | 2314 2315**示例:** 2316 2317 ```ts 2318 let data = rpc.MessageSequence.create(); 2319 try { 2320 data.writeStringArray(["abc", "def"]); 2321 } catch(error) { 2322 console.info("rpc write stringArray fail, errorCode " + error.code); 2323 console.info("rpc write stringArray fail, errorMessage" + error.message); 2324 } 2325 try { 2326 let array = data.readStringArray(); 2327 console.log("RpcClient: readStringArray is " + array); 2328 } catch(error) { 2329 console.info("rpc read stringArray fail, errorCode " + error.code); 2330 console.info("rpc read stringArray fail, errorMessage" + error.message); 2331 } 2332 ``` 2333 2334### writeNoException 2335 2336writeNoException(): void 2337 2338向MessageSequence写入“指示未发生异常”的信息。 2339 2340**系统能力**:SystemCapability.Communication.IPC.Core 2341 2342**错误码:** 2343 2344以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2345 2346 | 错误码ID | 错误信息 | 2347 | -------- | -------- | 2348 | 1900009 | write data to message sequence failed | 2349 2350**示例:** 2351 2352 ```ts 2353 class TestRemoteObject extends rpc.RemoteObject { 2354 constructor(descriptor) { 2355 super(descriptor); 2356 } 2357 2358 onRemoteRequest(code, data, reply, option) { 2359 if (code === 1) { 2360 console.log("RpcServer: onRemoteRequest called"); 2361 try { 2362 reply.writeNoException(); 2363 } catch(error) { 2364 console.info("rpc write no exception fail, errorCode " + error.code); 2365 console.info("rpc write no exception fail, errorMessage" + error.message); 2366 } 2367 return true; 2368 } else { 2369 console.log("RpcServer: unknown code: " + code); 2370 return false; 2371 } 2372 } 2373 } 2374 ``` 2375 2376### readException 2377 2378readException(): void 2379 2380从MessageSequence中读取异常。 2381 2382**系统能力**:SystemCapability.Communication.IPC.Core 2383 2384**错误码:** 2385 2386以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2387 2388 | 错误码ID | 错误信息 | 2389 | -------- | -------- | 2390 | 1900010 | read data from message sequence failed | 2391 2392**示例:** 2393 2394 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 2395 2396 ```ts 2397 // 仅FA模型需要导入@ohos.ability.featureAbility 2398 // import FA from "@ohos.ability.featureAbility"; 2399 2400 let proxy; 2401 let connect = { 2402 onConnect: function(elementName, remoteProxy) { 2403 console.log("RpcClient: js onConnect called."); 2404 proxy = remoteProxy; 2405 }, 2406 onDisconnect: function(elementName) { 2407 console.log("RpcClient: onDisconnect"); 2408 }, 2409 onFailed: function() { 2410 console.log("RpcClient: onFailed"); 2411 } 2412 }; 2413 let want = { 2414 "bundleName": "com.ohos.server", 2415 "abilityName": "com.ohos.server.EntryAbility", 2416 }; 2417 2418 // FA模型使用此方法连接服务 2419 // FA.connectAbility(want,connect); 2420 2421 globalThis.context.connectServiceExtensionAbility(want, connect); 2422 ``` 2423 2424 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息 2425 2426 ```ts 2427 let option = new rpc.MessageOption(); 2428 let data = rpc.MessageSequence.create(); 2429 let reply = rpc.MessageSequence.create(); 2430 data.writeInt(1); 2431 data.writeString("hello"); 2432 proxy.sendMessageRequest(1, data, reply, option) 2433 .then(function(errCode) { 2434 if (errCode === 0) { 2435 console.log("sendMessageRequest got result"); 2436 try { 2437 reply.readException(); 2438 } catch(error) { 2439 console.info("rpc read exception fail, errorCode " + error.code); 2440 console.info("rpc read no exception fail, errorMessage" + error.message); 2441 } 2442 let msg = reply.readString(); 2443 console.log("RPCTest: reply msg: " + msg); 2444 } else { 2445 console.log("RPCTest: sendMessageRequest failed, errCode: " + errCode); 2446 } 2447 }).catch(function(e) { 2448 console.log("RPCTest: sendMessageRequest got exception: " + e.message); 2449 }).finally (() => { 2450 console.log("RPCTest: sendMessageRequest ends, reclaim parcel"); 2451 data.reclaim(); 2452 reply.reclaim(); 2453 }); 2454 ``` 2455 2456### writeParcelableArray 2457 2458writeParcelableArray(parcelableArray: Parcelable[]): void 2459 2460将可序列化对象数组写入MessageSequence实例。 2461 2462**系统能力**:SystemCapability.Communication.IPC.Core 2463 2464**参数:** 2465 2466 | 参数名 | 类型 | 必填 | 说明 | 2467 | --------------- | ------------ | ---- | -------------------------- | 2468 | parcelableArray | Parcelable[] | 是 | 要写入的可序列化对象数组。 | 2469 2470**错误码:** 2471 2472以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2473 2474 | 错误码ID | 错误信息 | 2475 | -------- | -------- | 2476 | 1900009 | write data to message sequence failed | 2477 2478**示例:** 2479 2480 ```ts 2481 class MyParcelable { 2482 num: number; 2483 str: string; 2484 constructor(num, str) { 2485 this.num = num; 2486 this.str = str; 2487 } 2488 marshalling(messageSequence) { 2489 messageSequence.writeInt(this.num); 2490 messageSequence.writeString(this.str); 2491 return true; 2492 } 2493 unmarshalling(messageSequence) { 2494 this.num = messageSequence.readInt(); 2495 this.str = messageSequence.readString(); 2496 return true; 2497 } 2498 } 2499 let parcelable = new MyParcelable(1, "aaa"); 2500 let parcelable2 = new MyParcelable(2, "bbb"); 2501 let parcelable3 = new MyParcelable(3, "ccc"); 2502 let a = [parcelable, parcelable2, parcelable3]; 2503 let data = rpc.MessageSequence.create(); 2504 try { 2505 data.writeParcelableArray(a); 2506 } catch(error) { 2507 console.info("rpc write parcelable array fail, errorCode " + error.code); 2508 console.info("rpc write parcelable array fail, errorMessage" + error.message); 2509 } 2510 ``` 2511 2512### readParcelableArray 2513 2514readParcelableArray(parcelableArray: Parcelable[]): void 2515 2516从MessageSequence实例读取可序列化对象数组。 2517 2518**系统能力**:SystemCapability.Communication.IPC.Core 2519 2520**参数:** 2521 2522 | 参数名 | 类型 | 必填 | 说明 | 2523 | --------------- | ------------ | ---- | -------------------------- | 2524 | parcelableArray | Parcelable[] | 是 | 要读取的可序列化对象数组。 | 2525 2526**错误码:** 2527 2528以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2529 2530 | 错误码ID | 错误信息 | 2531 | -------- | -------- | 2532 | 1900010 | read data from message sequence failed | 2533 | 1900012 | call js callback function failed | 2534 2535**示例:** 2536 2537 ```ts 2538 class MyParcelable { 2539 num: number; 2540 str: string; 2541 constructor(num, str) { 2542 this.num = num; 2543 this.str = str; 2544 } 2545 marshalling(messageSequence) { 2546 messageSequence.writeInt(this.num); 2547 messageSequence.writeString(this.str); 2548 return true; 2549 } 2550 unmarshalling(messageSequence) { 2551 this.num = messageSequence.readInt(); 2552 this.str = messageSequence.readString(); 2553 return true; 2554 } 2555 } 2556 let parcelable = new MyParcelable(1, "aaa"); 2557 let parcelable2 = new MyParcelable(2, "bbb"); 2558 let parcelable3 = new MyParcelable(3, "ccc"); 2559 let a = [parcelable, parcelable2, parcelable3]; 2560 let data = rpc.MessageSequence.create(); 2561 let result = data.writeParcelableArray(a); 2562 console.log("RpcClient: writeParcelableArray is " + result); 2563 let b = [new MyParcelable(0, ""), new MyParcelable(0, ""), new MyParcelable(0, "")]; 2564 try { 2565 data.readParcelableArray(b); 2566 } catch(error) { 2567 console.info("rpc read parcelable array fail, errorCode " + error.code); 2568 console.info("rpc read parcelable array fail, errorMessage" + error.message); 2569 } 2570 data.readParcelableArray(b); 2571 ``` 2572 2573### writeRemoteObjectArray 2574 2575writeRemoteObjectArray(objectArray: IRemoteObject[]): void 2576 2577将IRemoteObject对象数组写入MessageSequence。 2578 2579**系统能力**:SystemCapability.Communication.IPC.Core 2580 2581**参数:** 2582 2583 | 参数名 | 类型 | 必填 | 说明 | 2584 | ----------- | --------------- | ---- | ---------------------------------------------- | 2585 | objectArray | IRemoteObject[] | 是 | 要写入MessageSequence的IRemoteObject对象数组。 | 2586 2587**错误码:** 2588 2589以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2590 2591 | 错误码ID | 错误信息 | 2592 | -------- | -------- | 2593 | 1900009 | write data to message sequence failed | 2594 2595**示例:** 2596 2597 ```ts 2598 class TestRemoteObject extends rpc.RemoteObject { 2599 constructor(descriptor) { 2600 super(descriptor); 2601 this.modifyLocalInterface(this, descriptor); 2602 } 2603 2604 asObject(): rpc.IRemoteObject { 2605 return this; 2606 } 2607 } 2608 let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")]; 2609 let data = rpc.MessageSequence.create(); 2610 let result = data.writeRemoteObjectArray(a); 2611 try { 2612 data.writeRemoteObjectArray(a); 2613 } catch(error) { 2614 console.info("rpc write remote object array fail, errorCode " + error.code); 2615 console.info("rpc write remote object array fail, errorMessage" + error.message); 2616 } 2617 console.log("RpcClient: writeRemoteObjectArray is " + result); 2618 ``` 2619 2620### readRemoteObjectArray 2621 2622readRemoteObjectArray(objects: IRemoteObject[]): void 2623 2624从MessageSequence读取IRemoteObject对象数组。 2625 2626**系统能力**:SystemCapability.Communication.IPC.Core 2627 2628**参数:** 2629 2630 | 参数名 | 类型 | 必填 | 说明 | 2631 | ------- | --------------- | ---- | ---------------------------------------------- | 2632 | objects | IRemoteObject[] | 是 | 从MessageSequence读取的IRemoteObject对象数组。 | 2633 2634**错误码:** 2635 2636以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2637 2638 | 错误码ID | 错误信息 | 2639 | -------- | -------- | 2640 | 1900010 | read data from message sequence failed | 2641 2642**示例:** 2643 2644 ```ts 2645 class MyDeathRecipient { 2646 onRemoteDied() { 2647 console.log("server died"); 2648 } 2649 } 2650 class TestRemoteObject extends rpc.RemoteObject { 2651 constructor(descriptor) { 2652 super(descriptor); 2653 this.modifyLocalInterface(this, descriptor); 2654 } 2655 2656 asObject(): rpc.IRemoteObject { 2657 return this; 2658 } 2659 } 2660 let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")]; 2661 let data = rpc.MessageSequence.create(); 2662 data.writeRemoteObjectArray(a); 2663 let b = new Array(3); 2664 try { 2665 data.readRemoteObjectArray(b); 2666 } catch(error) { 2667 console.info("rpc read remote object array fail, errorCode " + error.code); 2668 console.info("rpc read remote object array fail, errorMessage" + error.message); 2669 } 2670 data.readRemoteObjectArray(b); 2671 ``` 2672 2673### readRemoteObjectArray 2674 2675readRemoteObjectArray(): IRemoteObject[] 2676 2677从MessageSequence读取IRemoteObject对象数组。 2678 2679**系统能力**:SystemCapability.Communication.IPC.Core 2680 2681**返回值:** 2682 2683 | 类型 | 说明 | 2684 | --------------- | --------------------------- | 2685 | IRemoteObject[] | 返回IRemoteObject对象数组。 | 2686 2687**错误码:** 2688 2689以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2690 2691 | 错误码ID | 错误信息 | 2692 | -------- | -------- | 2693 | 1900010 | read data from message sequence failed | 2694 2695**示例:** 2696 2697 ```ts 2698 class TestRemoteObject extends rpc.RemoteObject { 2699 constructor(descriptor) { 2700 super(descriptor); 2701 this.modifyLocalInterface(this, descriptor); 2702 } 2703 2704 asObject(): rpc.IRemoteObject { 2705 return this; 2706 } 2707 } 2708 let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")]; 2709 let data = rpc.MessageSequence.create(); 2710 data.writeRemoteObjectArray(a); 2711 try { 2712 let b = data.readRemoteObjectArray(); 2713 console.log("RpcClient: readRemoteObjectArray is " + b); 2714 } catch(error) { 2715 console.info("rpc read remote object array fail, errorCode " + error.code); 2716 console.info("rpc read remote object array fail, errorMessage" + error.message); 2717 } 2718 ``` 2719 2720 2721### closeFileDescriptor<sup>9+</sup> 2722 2723static closeFileDescriptor(fd: number): void 2724 2725静态方法,关闭给定的文件描述符。 2726 2727**系统能力**:SystemCapability.Communication.IPC.Core 2728 2729**参数:** 2730 2731 | 参数名 | 类型 | 必填 | 说明 | 2732 | ------ | ------ | ---- | -------------------- | 2733 | fd | number | 是 | 要关闭的文件描述符。 | 2734 2735**示例:** 2736 2737 ```ts 2738 import fs from '@ohos.file.fs'; 2739 let filePath = "path/to/file"; 2740 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 2741 try { 2742 rpc.MessageSequence.closeFileDescriptor(file.fd); 2743 } catch(error) { 2744 console.info("rpc close file descriptor fail, errorCode " + error.code); 2745 console.info("rpc close file descriptor fail, errorMessage" + error.message); 2746 } 2747 ``` 2748 2749### dupFileDescriptor 2750 2751static dupFileDescriptor(fd: number) :number 2752 2753静态方法,复制给定的文件描述符。 2754 2755**系统能力**:SystemCapability.Communication.IPC.Core 2756 2757**参数:** 2758 2759 | 参数名 | 类型 | 必填 | 说明 | 2760 | ------ | ------ | ---- | ------------------------ | 2761 | fd | number | 是 | 表示已存在的文件描述符。 | 2762 2763**返回值:** 2764 2765 | 类型 | 说明 | 2766 | ------ | -------------------- | 2767 | number | 返回新的文件描述符。 | 2768 2769**错误码:** 2770 2771以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2772 2773 | 错误码ID | 错误信息 | 2774 | -------- | -------- | 2775 | 1900013 | call os dup function failed | 2776 2777**示例:** 2778 2779 ```ts 2780 import fs from '@ohos.file.fs'; 2781 let filePath = "path/to/file"; 2782 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 2783 try { 2784 let newFd = rpc.MessageSequence.dupFileDescriptor(file.fd); 2785 } catch(error) { 2786 console.info("rpc dup file descriptor fail, errorCode " + error.code); 2787 console.info("rpc dup file descriptor fail, errorMessage" + error.message); 2788 } 2789 ``` 2790 2791### containFileDescriptors 2792 2793containFileDescriptors(): boolean 2794 2795检查此MessageSequence对象是否包含文件描述符。 2796 2797**系统能力**:SystemCapability.Communication.IPC.Core 2798 2799**返回值:** 2800 2801 | 类型 | 说明 | 2802 | ------- | -------------------------------------------------------------------- | 2803 | boolean | true:包含文件描述符,false:不包含文件描述符。| 2804 2805**示例:** 2806 2807 2808 ```ts 2809 import fs from '@ohos.file.fs'; 2810 let sequence = new rpc.MessageSequence(); 2811 let filePath = "path/to/file"; 2812 let r1 = sequence.containFileDescriptors(); 2813 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 2814 try { 2815 sequence.writeFileDescriptor(file.fd); 2816 } catch(error) { 2817 console.info("rpc write file descriptor fail, errorCode " + error.code); 2818 console.info("rpc write file descriptor fail, errorMessage" + error.message); 2819 } 2820 try { 2821 let containFD = sequence.containFileDescriptors(); 2822 console.log("RpcTest: sequence after write fd containFd result is : " + containFD); 2823 } catch(error) { 2824 console.info("rpc contain file descriptor fail, errorCode " + error.code); 2825 console.info("rpc contain file descriptor fail, errorMessage" + error.message); 2826 } 2827 ``` 2828 2829### writeFileDescriptor 2830 2831writeFileDescriptor(fd: number): void 2832 2833写入文件描述符到MessageSequence。 2834 2835**系统能力**:SystemCapability.Communication.IPC.Core 2836 2837**参数:** 2838 2839 | 参数名 | 类型 | 必填 | 说明 | 2840 | ------ | ------ | ---- | ------------ | 2841 | fd | number | 是 | 文件描述符。 | 2842 2843**错误码:** 2844 2845以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2846 2847 | 错误码ID | 错误信息 | 2848 | -------- | -------- | 2849 | 1900009 | write data to message sequence failed | 2850 2851**示例:** 2852 2853 ```ts 2854 import fs from '@ohos.file.fs'; 2855 let sequence = new rpc.MessageSequence(); 2856 let filePath = "path/to/file"; 2857 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 2858 try { 2859 sequence.writeFileDescriptor(file.fd); 2860 } catch(error) { 2861 console.info("rpc write file descriptor fail, errorCode " + error.code); 2862 console.info("rpc write file descriptor fail, errorMessage" + error.message); 2863 } 2864 ``` 2865 2866### readFileDescriptor 2867 2868readFileDescriptor(): number 2869 2870从MessageSequence中读取文件描述符。 2871 2872**系统能力**:SystemCapability.Communication.IPC.Core 2873 2874**返回值:** 2875 2876 | 类型 | 说明 | 2877 | ------ | ---------------- | 2878 | number | 返回文件描述符。 | 2879 2880**错误码:** 2881 2882以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2883 2884 | 错误码ID | 错误信息 | 2885 | -------- | -------- | 2886 | 1900010 | read data from message sequence failed | 2887 2888**示例:** 2889 2890 ```ts 2891 import fs from '@ohos.file.fs'; 2892 let sequence = new rpc.MessageSequence(); 2893 let filePath = "path/to/file"; 2894 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 2895 try { 2896 sequence.writeFileDescriptor(file.fd); 2897 } catch(error) { 2898 console.info("rpc write file descriptor fail, errorCode " + error.code); 2899 console.info("rpc write file descriptor fail, errorMessage" + error.message); 2900 } 2901 try { 2902 let readFD = sequence.readFileDescriptor(); 2903 } catch(error) { 2904 console.info("rpc read file descriptor fail, errorCode " + error.code); 2905 console.info("rpc read file descriptor fail, errorMessage" + error.message); 2906 } 2907 ``` 2908 2909### writeAshmem 2910 2911writeAshmem(ashmem: Ashmem): void 2912 2913将指定的匿名共享对象写入此MessageSequence。 2914 2915**系统能力**:SystemCapability.Communication.IPC.Core 2916 2917**参数:** 2918 2919 | 参数名 | 类型 | 必填 | 说明 | 2920 | ------ | ------ | ---- | ------------------------------------- | 2921 | ashmem | Ashmem | 是 | 要写入MessageSequence的匿名共享对象。 | 2922 2923**错误码:** 2924 2925以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2926 2927 | 错误码ID | 错误信息 | 2928 | -------- | ------- | 2929 | 1900003 | write to ashmem failed | 2930 2931**示例:** 2932 2933 ```ts 2934 let sequence = new rpc.MessageSequence(); 2935 let ashmem; 2936 try { 2937 ashmem = rpc.Ashmem.create("ashmem", 1024); 2938 } catch(error) { 2939 console.info("rpc create ashmem fail, errorCode " + error.code); 2940 console.info("rpc creat ashmem fail, errorMessage" + error.message); 2941 } 2942 try { 2943 sequence.writeAshmem(ashmem); 2944 } catch(error) { 2945 console.info("rpc write ashmem fail, errorCode " + error.code); 2946 console.info("rpc write ashmem fail, errorMessage" + error.message); 2947 } 2948 ``` 2949 2950 2951### readAshmem 2952 2953readAshmem(): Ashmem 2954 2955从MessageSequence读取匿名共享对象。 2956 2957**系统能力**:SystemCapability.Communication.IPC.Core 2958 2959**返回值:** 2960 2961 | 类型 | 说明 | 2962 | ------ | ------------------ | 2963 | Ashmem | 返回匿名共享对象。 | 2964 2965**错误码:** 2966 2967以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 2968 2969 | 错误码ID | 错误信息 | 2970 | -------- | -------- | 2971 | 1900004 | read from ashmem failed | 2972 2973**示例:** 2974 2975 ```ts 2976 let sequence = new rpc.MessageSequence(); 2977 let ashmem; 2978 try { 2979 ashmem = rpc.Ashmem.create("ashmem", 1024); 2980 } catch(error) { 2981 console.info("rpc create ashmem fail, errorCode " + error.code); 2982 console.info("rpc creat ashmem fail, errorMessage" + error.message); 2983 } 2984 try { 2985 sequence.writeAshmem(ashmem); 2986 } catch(error) { 2987 console.info("rpc write ashmem fail, errorCode " + error.code); 2988 console.info("rpc write ashmem fail, errorMessage" + error.message); 2989 } 2990 try { 2991 let readAshmem = sequence.readAshmem(); 2992 console.log("RpcTest: read ashmem to result is : " + readAshmem); 2993 } catch(error) { 2994 console.info("rpc read ashmem fail, errorCode " + error.code); 2995 console.info("rpc read ashmem fail, errorMessage" + error.message); 2996 } 2997 ``` 2998 2999### getRawDataCapacity 3000 3001getRawDataCapacity(): number 3002 3003获取MessageSequence可以容纳的最大原始数据量。 3004 3005**系统能力**:SystemCapability.Communication.IPC.Core 3006 3007**返回值:** 3008 3009 | 类型 | 说明 | 3010 | ------ | ------------------------------------------------------------ | 3011 | number | 返回MessageSequence可以容纳的最大原始数据量,即128 Mb。 | 3012 3013**示例:** 3014 3015 ```ts 3016 let sequence = new rpc.MessageSequence(); 3017 let result = sequence.getRawDataCapacity(); 3018 console.log("RpcTest: sequence get RawDataCapacity result is : " + result); 3019 ``` 3020 3021### writeRawData 3022 3023writeRawData(rawData: number[], size: number): void 3024 3025将原始数据写入MessageSequence对象。 3026 3027**系统能力**:SystemCapability.Communication.IPC.Core 3028 3029**参数:** 3030 3031 | 参数名 | 类型 | 必填 | 说明 | 3032 | ------- | -------- | ---- | ---------------------------------- | 3033 | rawData | number[] | 是 | 要写入的原始数据。 | 3034 | size | number | 是 | 发送的原始数据大小,以字节为单位。 | 3035 3036**错误码:** 3037 3038以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 3039 3040 | 错误码ID | 错误信息 | 3041 | -------- | -------- | 3042 | 1900009 | write data to message sequence failed | 3043 3044**示例:** 3045 3046 ```ts 3047 let sequence = new rpc.MessageSequence(); 3048 let arr = [1, 2, 3, 4, 5]; 3049 try { 3050 sequence.writeRawData(arr, arr.length); 3051 } catch(error) { 3052 console.info("rpc write rawdata fail, errorCode " + error.code); 3053 console.info("rpc write rawdata fail, errorMessage" + error.message); 3054 } 3055 ``` 3056 3057### readRawData 3058 3059readRawData(size: number): number[] 3060 3061从MessageSequence读取原始数据。 3062 3063**系统能力**:SystemCapability.Communication.IPC.Core 3064 3065**参数:** 3066 3067 | 参数名 | 类型 | 必填 | 说明 | 3068 | ------ | ------ | ---- | ------------------------ | 3069 | size | number | 是 | 要读取的原始数据的大小。 | 3070 3071**返回值:** 3072 3073 | 类型 | 说明 | 3074 | -------- | ------------------------------ | 3075 | number[] | 返回原始数据(以字节为单位)。 | 3076 3077**错误码:** 3078 3079以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 3080 3081 | 错误码ID | 错误信息 | 3082 | -------- | -------- | 3083 | 1900010 | read data from message sequence failed | 3084 3085**示例:** 3086 3087 ```ts 3088 let sequence = new rpc.MessageSequence(); 3089 let arr = [1, 2, 3, 4, 5]; 3090 try { 3091 sequence.writeRawData(arr, arr.length); 3092 } catch(error) { 3093 console.info("rpc write rawdata fail, errorCode " + error.code); 3094 console.info("rpc write rawdata fail, errorMessage" + error.message); 3095 } 3096 try { 3097 let result = sequence.readRawData(5); 3098 console.log("RpcTest: sequence read raw data result is : " + result); 3099 } catch(error) { 3100 console.info("rpc read rawdata fail, errorCode " + error.code); 3101 console.info("rpc read rawdata fail, errorMessage" + error.message); 3102 } 3103 ``` 3104 3105## MessageParcel<sup>(deprecated)</sup> 3106 3107>从API version 9 开始不再维护,建议使用[MessageSequence](#messagesequence9)类替代。 3108 3109在RPC过程中,发送方可以使用MessageParcel提供的写方法,将待发送的数据以特定格式写入该对象。接收方可以使用MessageParcel提供的读方法从该对象中读取特定格式的数据。数据格式包括:基础类型及数组、IPC对象、接口描述符和自定义序列化对象。 3110 3111### create 3112 3113static create(): MessageParcel 3114 3115静态方法,创建MessageParcel对象。 3116 3117**系统能力**:SystemCapability.Communication.IPC.Core 3118 3119**返回值:** 3120 3121 | 类型 | 说明 | 3122 | ------------- | ----------------------------- | 3123 | MessageParcel | 返回创建的MessageParcel对象。 | 3124 3125**示例:** 3126 3127 ```ts 3128 let data = rpc.MessageParcel.create(); 3129 console.log("RpcClient: data is " + data); 3130 ``` 3131 3132### reclaim 3133 3134reclaim(): void 3135 3136释放不再使用的MessageParcel对象。 3137 3138**系统能力**:SystemCapability.Communication.IPC.Core 3139 3140**示例:** 3141 3142 ```ts 3143 let reply = rpc.MessageParcel.create(); 3144 reply.reclaim(); 3145 ``` 3146 3147### writeRemoteObject 3148 3149writeRemoteObject(object: [IRemoteObject](#iremoteobject)): boolean 3150 3151序列化远程对象并将其写入MessageParcel对象。 3152 3153**系统能力**:SystemCapability.Communication.IPC.Core 3154 3155**参数:** 3156 3157 | 参数名 | 类型 | 必填 | 说明 | 3158 | ------ | ------------------------------- | ---- | --------------------------------------- | 3159 | object | [IRemoteObject](#iremoteobject) | 是 | 要序列化并写入MessageParcel的远程对象。 | 3160 3161**返回值:** 3162 3163 | 类型 | 说明 | 3164 | ------- | ----------------------------------------- | 3165 | boolean | true:操作成功,false:操作失败。| 3166 3167**示例:** 3168 3169 ```ts 3170 class MyDeathRecipient { 3171 onRemoteDied() { 3172 console.log("server died"); 3173 } 3174 } 3175 class TestRemoteObject extends rpc.RemoteObject { 3176 constructor(descriptor) { 3177 super(descriptor); 3178 } 3179 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 3180 return true; 3181 } 3182 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 3183 return true; 3184 } 3185 isObjectDead(): boolean { 3186 return false; 3187 } 3188 } 3189 let data = rpc.MessageParcel.create(); 3190 let testRemoteObject = new TestRemoteObject("testObject"); 3191 data.writeRemoteObject(testRemoteObject); 3192 ``` 3193 3194### readRemoteObject 3195 3196readRemoteObject(): IRemoteObject 3197 3198从MessageParcel读取远程对象。此方法用于反序列化MessageParcel对象以生成IRemoteObject。远程对象按写入MessageParcel的顺序读取。 3199 3200**系统能力**:SystemCapability.Communication.IPC.Core 3201 3202**返回值:** 3203 3204 | 类型 | 说明 | 3205 | ------------------------------- | ------------------ | 3206 | [IRemoteObject](#iremoteobject) | 读取到的远程对象。 | 3207 3208**示例:** 3209 3210 ```ts 3211 class MyDeathRecipient { 3212 onRemoteDied() { 3213 console.log("server died"); 3214 } 3215 } 3216 class TestRemoteObject extends rpc.RemoteObject { 3217 constructor(descriptor) { 3218 super(descriptor); 3219 } 3220 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 3221 return true; 3222 } 3223 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 3224 return true; 3225 } 3226 isObjectDead(): boolean { 3227 return false; 3228 } 3229 } 3230 let data = rpc.MessageParcel.create(); 3231 let testRemoteObject = new TestRemoteObject("testObject"); 3232 data.writeRemoteObject(testRemoteObject); 3233 let proxy = data.readRemoteObject(); 3234 ``` 3235 3236### writeInterfaceToken 3237 3238writeInterfaceToken(token: string): boolean 3239 3240将接口描述符写入MessageParcel对象,远端对象可使用该信息校验本次通信。 3241 3242**系统能力**:SystemCapability.Communication.IPC.Core 3243 3244**参数:** 3245 3246 | 参数名 | 类型 | 必填 | 说明 | 3247 | ------ | ------ | ---- | ------------------ | 3248 | token | string | 是 | 字符串类型描述符。 | 3249 3250**返回值:** 3251 3252 | 类型 | 说明 | 3253 | ------- | ----------------------------------------- | 3254 | boolean | true:操作成功,false:操作失败。| 3255 3256**示例:** 3257 3258 ```ts 3259 let data = rpc.MessageParcel.create(); 3260 let result = data.writeInterfaceToken("aaa"); 3261 console.log("RpcServer: writeInterfaceToken is " + result); 3262 ``` 3263 3264 3265### readInterfaceToken 3266 3267readInterfaceToken(): string 3268 3269从MessageParcel中读取接口描述符,接口描述符按写入MessageParcel的顺序读取,本地对象可使用该信息检验本次通信。 3270 3271**系统能力**:SystemCapability.Communication.IPC.Core 3272 3273**返回值:** 3274 3275 | 类型 | 说明 | 3276 | ------ | ------------------------ | 3277 | string | 返回读取到的接口描述符。 | 3278 3279**示例:** 3280 3281 ```ts 3282 class Stub extends rpc.RemoteObject { 3283 onRemoteMessageRequest(code, data, reply, option) { 3284 let interfaceToken = data.readInterfaceToken(); 3285 console.log("RpcServer: interfaceToken is " + interfaceToken); 3286 return true; 3287 } 3288 } 3289 ``` 3290 3291### getSize 3292 3293getSize(): number 3294 3295获取当前MessageParcel的数据大小。 3296 3297**系统能力**:SystemCapability.Communication.IPC.Core 3298 3299**返回值:** 3300 3301 | 类型 | 说明 | 3302 | ------ | --------------------------------------------- | 3303 | number | 获取的MessageParcel的数据大小。以字节为单位。 | 3304 3305**示例:** 3306 3307 ```ts 3308 let data = rpc.MessageParcel.create(); 3309 let size = data.getSize(); 3310 console.log("RpcClient: size is " + size); 3311 ``` 3312 3313### getCapacity 3314 3315getCapacity(): number 3316 3317获取当前MessageParcel的容量。 3318 3319**系统能力**:SystemCapability.Communication.IPC.Core 3320 3321**返回值:** 3322 3323 | 类型 | 说明 | 3324 | ------ | --------------------------------------------- | 3325 | number | 获取的MessageParcel的容量大小。以字节为单位。 | 3326 3327**示例:** 3328 3329 ```ts 3330 let data = rpc.MessageParcel.create(); 3331 let result = data.getCapacity(); 3332 console.log("RpcClient: capacity is " + result); 3333 ``` 3334 3335### setSize 3336 3337setSize(size: number): boolean 3338 3339设置MessageParcel实例中包含的数据大小。 3340 3341**系统能力**:SystemCapability.Communication.IPC.Core 3342 3343**参数:** 3344 3345 | 参数名 | 类型 | 必填 | 说明 | 3346 | ------ | ------ | ---- | ------------------------------------------- | 3347 | size | number | 是 | MessageParcel实例的数据大小。以字节为单位。 | 3348 3349**返回值:** 3350 3351 | 类型 | 说明 | 3352 | ------- | --------------------------------- | 3353 | boolean | true:设置成功,false:设置失败。| 3354 3355**示例:** 3356 3357 ```ts 3358 let data = rpc.MessageParcel.create(); 3359 let setSize = data.setSize(16); 3360 console.log("RpcClient: setSize is " + setSize); 3361 ``` 3362 3363### setCapacity 3364 3365setCapacity(size: number): boolean 3366 3367设置MessageParcel实例的存储容量。 3368 3369**系统能力**:SystemCapability.Communication.IPC.Core 3370 3371**参数:** 3372 3373 | 参数名 | 类型 | 必填 | 说明 | 3374 | ------ | ------ | ---- | ------------------------------------------- | 3375 | size | number | 是 | MessageParcel实例的存储容量。以字节为单位。 | 3376 3377**返回值:** 3378 3379 | 类型 | 说明 | 3380 | ------- | --------------------------------- | 3381 | boolean | true:设置成功,false:设置失败。| 3382 3383**示例:** 3384 3385 ```ts 3386 let data = rpc.MessageParcel.create(); 3387 let result = data.setCapacity(100); 3388 console.log("RpcClient: setCapacity is " + result); 3389 ``` 3390 3391### getWritableBytes 3392 3393getWritableBytes(): number 3394 3395获取MessageParcel的可写字节空间。 3396 3397**系统能力**:SystemCapability.Communication.IPC.Core 3398 3399**返回值:** 3400 3401 | 类型 | 说明 | 3402 | ------ | --------------------------------------------------- | 3403 | number | 获取到的MessageParcel的可写字节空间。以字节为单位。 | 3404 3405**示例:** 3406 3407 ```ts 3408 class Stub extends rpc.RemoteObject { 3409 onRemoteMessageRequest(code, data, reply, option) { 3410 let getWritableBytes = data.getWritableBytes(); 3411 console.log("RpcServer: getWritableBytes is " + getWritableBytes); 3412 return true; 3413 } 3414 } 3415 ``` 3416 3417### getReadableBytes 3418 3419getReadableBytes(): number 3420 3421获取MessageParcel的可读字节空间。 3422 3423**系统能力**:SystemCapability.Communication.IPC.Core 3424 3425**返回值:** 3426 3427 | 类型 | 说明 | 3428 | ------ | --------------------------------------------------- | 3429 | number | 获取到的MessageParcel的可读字节空间。以字节为单位。 | 3430 3431**示例:** 3432 3433 ```ts 3434 class Stub extends rpc.RemoteObject { 3435 onRemoteRequest(code, data, reply, option) { 3436 let result = data.getReadableBytes(); 3437 console.log("RpcServer: getReadableBytes is " + result); 3438 return true; 3439 } 3440 } 3441 ``` 3442 3443### getReadPosition 3444 3445getReadPosition(): number 3446 3447获取MessageParcel的读位置。 3448 3449**系统能力**:SystemCapability.Communication.IPC.Core 3450 3451**返回值:** 3452 3453 | 类型 | 说明 | 3454 | ------ | --------------------------------------- | 3455 | number | 返回MessageParcel实例中的当前读取位置。 | 3456 3457**示例:** 3458 3459 ```ts 3460 let data = rpc.MessageParcel.create(); 3461 let readPos = data.getReadPosition(); 3462 console.log("RpcClient: readPos is " + readPos); 3463 ``` 3464 3465### getWritePosition 3466 3467getWritePosition(): number 3468 3469获取MessageParcel的写位置。 3470 3471**系统能力**:SystemCapability.Communication.IPC.Core 3472 3473**返回值:** 3474 3475 | 类型 | 说明 | 3476 | ------ | --------------------------------------- | 3477 | number | 返回MessageParcel实例中的当前写入位置。 | 3478 3479**示例:** 3480 3481 ```ts 3482 let data = rpc.MessageParcel.create(); 3483 data.writeInt(10); 3484 let bwPos = data.getWritePosition(); 3485 console.log("RpcClient: bwPos is " + bwPos); 3486 ``` 3487 3488### rewindRead 3489 3490rewindRead(pos: number): boolean 3491 3492重新偏移读取位置到指定的位置。 3493 3494**系统能力**:SystemCapability.Communication.IPC.Core 3495 3496**参数:** 3497 3498 | 参数名 | 类型 | 必填 | 说明 | 3499 | ------ | ------ | ---- | ------------------------ | 3500 | pos | number | 是 | 开始读取数据的目标位置。 | 3501 3502**返回值:** 3503 3504 | 类型 | 说明 | 3505 | ------- | ------------------------------------------------- | 3506 | boolean | true:读取位置发生更改,false:读取位置未发生更改。| 3507 3508**示例:** 3509 3510 ```ts 3511 let data = rpc.MessageParcel.create(); 3512 data.writeInt(12); 3513 data.writeString("parcel"); 3514 let number = data.readInt(); 3515 console.log("RpcClient: number is " + number); 3516 data.rewindRead(0); 3517 let number2 = data.readInt(); 3518 console.log("RpcClient: rewindRead is " + number2); 3519 ``` 3520 3521### rewindWrite 3522 3523rewindWrite(pos: number): boolean 3524 3525重新偏移写位置到指定的位置。 3526 3527**系统能力**:SystemCapability.Communication.IPC.Core 3528 3529**参数:** 3530 3531 | 参数名 | 类型 | 必填 | 说明 | 3532 | ------ | ------ | ---- | ------------------------ | 3533 | pos | number | 是 | 开始写入数据的目标位置。 | 3534 3535**返回值:** 3536 3537 | 类型 | 说明 | 3538 | ------- | --------------------------------------------- | 3539 | boolean | true:写入位置发生更改,false:写入位置未发生更改。| 3540 3541**示例:** 3542 3543 ```ts 3544 let data = rpc.MessageParcel.create(); 3545 data.writeInt(4); 3546 data.rewindWrite(0); 3547 data.writeInt(5); 3548 let number = data.readInt(); 3549 console.log("RpcClient: rewindWrite is: " + number); 3550 ``` 3551 3552### writeByte 3553 3554writeByte(val: number): boolean 3555 3556将字节值写入MessageParcel实例。 3557 3558**系统能力**:SystemCapability.Communication.IPC.Core 3559 3560**参数:** 3561 3562 | 参数名 | 类型 | 必填 | 说明 | 3563 | ------ | ------ | ---- | ---------------- | 3564 | val | number | 是 | 要写入的字节值。 | 3565 3566**返回值:** 3567 3568 | 类型 | 说明 | 3569 | ------- | ----------------------------- | 3570 | boolean | 写入返回成功,否则返回false。 | 3571 3572**示例:** 3573 3574 ```ts 3575 let data = rpc.MessageParcel.create(); 3576 let result = data.writeByte(2); 3577 console.log("RpcClient: writeByte is: " + result); 3578 ``` 3579 3580### readByte 3581 3582readByte(): number 3583 3584从MessageParcel实例读取字节值。 3585 3586**系统能力**:SystemCapability.Communication.IPC.Core 3587 3588**返回值:** 3589 3590 | 类型 | 说明 | 3591 | ------ | ------------ | 3592 | number | 返回字节值。 | 3593 3594**示例:** 3595 3596 ```ts 3597 let data = rpc.MessageParcel.create(); 3598 let result = data.writeByte(2); 3599 console.log("RpcClient: writeByte is: " + result); 3600 let ret = data.readByte(); 3601 console.log("RpcClient: readByte is: " + ret); 3602 ``` 3603 3604### writeShort 3605 3606writeShort(val: number): boolean 3607 3608将短整数值写入MessageParcel实例。 3609 3610**系统能力**:SystemCapability.Communication.IPC.Core 3611 3612**参数:** 3613 3614 | 参数名 | 类型 | 必填 | 说明 | 3615 | ------ | ------ | ---- | ------------------ | 3616 | val | number | 是 | 要写入的短整数值。 | 3617 3618**返回值:** 3619 3620 | 类型 | 说明 | 3621 | ------- | ----------------------------- | 3622 | boolean | true:写入成功,false:写入失败。| 3623 3624**示例:** 3625 3626 ```ts 3627 let data = rpc.MessageParcel.create(); 3628 let result = data.writeShort(8); 3629 console.log("RpcClient: writeShort is: " + result); 3630 ``` 3631 3632### readShort 3633 3634readShort(): number 3635 3636从MessageParcel实例读取短整数值。 3637 3638**系统能力**:SystemCapability.Communication.IPC.Core 3639 3640**返回值:** 3641 3642 | 类型 | 说明 | 3643 | ------ | -------------- | 3644 | number | 返回短整数值。 | 3645 3646**示例:** 3647 3648 ```ts 3649 let data = rpc.MessageParcel.create(); 3650 let result = data.writeShort(8); 3651 console.log("RpcClient: writeShort is: " + result); 3652 let ret = data.readShort(); 3653 console.log("RpcClient: readShort is: " + ret); 3654 ``` 3655 3656### writeInt 3657 3658writeInt(val: number): boolean 3659 3660将整数值写入MessageParcel实例。 3661 3662**系统能力**:SystemCapability.Communication.IPC.Core 3663 3664**参数:** 3665 3666 | 参数名 | 类型 | 必填 | 说明 | 3667 | ------ | ------ | ---- | ---------------- | 3668 | val | number | 是 | 要写入的整数值。 | 3669 3670**返回值:** 3671 3672 | 类型 | 说明 | 3673 | ------- | ----------------------------- | 3674 | boolean | 写入返回成功,否则返回false。 | 3675 3676**示例:** 3677 3678 ```ts 3679 let data = rpc.MessageParcel.create(); 3680 let result = data.writeInt(10); 3681 console.log("RpcClient: writeInt is " + result); 3682 ``` 3683 3684### readInt 3685 3686readInt(): number 3687 3688从MessageParcel实例读取整数值。 3689 3690**系统能力**:SystemCapability.Communication.IPC.Core 3691 3692**返回值:** 3693 3694 | 类型 | 说明 | 3695 | ------ | ------------ | 3696 | number | 返回整数值。 | 3697 3698**示例:** 3699 3700 ```ts 3701 let data = rpc.MessageParcel.create(); 3702 let result = data.writeInt(10); 3703 console.log("RpcClient: writeInt is " + result); 3704 let ret = data.readInt(); 3705 console.log("RpcClient: readInt is " + ret); 3706 ``` 3707 3708### writeLong 3709 3710writeLong(val: number): boolean 3711 3712将长整数值写入MessageParcel实例。 3713 3714**系统能力**:SystemCapability.Communication.IPC.Core 3715 3716**参数:** 3717 3718 | 参数名 | 类型 | 必填 | 说明 | 3719 | ------ | ------ | ---- | ---------------- | 3720 | val | number | 是 | 要写入的长整数值 | 3721 3722**返回值:** 3723 3724 | 类型 | 说明 | 3725 | ------- | --------------------------------- | 3726 | boolean | true:写入成功,false:写入失败。| 3727 3728**示例:** 3729 3730 ```ts 3731 let data = rpc.MessageParcel.create(); 3732 let result = data.writeLong(10000); 3733 console.log("RpcClient: writeLong is " + result); 3734 ``` 3735 3736### readLong 3737 3738readLong(): number 3739 3740从MessageParcel实例中读取长整数值。 3741 3742**系统能力**:SystemCapability.Communication.IPC.Core 3743 3744**返回值:** 3745 3746 | 类型 | 说明 | 3747 | ------ | -------------- | 3748 | number | 返回长整数值。 | 3749 3750**示例:** 3751 3752 ```ts 3753 let data = rpc.MessageParcel.create(); 3754 let result = data.writeLong(10000); 3755 console.log("RpcClient: writeLong is " + result); 3756 let ret = data.readLong(); 3757 console.log("RpcClient: readLong is " + ret); 3758 ``` 3759 3760### writeFloat 3761 3762writeFloat(val: number): boolean 3763 3764将浮点值写入MessageParcel实例。 3765 3766**系统能力**:SystemCapability.Communication.IPC.Core 3767 3768**参数:** 3769 3770 | 参数名 | 类型 | 必填 | 说明 | 3771 | ------ | ------ | ---- | ---------------- | 3772 | val | number | 是 | 要写入的浮点值。 | 3773 3774**返回值:** 3775 3776 | 类型 | 说明 | 3777 | ------- | --------------------------------- | 3778 | boolean | true:写入成功,false:写入失败。| 3779 3780**示例:** 3781 3782 ```ts 3783 let data = rpc.MessageParcel.create(); 3784 let result = data.writeFloat(1.2); 3785 console.log("RpcClient: writeFloat is " + result); 3786 ``` 3787 3788### readFloat 3789 3790readFloat(): number 3791 3792从MessageParcel实例中读取浮点值。 3793 3794**系统能力**:SystemCapability.Communication.IPC.Core 3795 3796**返回值:** 3797 3798 | 类型 | 说明 | 3799 | ------ | ------------ | 3800 | number | 返回浮点值。 | 3801 3802**示例:** 3803 3804 ```ts 3805 let data = rpc.MessageParcel.create(); 3806 let result = data.writeFloat(1.2); 3807 console.log("RpcClient: writeFloat is " + result); 3808 let ret = data.readFloat(); 3809 console.log("RpcClient: readFloat is " + ret); 3810 ``` 3811 3812### writeDouble 3813 3814writeDouble(val: number): boolean 3815 3816将双精度浮点值写入MessageParcel实例。 3817 3818**系统能力**:SystemCapability.Communication.IPC.Core 3819 3820**参数:** 3821 3822 | 参数名 | 类型 | 必填 | 说明 | 3823 | ------ | ------ | ---- | ---------------------- | 3824 | val | number | 是 | 要写入的双精度浮点值。 | 3825 3826**返回值:** 3827 3828 | 类型 | 说明 | 3829 | ------- | --------------------------------- | 3830 | boolean | true:写入成功,false:写入失败。| 3831 3832**示例:** 3833 3834 ```ts 3835 let data = rpc.MessageParcel.create(); 3836 let result = data.writeDouble(10.2); 3837 console.log("RpcClient: writeDouble is " + result); 3838 ``` 3839 3840### readDouble 3841 3842readDouble(): number 3843 3844从MessageParcel实例读取双精度浮点值。 3845 3846**系统能力**:SystemCapability.Communication.IPC.Core 3847 3848**返回值:** 3849 3850 | 类型 | 说明 | 3851 | ------ | ------------------ | 3852 | number | 返回双精度浮点值。 | 3853 3854**示例:** 3855 3856 ```ts 3857 let data = rpc.MessageParcel.create(); 3858 let result = data.writeDouble(10.2); 3859 console.log("RpcClient: writeDouble is " + result); 3860 let ret = data.readDouble(); 3861 console.log("RpcClient: readDouble is " + ret); 3862 ``` 3863 3864### writeBoolean 3865 3866writeBoolean(val: boolean): boolean 3867 3868将布尔值写入MessageParcel实例。 3869 3870**系统能力**:SystemCapability.Communication.IPC.Core 3871 3872**参数:** 3873 3874 | 参数名 | 类型 | 必填 | 说明 | 3875 | ------ | ------- | ---- | ---------------- | 3876 | val | boolean | 是 | 要写入的布尔值。 | 3877 3878**返回值:** 3879 3880 | 类型 | 说明 | 3881 | ------- | --------------------------------- | 3882 | boolean | true:写入成功,false:写入失败。| 3883 3884**示例:** 3885 3886 ```ts 3887 let data = rpc.MessageParcel.create(); 3888 let result = data.writeBoolean(false); 3889 console.log("RpcClient: writeBoolean is " + result); 3890 ``` 3891 3892### readBoolean 3893 3894readBoolean(): boolean 3895 3896从MessageParcel实例读取布尔值。 3897 3898**系统能力**:SystemCapability.Communication.IPC.Core 3899 3900**返回值:** 3901 3902 | 类型 | 说明 | 3903 | ------- | -------------------- | 3904 | boolean | 返回读取到的布尔值。 | 3905 3906**示例:** 3907 3908 ```ts 3909 let data = rpc.MessageParcel.create(); 3910 let result = data.writeBoolean(false); 3911 console.log("RpcClient: writeBoolean is " + result); 3912 let ret = data.readBoolean(); 3913 console.log("RpcClient: readBoolean is " + ret); 3914 ``` 3915 3916### writeChar 3917 3918writeChar(val: number): boolean 3919 3920将单个字符值写入MessageParcel实例。 3921 3922**系统能力**:SystemCapability.Communication.IPC.Core 3923 3924**参数:** 3925 3926 | 参数名 | 类型 | 必填 | 说明 | 3927 | ------ | ------ | ---- | -------------------- | 3928 | val | number | 是 | 要写入的单个字符值。 | 3929 3930**返回值:** 3931 3932 | 类型 | 说明 | 3933 | ------- | ----------------------------- | 3934 | boolean | true:写入成功,false:写入失败。| 3935 3936**示例:** 3937 3938 ```ts 3939 let data = rpc.MessageParcel.create(); 3940 let result = data.writeChar(97); 3941 console.log("RpcClient: writeChar is " + result); 3942 ``` 3943 3944### readChar 3945 3946readChar(): number 3947 3948从MessageParcel实例中读取单个字符值。 3949 3950**系统能力**:SystemCapability.Communication.IPC.Core 3951 3952**返回值:** 3953 3954 | 类型 | 说明 | 3955 | ------ | ---------------- | 3956 | number | 返回单个字符值。 | 3957 3958**示例:** 3959 3960 ```ts 3961 let data = rpc.MessageParcel.create(); 3962 let result = data.writeChar(97); 3963 console.log("RpcClient: writeChar is " + result); 3964 let ret = data.readChar(); 3965 console.log("RpcClient: readChar is " + ret); 3966 ``` 3967 3968### writeString 3969 3970writeString(val: string): boolean 3971 3972将字符串值写入MessageParcel实例。 3973 3974**系统能力**:SystemCapability.Communication.IPC.Core 3975 3976**参数:** 3977 3978 | 参数名 | 类型 | 必填 | 说明 | 3979 | ------ | ------ | ---- | ----------------------------------------- | 3980 | val | string | 是 | 要写入的字符串值,其长度应小于40960字节。 | 3981 3982**返回值:** 3983 3984 | 类型 | 说明 | 3985 | ------- | --------------------------------- | 3986 | boolean | true:写入成功,false:写入失败。| 3987 3988**示例:** 3989 3990 ```ts 3991 let data = rpc.MessageParcel.create(); 3992 let result = data.writeString('abc'); 3993 console.log("RpcClient: writeString is " + result); 3994 ``` 3995 3996### readString 3997 3998readString(): string 3999 4000从MessageParcel实例读取字符串值。 4001 4002**系统能力**:SystemCapability.Communication.IPC.Core 4003 4004**返回值:** 4005 4006 | 类型 | 说明 | 4007 | ------ | -------------- | 4008 | string | 返回字符串值。 | 4009 4010**示例:** 4011 4012 ```ts 4013 let data = rpc.MessageParcel.create(); 4014 let result = data.writeString('abc'); 4015 console.log("RpcClient: writeString is " + result); 4016 let ret = data.readString(); 4017 console.log("RpcClient: readString is " + ret); 4018 ``` 4019 4020### writeSequenceable 4021 4022writeSequenceable(val: Sequenceable): boolean 4023 4024将自定义序列化对象写入MessageParcel实例。 4025 4026**系统能力**:SystemCapability.Communication.IPC.Core 4027 4028**参数:** 4029 4030 | 参数名 | 类型 | 必填 | 说明 | 4031 | ------ | ----------------------------- | ---- | -------------------- | 4032 | val | [Sequenceable](#sequenceable) | 是 | 要写入的可序列对象。 | 4033 4034**返回值:** 4035 4036 | 类型 | 说明 | 4037 | ------- | -------------------------------- | 4038 | boolean | true:写入成功,false:写入失败。| 4039 4040**示例:** 4041 4042 ```ts 4043 class MySequenceable { 4044 num: number; 4045 str: string; 4046 constructor(num, str) { 4047 this.num = num; 4048 this.str = str; 4049 } 4050 marshalling(messageParcel) { 4051 messageParcel.writeInt(this.num); 4052 messageParcel.writeString(this.str); 4053 return true; 4054 } 4055 unmarshalling(messageParcel) { 4056 this.num = messageParcel.readInt(); 4057 this.str = messageParcel.readString(); 4058 return true; 4059 } 4060 } 4061 let sequenceable = new MySequenceable(1, "aaa"); 4062 let data = rpc.MessageParcel.create(); 4063 let result = data.writeSequenceable(sequenceable); 4064 console.log("RpcClient: writeSequenceable is " + result); 4065 ``` 4066 4067### readSequenceable 4068 4069readSequenceable(dataIn: Sequenceable): boolean 4070 4071从MessageParcel实例中读取成员变量到指定的对象(dataIn)。 4072 4073**系统能力**:SystemCapability.Communication.IPC.Core 4074 4075**参数:** 4076 4077 | 参数名 | 类型 | 必填 | 说明 | 4078 | ------ | ----------------------------- | ------- | ---------------------------------------------- | 4079 | dataIn | [Sequenceable](#sequenceabledeprecated) | 是 | 需要从MessageParcel读取成员变量的对象。 | 4080 4081**返回值:** 4082 4083 | 类型 | 说明 | 4084 | ------- | ---------------------------------------- | 4085 | boolean | true:反序列化成功,false:反序列化失败。| 4086 4087**示例:** 4088 4089 ```ts 4090 class MySequenceable { 4091 num: number; 4092 str: string; 4093 constructor(num, str) { 4094 this.num = num; 4095 this.str = str; 4096 } 4097 marshalling(messageParcel) { 4098 messageParcel.writeInt(this.num); 4099 messageParcel.writeString(this.str); 4100 return true; 4101 } 4102 unmarshalling(messageParcel) { 4103 this.num = messageParcel.readInt(); 4104 this.str = messageParcel.readString(); 4105 return true; 4106 } 4107 } 4108 let sequenceable = new MySequenceable(1, "aaa"); 4109 let data = rpc.MessageParcel.create(); 4110 let result = data.writeSequenceable(sequenceable); 4111 console.log("RpcClient: writeSequenceable is " + result); 4112 let ret = new MySequenceable(0, ""); 4113 let result2 = data.readSequenceable(ret); 4114 console.log("RpcClient: writeSequenceable is " + result2); 4115 ``` 4116 4117### writeByteArray 4118 4119writeByteArray(byteArray: number[]): boolean 4120 4121将字节数组写入MessageParcel实例。 4122 4123**系统能力**:SystemCapability.Communication.IPC.Core 4124 4125**参数:** 4126 4127 | 参数名 | 类型 | 必填 | 说明 | 4128 | --------- | -------- | ---- | ------------------ | 4129 | byteArray | number[] | 是 | 要写入的字节数组。 | 4130 4131**返回值:** 4132 4133 | 类型 | 说明 | 4134 | ------- | -------------------------------- | 4135 | boolean | true:写入成功,false:写入失败。| 4136 4137**示例:** 4138 4139 ```ts 4140 let data = rpc.MessageParcel.create(); 4141 let ByteArrayVar = [1, 2, 3, 4, 5]; 4142 let result = data.writeByteArray(ByteArrayVar); 4143 console.log("RpcClient: writeByteArray is " + result); 4144 ``` 4145 4146### readByteArray 4147 4148readByteArray(dataIn: number[]): void 4149 4150从MessageParcel实例读取字节数组。 4151 4152**系统能力**:SystemCapability.Communication.IPC.Core 4153 4154**参数:** 4155 4156 | 参数名 | 类型 | 必填 | 说明 | 4157 | ------ | -------- | ---- | ------------------ | 4158 | dataIn | number[] | 是 | 要读取的字节数组。 | 4159 4160**示例:** 4161 4162 ```ts 4163 let data = rpc.MessageParcel.create(); 4164 let ByteArrayVar = [1, 2, 3, 4, 5]; 4165 let result = data.writeByteArray(ByteArrayVar); 4166 console.log("RpcClient: writeByteArray is " + result); 4167 let array = new Array(5); 4168 data.readByteArray(array); 4169 ``` 4170 4171### readByteArray 4172 4173readByteArray(): number[] 4174 4175从MessageParcel实例中读取字节数组。 4176 4177**系统能力**:SystemCapability.Communication.IPC.Core 4178 4179**返回值:** 4180 4181 | 类型 | 说明 | 4182 | -------- | -------------- | 4183 | number[] | 返回字节数组。 | 4184 4185**示例:** 4186 4187 ```ts 4188 let data = rpc.MessageParcel.create(); 4189 let ByteArrayVar = [1, 2, 3, 4, 5]; 4190 let result = data.writeByteArray(ByteArrayVar); 4191 console.log("RpcClient: writeByteArray is " + result); 4192 let array = data.readByteArray(); 4193 console.log("RpcClient: readByteArray is " + array); 4194 ``` 4195 4196### writeShortArray 4197 4198writeShortArray(shortArray: number[]): boolean 4199 4200将短整数数组写入MessageParcel实例。 4201 4202**系统能力**:SystemCapability.Communication.IPC.Core 4203 4204**参数:** 4205 4206 | 参数名 | 类型 | 必填 | 说明 | 4207 | ---------- | -------- | ---- | -------------------- | 4208 | shortArray | number[] | 是 | 要写入的短整数数组。 | 4209 4210**返回值:** 4211 4212 | 类型 | 说明 | 4213 | ------- | -------------------------------- | 4214 | boolean | true:写入成功,false:写入失败。| 4215 4216**示例:** 4217 4218 ```ts 4219 let data = rpc.MessageParcel.create(); 4220 let result = data.writeShortArray([11, 12, 13]); 4221 console.log("RpcClient: writeShortArray is " + result); 4222 ``` 4223 4224### readShortArray 4225 4226readShortArray(dataIn: number[]): void 4227 4228从MessageParcel实例中读取短整数数组。 4229 4230**系统能力**:SystemCapability.Communication.IPC.Core 4231 4232**参数:** 4233 4234 | 参数名 | 类型 | 必填 | 说明 | 4235 | ------ | -------- | ---- | -------------------- | 4236 | dataIn | number[] | 是 | 要读取的短整数数组。 | 4237 4238**示例:** 4239 4240 ```ts 4241 let data = rpc.MessageParcel.create(); 4242 let result = data.writeShortArray([11, 12, 13]); 4243 console.log("RpcClient: writeShortArray is " + result); 4244 let array = new Array(3); 4245 data.readShortArray(array); 4246 ``` 4247 4248### readShortArray 4249 4250readShortArray(): number[] 4251 4252从MessageParcel实例中读取短整数数组。 4253 4254**系统能力**:SystemCapability.Communication.IPC.Core 4255 4256**返回值:** 4257 4258 | 类型 | 说明 | 4259 | -------- | ---------------- | 4260 | number[] | 返回短整数数组。 | 4261 4262**示例:** 4263 4264 ```ts 4265 let data = rpc.MessageParcel.create(); 4266 let result = data.writeShortArray([11, 12, 13]); 4267 console.log("RpcClient: writeShortArray is " + result); 4268 let array = data.readShortArray(); 4269 console.log("RpcClient: readShortArray is " + array); 4270 ``` 4271 4272### writeIntArray 4273 4274writeIntArray(intArray: number[]): boolean 4275 4276将整数数组写入MessageParcel实例。 4277 4278**系统能力**:SystemCapability.Communication.IPC.Core 4279 4280**参数:** 4281 4282 | 参数名 | 类型 | 必填 | 说明 | 4283 | -------- | -------- | ---- | ------------------ | 4284 | intArray | number[] | 是 | 要写入的整数数组。 | 4285 4286**返回值:** 4287 4288 | 类型 | 说明 | 4289 | ------- | -------------------------------- | 4290 | boolean | true:写入成功,false:写入失败。| 4291 4292**示例:** 4293 4294 ```ts 4295 let data = rpc.MessageParcel.create(); 4296 let result = data.writeIntArray([100, 111, 112]); 4297 console.log("RpcClient: writeIntArray is " + result); 4298 ``` 4299 4300### readIntArray 4301 4302readIntArray(dataIn: number[]): void 4303 4304从MessageParcel实例中读取整数数组。 4305 4306**系统能力**:SystemCapability.Communication.IPC.Core 4307 4308**参数:** 4309 4310 | 参数名 | 类型 | 必填 | 说明 | 4311 | ------ | -------- | ---- | ------------------ | 4312 | dataIn | number[] | 是 | 要读取的整数数组。 | 4313 4314**示例:** 4315 4316 ```ts 4317 let data = rpc.MessageParcel.create(); 4318 let result = data.writeIntArray([100, 111, 112]); 4319 console.log("RpcClient: writeIntArray is " + result); 4320 let array = new Array(3); 4321 data.readIntArray(array); 4322 ``` 4323 4324### readIntArray 4325 4326readIntArray(): number[] 4327 4328从MessageParcel实例中读取整数数组。 4329 4330**系统能力**:SystemCapability.Communication.IPC.Core 4331 4332**返回值:** 4333 4334 | 类型 | 说明 | 4335 | -------- | -------------- | 4336 | number[] | 返回整数数组。 | 4337 4338**示例:** 4339 4340 ```ts 4341 let data = rpc.MessageParcel.create(); 4342 let result = data.writeIntArray([100, 111, 112]); 4343 console.log("RpcClient: writeIntArray is " + result); 4344 let array = data.readIntArray(); 4345 console.log("RpcClient: readIntArray is " + array); 4346 ``` 4347 4348### writeLongArray 4349 4350writeLongArray(longArray: number[]): boolean 4351 4352将长整数数组写入MessageParcel实例。 4353 4354**系统能力**:SystemCapability.Communication.IPC.Core 4355 4356**参数:** 4357 4358 | 参数名 | 类型 | 必填 | 说明 | 4359 | --------- | -------- | ---- | -------------------- | 4360 | longArray | number[] | 是 | 要写入的长整数数组。 | 4361 4362**返回值:** 4363 4364 | 类型 | 说明 | 4365 | ------- | ----------------------------- | 4366 | boolean | true:写入成功,false:写入失败。| 4367 4368**示例:** 4369 4370 ```ts 4371 let data = rpc.MessageParcel.create(); 4372 let result = data.writeLongArray([1111, 1112, 1113]); 4373 console.log("RpcClient: writeLongArray is " + result); 4374 ``` 4375 4376### readLongArray 4377 4378readLongArray(dataIn: number[]): void 4379 4380从MessageParcel实例读取长整数数组。 4381 4382**系统能力**:SystemCapability.Communication.IPC.Core 4383 4384**参数:** 4385 4386 | 参数名 | 类型 | 必填 | 说明 | 4387 | ------ | -------- | ---- | -------------------- | 4388 | dataIn | number[] | 是 | 要读取的长整数数组。 | 4389 4390**示例:** 4391 4392 ```ts 4393 let data = rpc.MessageParcel.create(); 4394 let result = data.writeLongArray([1111, 1112, 1113]); 4395 console.log("RpcClient: writeLongArray is " + result); 4396 let array = new Array(3); 4397 data.readLongArray(array); 4398 ``` 4399 4400### readLongArray 4401 4402readLongArray(): number[] 4403 4404从MessageParcel实例中读取长整数数组。 4405 4406**系统能力**:SystemCapability.Communication.IPC.Core 4407 4408**返回值:** 4409 4410 | 类型 | 说明 | 4411 | -------- | ---------------- | 4412 | number[] | 返回长整数数组。 | 4413 4414**示例:** 4415 4416 ```ts 4417 let data = rpc.MessageParcel.create(); 4418 let result = data.writeLongArray([1111, 1112, 1113]); 4419 console.log("RpcClient: writeLongArray is " + result); 4420 let array = data.readLongArray(); 4421 console.log("RpcClient: readLongArray is " + array); 4422 ``` 4423 4424### writeFloatArray 4425 4426writeFloatArray(floatArray: number[]): boolean 4427 4428将浮点数组写入MessageParcel实例。 4429 4430**系统能力**:SystemCapability.Communication.IPC.Core 4431 4432**参数:** 4433 4434 | 参数名 | 类型 | 必填 | 说明 | 4435 | ---------- | -------- | ---- | --- | 4436 | floatArray | number[] | 是 | 要写入的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 | 4437 4438**返回值:** 4439 4440 | 类型 | 说明 | 4441 | ------- | -------------------------------- | 4442 | boolean | true:写入成功,false:写入失败。| 4443 4444**示例:** 4445 4446 ```ts 4447 let data = rpc.MessageParcel.create(); 4448 let result = data.writeFloatArray([1.2, 1.3, 1.4]); 4449 console.log("RpcClient: writeFloatArray is " + result); 4450 ``` 4451 4452### readFloatArray 4453 4454readFloatArray(dataIn: number[]): void 4455 4456从MessageParcel实例中读取浮点数组。 4457 4458**系统能力**:SystemCapability.Communication.IPC.Core 4459 4460**参数:** 4461 4462 | 参数名 | 类型 | 必填 | 说明 | 4463 | ------ | -------- | ---- | ------ | 4464 | dataIn | number[] | 是 | 要读取的浮点数组。由于系统内部对float类型的数据是按照double处理的,使用时对于数组所占的总字节数应按照double类型来计算。 | 4465 4466**示例:** 4467 4468 ```ts 4469 let data = rpc.MessageParcel.create(); 4470 let result = data.writeFloatArray([1.2, 1.3, 1.4]); 4471 console.log("RpcClient: writeFloatArray is " + result); 4472 let array = new Array(3); 4473 data.readFloatArray(array); 4474 ``` 4475 4476### readFloatArray 4477 4478readFloatArray(): number[] 4479 4480从MessageParcel实例中读取浮点数组。 4481 4482**系统能力**:SystemCapability.Communication.IPC.Core 4483 4484**返回值:** 4485 4486 | 类型 | 说明 | 4487 | -------- | -------------- | 4488 | number[] | 返回浮点数组。 | 4489 4490**示例:** 4491 4492 ```ts 4493 let data = rpc.MessageParcel.create(); 4494 let result = data.writeFloatArray([1.2, 1.3, 1.4]); 4495 console.log("RpcClient: writeFloatArray is " + result); 4496 let array = data.readFloatArray(); 4497 console.log("RpcClient: readFloatArray is " + array); 4498 ``` 4499 4500### writeDoubleArray 4501 4502writeDoubleArray(doubleArray: number[]): boolean 4503 4504将双精度浮点数组写入MessageParcel实例。 4505 4506**系统能力**:SystemCapability.Communication.IPC.Core 4507 4508**参数:** 4509 4510 | 参数名 | 类型 | 必填 | 说明 | 4511 | ----------- | -------- | ---- | ------------------------ | 4512 | doubleArray | number[] | 是 | 要写入的双精度浮点数组。 | 4513 4514**返回值:** 4515 4516 | 类型 | 说明 | 4517 | ------- | -------------------------------- | 4518 | boolean | true:写入成功,false:写入失败。| 4519 4520**示例:** 4521 4522 ```ts 4523 let data = rpc.MessageParcel.create(); 4524 let result = data.writeDoubleArray([11.1, 12.2, 13.3]); 4525 console.log("RpcClient: writeDoubleArray is " + result); 4526 ``` 4527 4528### readDoubleArray 4529 4530readDoubleArray(dataIn: number[]): void 4531 4532从MessageParcel实例中读取双精度浮点数组。 4533 4534**系统能力**:SystemCapability.Communication.IPC.Core 4535 4536**参数:** 4537 4538 | 参数名 | 类型 | 必填 | 说明 | 4539 | ------ | -------- | ---- | ------------------------ | 4540 | dataIn | number[] | 是 | 要读取的双精度浮点数组。 | 4541 4542**示例:** 4543 4544 ```ts 4545 let data = rpc.MessageParcel.create(); 4546 let result = data.writeDoubleArray([11.1, 12.2, 13.3]); 4547 console.log("RpcClient: writeDoubleArray is " + result); 4548 let array = new Array(3); 4549 data.readDoubleArray(array); 4550 ``` 4551 4552### readDoubleArray 4553 4554readDoubleArray(): number[] 4555 4556从MessageParcel实例读取双精度浮点数组。 4557 4558**系统能力**:SystemCapability.Communication.IPC.Core 4559 4560**返回值:** 4561 4562 | 类型 | 说明 | 4563 | -------- | -------------------- | 4564 | number[] | 返回双精度浮点数组。 | 4565 4566**示例:** 4567 4568 ```ts 4569 let data = rpc.MessageParcel.create(); 4570 let result = data.writeDoubleArray([11.1, 12.2, 13.3]); 4571 console.log("RpcClient: writeDoubleArray is " + result); 4572 let array = data.readDoubleArray(); 4573 console.log("RpcClient: readDoubleArray is " + array); 4574 ``` 4575 4576### writeBooleanArray 4577 4578writeBooleanArray(booleanArray: boolean[]): boolean 4579 4580将布尔数组写入MessageParcel实例。 4581 4582**系统能力**:SystemCapability.Communication.IPC.Core 4583 4584**参数:** 4585 4586 | 参数名 | 类型 | 必填 | 说明 | 4587 | ------------ | --------- | ---- | ------------------ | 4588 | booleanArray | boolean[] | 是 | 要写入的布尔数组。 | 4589 4590**返回值:** 4591 4592 | 类型 | 说明 | 4593 | ------- | -------------------------------- | 4594 | boolean | true:写入成功,false:写入失败。| 4595 4596**示例:** 4597 4598 ```ts 4599 let data = rpc.MessageParcel.create(); 4600 let result = data.writeBooleanArray([false, true, false]); 4601 console.log("RpcClient: writeBooleanArray is " + result); 4602 ``` 4603 4604### readBooleanArray 4605 4606readBooleanArray(dataIn: boolean[]): void 4607 4608从MessageParcel实例中读取布尔数组。 4609 4610**系统能力**:SystemCapability.Communication.IPC.Core 4611 4612**参数:** 4613 4614 | 参数名 | 类型 | 必填 | 说明 | 4615 | ------ | --------- | ---- | ------------------ | 4616 | dataIn | boolean[] | 是 | 要读取的布尔数组。 | 4617 4618**示例:** 4619 4620 ```ts 4621 let data = rpc.MessageParcel.create(); 4622 let result = data.writeBooleanArray([false, true, false]); 4623 console.log("RpcClient: writeBooleanArray is " + result); 4624 let array = new Array(3); 4625 data.readBooleanArray(array); 4626 ``` 4627 4628### readBooleanArray 4629 4630readBooleanArray(): boolean[] 4631 4632从MessageParcel实例中读取布尔数组。 4633 4634**系统能力**:SystemCapability.Communication.IPC.Core 4635 4636**返回值:** 4637 4638 | 类型 | 说明 | 4639 | --------- | -------------- | 4640 | boolean[] | 返回布尔数组。 | 4641 4642**示例:** 4643 4644 ```ts 4645 let data = rpc.MessageParcel.create(); 4646 let result = data.writeBooleanArray([false, true, false]); 4647 console.log("RpcClient: writeBooleanArray is " + result); 4648 let array = data.readBooleanArray(); 4649 console.log("RpcClient: readBooleanArray is " + array); 4650 ``` 4651 4652### writeCharArray 4653 4654writeCharArray(charArray: number[]): boolean 4655 4656将单个字符数组写入MessageParcel实例。 4657 4658**系统能力**:SystemCapability.Communication.IPC.Core 4659 4660**参数:** 4661 4662 | 参数名 | 类型 | 必填 | 说明 | 4663 | --------- | -------- | ---- | ---------------------- | 4664 | charArray | number[] | 是 | 要写入的单个字符数组。 | 4665 4666**返回值:** 4667 4668 | 类型 | 说明 | 4669 | ------- | -------------------------------- | 4670 | boolean | true:写入成功,false:写入失败。| 4671 4672**示例:** 4673 4674 ```ts 4675 let data = rpc.MessageParcel.create(); 4676 let result = data.writeCharArray([97, 98, 88]); 4677 console.log("RpcClient: writeCharArray is " + result); 4678 ``` 4679 4680### readCharArray 4681 4682readCharArray(dataIn: number[]): void 4683 4684从MessageParcel实例中读取单个字符数组。 4685 4686**系统能力**:SystemCapability.Communication.IPC.Core 4687 4688**参数:** 4689 4690 | 参数名 | 类型 | 必填 | 说明 | 4691 | ------ | -------- | ---- | ---------------------- | 4692 | dataIn | number[] | 是 | 要读取的单个字符数组。 | 4693 4694**示例:** 4695 4696 ```ts 4697 let data = rpc.MessageParcel.create(); 4698 let result = data.writeCharArray([97, 98, 99]); 4699 console.log("RpcClient: writeCharArray is " + result); 4700 let array = new Array(3); 4701 data.readCharArray(array); 4702 ``` 4703 4704### readCharArray 4705 4706readCharArray(): number[] 4707 4708从MessageParcel实例读取单个字符数组。 4709 4710**系统能力**:SystemCapability.Communication.IPC.Core 4711 4712**返回值:** 4713 4714 | 类型 | 说明 | 4715 | -------- | ------------------ | 4716 | number[] | 返回单个字符数组。 | 4717 4718**示例:** 4719 4720 ```ts 4721 let data = rpc.MessageParcel.create(); 4722 let result = data.writeCharArray([97, 98, 99]); 4723 console.log("RpcClient: writeCharArray is " + result); 4724 let array = data.readCharArray(); 4725 console.log("RpcClient: readCharArray is " + array); 4726 ``` 4727 4728### writeStringArray 4729 4730writeStringArray(stringArray: string[]): boolean 4731 4732将字符串数组写入MessageParcel实例。 4733 4734**系统能力**:SystemCapability.Communication.IPC.Core 4735 4736**参数:** 4737 4738 | 参数名 | 类型 | 必填 | 说明 | 4739 | ----------- | -------- | ---- | ---------------- | 4740 | stringArray | string[] | 是 | 要写入的字符串数组,数组单个元素的长度应小于40960字节。 | 4741 4742**返回值:** 4743 4744 | 类型 | 说明 | 4745 | ------- | -------------------------------- | 4746 | boolean | true:写入成功,false:写入失败。| 4747 4748**示例:** 4749 4750 ```ts 4751 let data = rpc.MessageParcel.create(); 4752 let result = data.writeStringArray(["abc", "def"]); 4753 console.log("RpcClient: writeStringArray is " + result); 4754 ``` 4755 4756### readStringArray 4757 4758readStringArray(dataIn: string[]): void 4759 4760从MessageParcel实例读取字符串数组。 4761 4762**系统能力**:SystemCapability.Communication.IPC.Core 4763 4764**参数:** 4765 4766 | 参数名 | 类型 | 必填 | 说明 | 4767 | ------ | -------- | ---- | -------------------- | 4768 | dataIn | string[] | 是 | 要读取的字符串数组。 | 4769 4770**示例:** 4771 4772 ```ts 4773 let data = rpc.MessageParcel.create(); 4774 let result = data.writeStringArray(["abc", "def"]); 4775 console.log("RpcClient: writeStringArray is " + result); 4776 let array = new Array(2); 4777 data.readStringArray(array); 4778 ``` 4779 4780### readStringArray 4781 4782readStringArray(): string[] 4783 4784从MessageParcel实例读取字符串数组。 4785 4786**系统能力**:SystemCapability.Communication.IPC.Core 4787 4788**返回值:** 4789 4790 | 类型 | 说明 | 4791 | -------- | ---------------- | 4792 | string[] | 返回字符串数组。 | 4793 4794**示例:** 4795 4796 ```ts 4797 let data = rpc.MessageParcel.create(); 4798 let result = data.writeStringArray(["abc", "def"]); 4799 console.log("RpcClient: writeStringArray is " + result); 4800 let array = data.readStringArray(); 4801 console.log("RpcClient: readStringArray is " + array); 4802 ``` 4803 4804### writeNoException<sup>8+</sup> 4805 4806writeNoException(): void 4807 4808向MessageParcel写入“指示未发生异常”的信息。 4809 4810**系统能力**:SystemCapability.Communication.IPC.Core 4811 4812**示例:** 4813 4814 ```ts 4815 class MyDeathRecipient { 4816 onRemoteDied() { 4817 console.log("server died"); 4818 } 4819 } 4820 class TestRemoteObject extends rpc.RemoteObject { 4821 constructor(descriptor) { 4822 super(descriptor); 4823 } 4824 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 4825 return true; 4826 } 4827 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 4828 return true; 4829 } 4830 isObjectDead(): boolean { 4831 return false; 4832 } 4833 onRemoteRequest(code, data, reply, option) { 4834 if (code === 1) { 4835 console.log("RpcServer: onRemoteRequest called"); 4836 reply.writeNoException(); 4837 return true; 4838 } else { 4839 console.log("RpcServer: unknown code: " + code); 4840 return false; 4841 } 4842 } 4843 } 4844 ``` 4845 4846### readException<sup>8+</sup> 4847 4848readException(): void 4849 4850从MessageParcel中读取异常。 4851 4852**系统能力**:SystemCapability.Communication.IPC.Core 4853 4854**示例:** 4855 4856 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 4857 4858 ```ts 4859 // 仅FA模型需要导入@ohos.ability.featureAbility 4860 // import FA from "@ohos.ability.featureAbility"; 4861 4862 let proxy; 4863 let connect = { 4864 onConnect: function(elementName, remoteProxy) { 4865 console.log("RpcClient: js onConnect called."); 4866 proxy = remoteProxy; 4867 }, 4868 onDisconnect: function(elementName) { 4869 console.log("RpcClient: onDisconnect"); 4870 }, 4871 onFailed: function() { 4872 console.log("RpcClient: onFailed"); 4873 } 4874 }; 4875 let want = { 4876 "bundleName": "com.ohos.server", 4877 "abilityName": "com.ohos.server.EntryAbility", 4878 }; 4879 4880 // FA模型使用此方法连接服务 4881 // FA.connectAbility(want,connect); 4882 4883 globalThis.context.connectServiceExtensionAbility(want, connect); 4884 ``` 4885 4886 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息 4887 4888 ```ts 4889 let option = new rpc.MessageOption(); 4890 let data = rpc.MessageParcel.create(); 4891 let reply = rpc.MessageParcel.create(); 4892 data.writeInt(1); 4893 data.writeString("hello"); 4894 proxy.sendMessageRequest(1, data, reply, option) 4895 .then(function(errCode) { 4896 if (errCode === 0) { 4897 console.log("sendMessageRequest got result"); 4898 reply.readException(); 4899 let msg = reply.readString(); 4900 console.log("RPCTest: reply msg: " + msg); 4901 } else { 4902 console.log("RPCTest: sendMessageRequest failed, errCode: " + errCode); 4903 } 4904 }).catch(function(e) { 4905 console.log("RPCTest: sendMessageRequest got exception: " + e.message); 4906 }).finally (() => { 4907 console.log("RPCTest: sendMessageRequest ends, reclaim parcel"); 4908 data.reclaim(); 4909 reply.reclaim(); 4910 }); 4911 ``` 4912 4913### writeSequenceableArray 4914 4915writeSequenceableArray(sequenceableArray: Sequenceable[]): boolean 4916 4917将可序列化对象数组写入MessageParcel实例。 4918 4919**系统能力**:SystemCapability.Communication.IPC.Core 4920 4921**参数:** 4922 4923 | 参数名 | 类型 | 必填 | 说明 | 4924 | ----------------- | -------------- | ---- | -------------------------- | 4925 | sequenceableArray | Sequenceable[] | 是 | 要写入的可序列化对象数组。 | 4926 4927**返回值:** 4928 4929 | 类型 | 说明 | 4930 | ------- | -------------------------------- | 4931 | boolean | true:写入成功,false:写入失败。| 4932 4933**示例:** 4934 4935 ```ts 4936 class MySequenceable { 4937 num: number; 4938 str: string; 4939 constructor(num, str) { 4940 this.num = num; 4941 this.str = str; 4942 } 4943 marshalling(messageParcel) { 4944 messageParcel.writeInt(this.num); 4945 messageParcel.writeString(this.str); 4946 return true; 4947 } 4948 unmarshalling(messageParcel) { 4949 this.num = messageParcel.readInt(); 4950 this.str = messageParcel.readString(); 4951 return true; 4952 } 4953 } 4954 let sequenceable = new MySequenceable(1, "aaa"); 4955 let sequenceable2 = new MySequenceable(2, "bbb"); 4956 let sequenceable3 = new MySequenceable(3, "ccc"); 4957 let a = [sequenceable, sequenceable2, sequenceable3]; 4958 let data = rpc.MessageParcel.create(); 4959 let result = data.writeSequenceableArray(a); 4960 console.log("RpcClient: writeSequenceableArray is " + result); 4961 ``` 4962 4963### readSequenceableArray<sup>8+</sup> 4964 4965readSequenceableArray(sequenceableArray: Sequenceable[]): void 4966 4967从MessageParcel实例读取可序列化对象数组。 4968 4969**系统能力**:SystemCapability.Communication.IPC.Core 4970 4971**参数:** 4972 4973 | 参数名 | 类型 | 必填 | 说明 | 4974 | ----------------- | -------------- | ---- | -------------------------- | 4975 | sequenceableArray | Sequenceable[] | 是 | 要读取的可序列化对象数组。 | 4976 4977**示例:** 4978 4979 ```ts 4980 class MySequenceable { 4981 num: number; 4982 str: string; 4983 constructor(num, str) { 4984 this.num = num; 4985 this.str = str; 4986 } 4987 marshalling(messageParcel) { 4988 messageParcel.writeInt(this.num); 4989 messageParcel.writeString(this.str); 4990 return true; 4991 } 4992 unmarshalling(messageParcel) { 4993 this.num = messageParcel.readInt(); 4994 this.str = messageParcel.readString(); 4995 return true; 4996 } 4997 } 4998 let sequenceable = new MySequenceable(1, "aaa"); 4999 let sequenceable2 = new MySequenceable(2, "bbb"); 5000 let sequenceable3 = new MySequenceable(3, "ccc"); 5001 let a = [sequenceable, sequenceable2, sequenceable3]; 5002 let data = rpc.MessageParcel.create(); 5003 let result = data.writeSequenceableArray(a); 5004 console.log("RpcClient: writeSequenceableArray is " + result); 5005 let b = [new MySequenceable(0, ""), new MySequenceable(0, ""), new MySequenceable(0, "")]; 5006 data.readSequenceableArray(b); 5007 ``` 5008 5009### writeRemoteObjectArray<sup>8+</sup> 5010 5011writeRemoteObjectArray(objectArray: IRemoteObject[]): boolean 5012 5013将IRemoteObject对象数组写入MessageParcel。 5014 5015**系统能力**:SystemCapability.Communication.IPC.Core 5016 5017**参数:** 5018 5019 | 参数名 | 类型 | 必填 | 说明 | 5020 | ----------- | --------------- | ---- | ----- | 5021 | objectArray | IRemoteObject[] | 是 | 要写入MessageParcel的IRemoteObject对象数组。 | 5022 5023**返回值:** 5024 5025 | 类型 | 说明 | 5026 | ------- | -------------------------------- | 5027 | boolean | true:写入成功,false:写入失败。| 5028 5029**示例:** 5030 5031 ```ts 5032 class MyDeathRecipient { 5033 onRemoteDied() { 5034 console.log("server died"); 5035 } 5036 } 5037 class TestRemoteObject extends rpc.RemoteObject { 5038 constructor(descriptor) { 5039 super(descriptor); 5040 this.attachLocalInterface(this, descriptor); 5041 } 5042 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 5043 return true; 5044 } 5045 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 5046 return true; 5047 } 5048 isObjectDead(): boolean { 5049 return false; 5050 } 5051 asObject(): rpc.IRemoteObject { 5052 return this; 5053 } 5054 } 5055 let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")]; 5056 let data = rpc.MessageParcel.create(); 5057 let result = data.writeRemoteObjectArray(a); 5058 console.log("RpcClient: writeRemoteObjectArray is " + result); 5059 ``` 5060 5061### readRemoteObjectArray<sup>8+</sup> 5062 5063readRemoteObjectArray(objects: IRemoteObject[]): void 5064 5065从MessageParcel读取IRemoteObject对象数组。 5066 5067**系统能力**:SystemCapability.Communication.IPC.Core 5068 5069**参数:** 5070 5071 | 参数名 | 类型 | 必填 | 说明 | 5072 | ------- | --------------- | ---- | --------- | 5073 | objects | IRemoteObject[] | 是 | 从MessageParcel读取的IRemoteObject对象数组。 | 5074 5075**示例:** 5076 5077 ```ts 5078 class MyDeathRecipient { 5079 onRemoteDied() { 5080 console.log("server died"); 5081 } 5082 } 5083 class TestRemoteObject extends rpc.RemoteObject { 5084 constructor(descriptor) { 5085 super(descriptor); 5086 this.attachLocalInterface(this, descriptor); 5087 } 5088 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 5089 return true; 5090 } 5091 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 5092 return true; 5093 } 5094 isObjectDead(): boolean { 5095 return false; 5096 } 5097 asObject(): rpc.IRemoteObject { 5098 return this; 5099 } 5100 } 5101 let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")]; 5102 let data = rpc.MessageParcel.create(); 5103 let result = data.writeRemoteObjectArray(a); 5104 let b = new Array(3); 5105 data.readRemoteObjectArray(b); 5106 ``` 5107 5108### readRemoteObjectArray<sup>8+</sup> 5109 5110readRemoteObjectArray(): IRemoteObject[] 5111 5112从MessageParcel读取IRemoteObject对象数组。 5113 5114**系统能力**:SystemCapability.Communication.IPC.Core 5115 5116**返回值:** 5117 5118 | 类型 | 说明 | 5119 | --------------- | --------------------------- | 5120 | IRemoteObject[] | 返回IRemoteObject对象数组。 | 5121 5122**示例:** 5123 5124 ```ts 5125 class MyDeathRecipient { 5126 onRemoteDied() { 5127 console.log("server died"); 5128 } 5129 } 5130 class TestRemoteObject extends rpc.RemoteObject { 5131 constructor(descriptor) { 5132 super(descriptor); 5133 this.attachLocalInterface(this, descriptor); 5134 } 5135 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 5136 return true; 5137 } 5138 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 5139 return true; 5140 } 5141 isObjectDead(): boolean { 5142 return false; 5143 } 5144 asObject(): rpc.IRemoteObject { 5145 return this; 5146 } 5147 } 5148 let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")]; 5149 let data = rpc.MessageParcel.create(); 5150 let result = data.writeRemoteObjectArray(a); 5151 console.log("RpcClient: readRemoteObjectArray is " + result); 5152 let b = data.readRemoteObjectArray(); 5153 console.log("RpcClient: readRemoteObjectArray is " + b); 5154 ``` 5155 5156### closeFileDescriptor<sup>8+</sup> 5157 5158static closeFileDescriptor(fd: number): void 5159 5160静态方法,关闭给定的文件描述符。 5161 5162**系统能力**:SystemCapability.Communication.IPC.Core 5163 5164**参数:** 5165 5166 | 参数名 | 类型 | 必填 | 说明 | 5167 | ------ | ------ | ---- | -------------------- | 5168 | fd | number | 是 | 要关闭的文件描述符。 | 5169 5170**示例:** 5171 5172 ```ts 5173 import fs from '@ohos.file.fs'; 5174 let filePath = "path/to/file"; 5175 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 5176 rpc.MessageParcel.closeFileDescriptor(file.fd); 5177 ``` 5178 5179### dupFileDescriptor<sup>8+</sup> 5180 5181static dupFileDescriptor(fd: number) :number 5182 5183静态方法,复制给定的文件描述符。 5184 5185**系统能力**:SystemCapability.Communication.IPC.Core 5186 5187**参数:** 5188 5189 | 参数名 | 类型 | 必填 | 说明 | 5190 | ------ | ------ | ---- | ------------------------ | 5191 | fd | number | 是 | 表示已存在的文件描述符。 | 5192 5193**返回值:** 5194 5195 | 类型 | 说明 | 5196 | ------ | -------------------- | 5197 | number | 返回新的文件描述符。 | 5198 5199**示例:** 5200 5201 ```ts 5202 import fs from '@ohos.file.fs'; 5203 let filePath = "path/to/file"; 5204 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 5205 let newFd = rpc.MessageParcel.dupFileDescriptor(file.fd); 5206 ``` 5207 5208### containFileDescriptors<sup>8+</sup> 5209 5210containFileDescriptors(): boolean 5211 5212检查此MessageParcel对象是否包含文件描述符。 5213 5214**系统能力**:SystemCapability.Communication.IPC.Core 5215 5216**返回值:** 5217 5218 | 类型 | 说明 | 5219 | ------- | --------------------------------------------- | 5220 | boolean |true:包含文件描述符,false:未包含文件描述符。| 5221 5222**示例:** 5223 5224 ```ts 5225 import fs from '@ohos.file.fs'; 5226 let parcel = new rpc.MessageParcel(); 5227 let filePath = "path/to/file"; 5228 let r1 = parcel.containFileDescriptors(); 5229 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 5230 let writeResult = parcel.writeFileDescriptor(file.fd); 5231 console.log("RpcTest: parcel writeFd result is : " + writeResult); 5232 let containFD = parcel.containFileDescriptors(); 5233 console.log("RpcTest: parcel after write fd containFd result is : " + containFD); 5234 ``` 5235 5236### writeFileDescriptor<sup>8+</sup> 5237 5238writeFileDescriptor(fd: number): boolean 5239 5240写入文件描述符到MessageParcel。 5241 5242**系统能力**:SystemCapability.Communication.IPC.Core 5243 5244**参数:** 5245 5246 | 参数名 | 类型 | 必填 | 说明 | 5247 | ------ | ------ | ---- | ------------ | 5248 | fd | number | 是 | 文件描述符。 | 5249 5250**返回值:** 5251 5252 | 类型 | 说明 | 5253 | ------- | -------------------------------- | 5254 | boolean | true:操作成功,false:操作失败。| 5255 5256**示例:** 5257 5258 ```ts 5259 import fs from '@ohos.file.fs'; 5260 let parcel = new rpc.MessageParcel(); 5261 let filePath = "path/to/file"; 5262 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 5263 let writeResult = parcel.writeFileDescriptor(file.fd); 5264 console.log("RpcTest: parcel writeFd result is : " + writeResult); 5265 ``` 5266 5267### readFileDescriptor<sup>8+</sup> 5268 5269readFileDescriptor(): number 5270 5271从MessageParcel中读取文件描述符。 5272 5273**系统能力**:SystemCapability.Communication.IPC.Core 5274 5275**返回值:** 5276 5277 | 类型 | 说明 | 5278 | ------ | ---------------- | 5279 | number | 返回文件描述符。 | 5280 5281**示例:** 5282 5283 ```ts 5284 import fs from '@ohos.file.fs'; 5285 let parcel = new rpc.MessageParcel(); 5286 let filePath = "path/to/file"; 5287 let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 5288 let writeResult = parcel.writeFileDescriptor(file.fd); 5289 let readFD = parcel.readFileDescriptor(); 5290 console.log("RpcTest: parcel read fd is : " + readFD); 5291 ``` 5292 5293### writeAshmem<sup>8+</sup> 5294 5295writeAshmem(ashmem: Ashmem): boolean 5296 5297将指定的匿名共享对象写入此MessageParcel。 5298 5299**系统能力**:SystemCapability.Communication.IPC.Core 5300 5301**参数:** 5302 5303 | 参数名 | 类型 | 必填 | 说明 | 5304 | ------ | ------ | ---- | ----------------------------------- | 5305 | ashmem | Ashmem | 是 | 要写入MessageParcel的匿名共享对象。 | 5306 5307**返回值:** 5308 5309 | 类型 | 说明 | 5310 | ------- | -------------------------------- | 5311 | boolean | true:写入成功,false:写入失败。| 5312 5313**示例:** 5314 5315 ```ts 5316 let parcel = new rpc.MessageParcel(); 5317 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024); 5318 let isWriteSuccess = parcel.writeAshmem(ashmem); 5319 console.log("RpcTest: write ashmem to result is : " + isWriteSuccess); 5320 ``` 5321 5322### readAshmem<sup>8+</sup> 5323 5324readAshmem(): Ashmem 5325 5326从MessageParcel读取匿名共享对象。 5327 5328**系统能力**:SystemCapability.Communication.IPC.Core 5329 5330**返回值:** 5331 5332 | 类型 | 说明 | 5333 | ------ | ------------------ | 5334 | Ashmem | 返回匿名共享对象。 | 5335 5336**示例:** 5337 5338 ```ts 5339 let parcel = new rpc.MessageParcel(); 5340 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024); 5341 let isWriteSuccess = parcel.writeAshmem(ashmem); 5342 console.log("RpcTest: write ashmem to result is : " + isWriteSuccess); 5343 let readAshmem = parcel.readAshmem(); 5344 console.log("RpcTest: read ashmem to result is : " + readAshmem); 5345 ``` 5346 5347### getRawDataCapacity<sup>8+</sup> 5348 5349getRawDataCapacity(): number 5350 5351获取MessageParcel可以容纳的最大原始数据量。 5352 5353**系统能力**:SystemCapability.Communication.IPC.Core 5354 5355**返回值:** 5356 5357 | 类型 | 说明 | 5358 | ------ | ---------------------------------------------------------- | 5359 | number | 返回MessageParcel可以容纳的最大原始数据量,即128 Mb。 | 5360 5361**示例:** 5362 5363 ```ts 5364 let parcel = new rpc.MessageParcel(); 5365 let result = parcel.getRawDataCapacity(); 5366 console.log("RpcTest: parcel get RawDataCapacity result is : " + result); 5367 ``` 5368 5369### writeRawData<sup>8+</sup> 5370 5371writeRawData(rawData: number[], size: number): boolean 5372 5373将原始数据写入MessageParcel对象。 5374 5375**系统能力**:SystemCapability.Communication.IPC.Core 5376 5377**参数:** 5378 5379 | 参数名 | 类型 | 必填 | 说明 | 5380 | ------- | -------- | ---- | ---------------------------------- | 5381 | rawData | number[] | 是 | 要写入的原始数据。 | 5382 | size | number | 是 | 发送的原始数据大小,以字节为单位。 | 5383 5384**返回值:** 5385 5386 | 类型 | 说明 | 5387 | ------- | -------------------------------- | 5388 | boolean | true:写入成功,false:写入失败。| 5389 5390**示例:** 5391 5392 ```ts 5393 let parcel = new rpc.MessageParcel(); 5394 let arr = [1, 2, 3, 4, 5]; 5395 let isWriteSuccess = parcel.writeRawData(arr, arr.length); 5396 console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess); 5397 ``` 5398 5399### readRawData<sup>8+</sup> 5400 5401readRawData(size: number): number[] 5402 5403从MessageParcel读取原始数据。 5404 5405**系统能力**:SystemCapability.Communication.IPC.Core 5406 5407**参数:** 5408 5409 | 参数名 | 类型 | 必填 | 说明 | 5410 | ------ | ------ | ---- | ------------------------ | 5411 | size | number | 是 | 要读取的原始数据的大小。 | 5412 5413**返回值:** 5414 5415 | 类型 | 说明 | 5416 | -------- | ------------------------------ | 5417 | number[] | 返回原始数据(以字节为单位)。 | 5418 5419**示例:** 5420 5421 ```ts 5422 let parcel = new rpc.MessageParcel(); 5423 let arr = [1, 2, 3, 4, 5]; 5424 let isWriteSuccess = parcel.writeRawData(arr, arr.length); 5425 console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess); 5426 let result = parcel.readRawData(5); 5427 console.log("RpcTest: parcel read raw data result is : " + result); 5428 ``` 5429 5430## Parcelable<sup>9+</sup> 5431 5432在进程间通信(IPC)期间,将类的对象写入MessageSequence并从MessageSequence中恢复它们。 5433 5434### marshalling 5435 5436marshalling(dataOut: MessageSequence): boolean 5437 5438将此可序列对象封送到MessageSequence中。 5439 5440**系统能力**:SystemCapability.Communication.IPC.Core 5441 5442**参数:** 5443 5444 | 参数名 | 类型 | 必填 | 说明 | 5445 | ------- | --------------- | ---- | ------------------------------------------- | 5446 | dataOut | MessageSequence | 是 | 可序列对象将被封送到的MessageSequence对象。 | 5447 5448**返回值:** 5449 5450 | 类型 | 说明 | 5451 | ------- | -------------------------------- | 5452 | boolean | true:封送成功,false:封送失败。| 5453 5454**示例:** 5455 5456 ```ts 5457 class MyParcelable { 5458 num: number; 5459 str: string; 5460 constructor(num, str) { 5461 this.num = num; 5462 this.str = str; 5463 } 5464 marshalling(messageSequence) { 5465 messageSequence.writeInt(this.num); 5466 messageSequence.writeString(this.str); 5467 return true; 5468 } 5469 unmarshalling(messageSequence) { 5470 this.num = messageSequence.readInt(); 5471 this.str = messageSequence.readString(); 5472 return true; 5473 } 5474 } 5475 let parcelable = new MyParcelable(1, "aaa"); 5476 let data = rpc.MessageSequence.create(); 5477 let result = data.writeParcelable(parcelable); 5478 console.log("RpcClient: writeParcelable is " + result); 5479 let ret = new MyParcelable(0, ""); 5480 let result2 = data.readParcelable(ret); 5481 console.log("RpcClient: readParcelable is " + result2); 5482 ``` 5483 5484### unmarshalling 5485 5486unmarshalling(dataIn: MessageSequence): boolean 5487 5488从MessageSequence中解封此可序列对象。 5489 5490**系统能力**:SystemCapability.Communication.IPC.Core 5491 5492**参数:** 5493 5494 | 参数名 | 类型 | 必填 | 说明 | 5495 | ------ | --------------- | ---- | ----------------------------------------------- | 5496 | dataIn | MessageSequence | 是 | 已将可序列对象封送到其中的MessageSequence对象。 | 5497 5498**返回值:** 5499 5500 | 类型 | 说明 | 5501 | ------- | ---------------------------------------- | 5502 | boolean | true:反序列化成功,false:反序列化失败。| 5503 5504**示例:** 5505 5506 ```ts 5507 class MyParcelable { 5508 num: number; 5509 str: string; 5510 constructor(num, str) { 5511 this.num = num; 5512 this.str = str; 5513 } 5514 marshalling(messageSequence) { 5515 messageSequence.writeInt(this.num); 5516 messageSequence.writeString(this.str); 5517 return true; 5518 } 5519 unmarshalling(messageSequence) { 5520 this.num = messageSequence.readInt(); 5521 this.str = messageSequence.readString(); 5522 return true; 5523 } 5524 } 5525 let parcelable = new MyParcelable(1, "aaa"); 5526 let data = rpc.MessageSequence.create(); 5527 let result = data.writeParcelable(parcelable); 5528 console.log("RpcClient: writeParcelable is " + result); 5529 let ret = new MyParcelable(0, ""); 5530 let result2 = data.readParcelable(ret); 5531 console.log("RpcClient: readParcelable is " + result2); 5532 ``` 5533 5534## Sequenceable<sup>(deprecated)</sup> 5535 5536>从API version 9 开始不再维护,建议使用[Parcelable](#parcelable9)类替代。 5537 5538在进程间通信(IPC)期间,将类的对象写入MessageParcel并从MessageParcel中恢复它们。 5539 5540### marshalling 5541 5542marshalling(dataOut: MessageParcel): boolean 5543 5544将此可序列对象封送到MessageParcel中。 5545 5546**系统能力**:SystemCapability.Communication.IPC.Core 5547 5548**参数:** 5549 5550 | 参数名 | 类型 | 必填 | 说明 | 5551 | ------- | ----------------------------------------- | ---- | ----------------------------------------- | 5552 | dataOut | [MessageParcel](#messageparceldeprecated) | 是 | 可序列对象将被封送到的MessageParcel对象。 | 5553 5554**返回值:** 5555 5556 | 类型 | 说明 | 5557 | ------- | -------------------------------- | 5558 | boolean | true:封送成功,false:封送失败。 | 5559 5560**示例:** 5561 5562 ```ts 5563 class MySequenceable { 5564 num: number; 5565 str: string; 5566 constructor(num, str) { 5567 this.num = num; 5568 this.str = str; 5569 } 5570 marshalling(messageParcel) { 5571 messageParcel.writeInt(this.num); 5572 messageParcel.writeString(this.str); 5573 return true; 5574 } 5575 unmarshalling(messageParcel) { 5576 this.num = messageParcel.readInt(); 5577 this.str = messageParcel.readString(); 5578 return true; 5579 } 5580 } 5581 let sequenceable = new MySequenceable(1, "aaa"); 5582 let data = rpc.MessageParcel.create(); 5583 let result = data.writeSequenceable(sequenceable); 5584 console.log("RpcClient: writeSequenceable is " + result); 5585 let ret = new MySequenceable(0, ""); 5586 let result2 = data.readSequenceable(ret); 5587 console.log("RpcClient: readSequenceable is " + result2); 5588 ``` 5589 5590### unmarshalling 5591 5592unmarshalling(dataIn: MessageParcel): boolean 5593 5594从MessageParcel中解封此可序列对象。 5595 5596**系统能力**:SystemCapability.Communication.IPC.Core 5597 5598**参数:** 5599 5600 | 参数名 | 类型 | 必填 | 说明 | 5601 | ------ | ----------------------------------------- | ---- | --------------------------------------------- | 5602 | dataIn | [MessageParcel](#messageparceldeprecated) | 是 | 已将可序列对象封送到其中的MessageParcel对象。 | 5603 5604**返回值:** 5605 5606 | 类型 | 说明 | 5607 | ------- | ---------------------------------------- | 5608 | boolean | true:反序列化成功,false:反序列化失败。| 5609 5610**示例:** 5611 5612 ```ts 5613 class MySequenceable { 5614 num: number; 5615 str: string; 5616 constructor(num, str) { 5617 this.num = num; 5618 this.str = str; 5619 } 5620 marshalling(messageParcel) { 5621 messageParcel.writeInt(this.num); 5622 messageParcel.writeString(this.str); 5623 return true; 5624 } 5625 unmarshalling(messageParcel) { 5626 this.num = messageParcel.readInt(); 5627 this.str = messageParcel.readString(); 5628 return true; 5629 } 5630 } 5631 let sequenceable = new MySequenceable(1, "aaa"); 5632 let data = rpc.MessageParcel.create(); 5633 let result = data.writeSequenceable(sequenceable); 5634 console.log("RpcClient: writeSequenceable is " + result); 5635 let ret = new MySequenceable(0, ""); 5636 let result2 = data.readSequenceable(ret); 5637 console.log("RpcClient: readSequenceable is " + result2); 5638 ``` 5639 5640## IRemoteBroker 5641 5642远端对象的代理持有者。用于获取代理对象。 5643 5644### asObject 5645 5646asObject(): IRemoteObject 5647 5648需派生类实现,获取代理或远端对象。 5649 5650**系统能力**:SystemCapability.Communication.IPC.Core 5651 5652**返回值:** 5653 5654 | 类型 | 说明 | 5655 | ----- | ----- | 5656 | [IRemoteObject](#iremoteobject) | 如果调用者是RemoteObject对象,则直接返回本身;如果调用者是[RemoteProxy](#remoteproxy)对象,则返回它的持有者[IRemoteObject](#iremoteobject)。 | 5657 5658**示例:** 5659 5660 ```ts 5661 class TestAbility extends rpc.RemoteObject { 5662 asObject() { 5663 return this; 5664 } 5665 } 5666 let remoteObject = new TestAbility("testObject").asObject(); 5667 ``` 5668 5669**示例:** 5670 5671 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 5672 5673 ```ts 5674 // 仅FA模型需要导入@ohos.ability.featureAbility 5675 // import FA from "@ohos.ability.featureAbility"; 5676 5677 let proxy; 5678 let connect = { 5679 onConnect: function(elementName, remoteProxy) { 5680 console.log("RpcClient: js onConnect called."); 5681 proxy = remoteProxy; 5682 }, 5683 onDisconnect: function(elementName) { 5684 console.log("RpcClient: onDisconnect"); 5685 }, 5686 onFailed: function() { 5687 console.log("RpcClient: onFailed"); 5688 } 5689 }; 5690 let want = { 5691 "bundleName": "com.ohos.server", 5692 "abilityName": "com.ohos.server.EntryAbility", 5693 }; 5694 5695 // FA模型使用此方法连接服务 5696 // FA.connectAbility(want,connect); 5697 5698 globalThis.context.connectServiceExtensionAbility(want, connect); 5699 ``` 5700 5701 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的asObject接口方法获取代理或远端对象 5702 5703 ```ts 5704 class TestProxy { 5705 remote: rpc.RemoteObject; 5706 constructor(remote) { 5707 this.remote = remote; 5708 } 5709 asObject() { 5710 return this.remote; 5711 } 5712 } 5713 let iRemoteObject = new TestProxy(proxy).asObject(); 5714 ``` 5715 5716## DeathRecipient 5717 5718用于订阅远端对象的死亡通知。当被订阅该通知的远端对象死亡时,本端可收到消息,调用[onRemoteDied](#onremotedied)接口。远端对象死亡可以为远端对象所在进程死亡,远端对象所在设备关机或重启,当远端对象与本端对象属于不同设备时,也可为远端对象离开组网时。 5719 5720### onRemoteDied 5721 5722onRemoteDied(): void 5723 5724在成功添加死亡通知订阅后,当远端对象死亡时,将自动调用本方法。 5725 5726**系统能力**:SystemCapability.Communication.IPC.Core 5727 5728**示例:** 5729 5730 ```ts 5731 class MyDeathRecipient { 5732 onRemoteDied() { 5733 console.log("server died"); 5734 } 5735 } 5736 ``` 5737 5738## RequestResult<sup>9+</sup> 5739 5740发送请求的响应结果。 5741 5742**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。 5743 5744 | 名称 | 类型 | 可读 | 可写 | 说明 | 5745 | ------- | --------------- | ---- | ---- |-------------------------------------- | 5746 | errCode | number | 是 | 否 | 错误码。 | 5747 | code | number | 是 | 否 | 消息代码。 | 5748 | data | MessageSequence | 是 | 否 | 发送给对端进程的MessageSequence对象。 | 5749 | reply | MessageSequence | 是 | 否 | 对端进程返回的MessageSequence对象。 | 5750 5751## SendRequestResult<sup>8+(deprecated)</sup> 5752 5753>从API version 9 开始不再维护,建议使用[RequestResult](#requestresult9)类替代。 5754 5755发送请求的响应结果。 5756 5757**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。 5758 5759 | 名称 | 类型 | 可读 | 可写 | 说明 | 5760 | ------- | ------------- | ---- | ---- | ----------------------------------- | 5761 | errCode | number | 是 | 否 | 错误码。 | 5762 | code | number | 是 | 否 | 消息代码。 | 5763 | data | MessageParcel | 是 | 否 | 发送给对端进程的MessageParcel对象。 | 5764 | reply | MessageParcel | 是 | 否 | 对端进程返回的MessageParcel对象。 | 5765 5766## IRemoteObject 5767 5768该接口可用于查询或获取接口描述符、添加或删除死亡通知、转储对象状态到特定文件、发送消息。 5769 5770### getLocalInterface<sup>9+</sup> 5771 5772getLocalInterface(descriptor: string): IRemoteBroker 5773 5774查询接口描述符的字符串。 5775 5776**系统能力**:SystemCapability.Communication.IPC.Core 5777 5778**参数:** 5779 5780 | 参数名 | 类型 | 必填 | 说明 | 5781 | ---------- | ------ | ---- | -------------------- | 5782 | descriptor | string | 是 | 接口描述符的字符串。 | 5783 5784**返回值:** 5785 5786 | 类型 | 说明 | 5787 | ------------- | --------------------------------------------- | 5788 | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 | 5789 5790### queryLocalInterface<sup>(deprecated)</sup> 5791 5792>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。 5793 5794queryLocalInterface(descriptor: string): IRemoteBroker 5795 5796查询接口描述符的字符串。 5797 5798**系统能力**:SystemCapability.Communication.IPC.Core 5799 5800**参数:** 5801 5802 | 参数名 | 类型 | 必填 | 说明 | 5803 | ---------- | ------ | ---- | -------------------- | 5804 | descriptor | string | 是 | 接口描述符的字符串。 | 5805 5806**返回值:** 5807 5808 | 类型 | 说明 | 5809 | ------------- | --------------------------------------------- | 5810 | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 | 5811 5812### sendRequest<sup>(deprecated)</sup> 5813 5814>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。 5815 5816sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean 5817 5818以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。 5819 5820**系统能力**:SystemCapability.Communication.IPC.Core 5821 5822**参数:** 5823 5824 | 参数名 | 类型 | 必填 | 说明 | 5825 | ------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- | 5826 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 5827 | data | [MessageParcel](#messageparceldeprecated) | 是 | 保存待发送数据的 MessageParcel对象。 | 5828 | reply | [MessageParcel](#messageparceldeprecated) | 是 | 接收应答数据的MessageParcel对象。 | 5829 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 5830 5831**返回值:** 5832 5833 | 类型 | 说明 | 5834 | ------- | -------------------------------- | 5835 | boolean | true:发送成功,false:发送失败。| 5836 5837 5838### sendRequest<sup>8+(deprecated)</sup> 5839 5840>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。 5841 5842sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise<SendRequestResult> 5843 5844以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。 5845 5846**系统能力**:SystemCapability.Communication.IPC.Core 5847 5848**参数:** 5849 5850 | 参数名 | 类型 | 必填 | 说明 | 5851 | ------- | ---------------------------------------- | ---- | -------------------------------------------------------------------------------------- | 5852 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 5853 | data | [MessageParcel](#messageparceldeprecated) | 是 | 保存待发送数据的 MessageParcel对象。 | 5854 | reply | [MessageParcel](#messageparceldeprecated) | 是 | 接收应答数据的MessageParcel对象。 | 5855 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 5856 5857**返回值:** 5858 5859 | 类型 | 说明 | 5860 | -------------------------------- | --------------------------------------------- | 5861 | Promise<SendRequestResult> | 返回一个期约,兑现值是sendRequestResult实例。 | 5862 5863 5864### sendMessageRequest<sup>9+</sup> 5865 5866sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise<RequestResult> 5867 5868以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。 5869 5870**系统能力**:SystemCapability.Communication.IPC.Core 5871 5872**参数:** 5873 5874 | 参数名 | 类型 | 必填 | 说明 | 5875 | ------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- | 5876 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 5877 | data | [MessageSequence](#messagesequence9) | 是 | 保存待发送数据的 MessageSequence对象。 | 5878 | reply | [MessageSequence](#messagesequence9) | 是 | 接收应答数据的MessageSequence对象。 | 5879 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 5880 5881**返回值:** 5882 5883 | 类型 | 说明 | 5884 | ---------------------------- | ----------------------------------------- | 5885 | Promise<RequestResult> | 返回一个期约,兑现值是requestResult实例。 | 5886 5887 5888### sendMessageRequest<sup>9+</sup> 5889 5890sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback<RequestResult>): void 5891 5892以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。 5893 5894**系统能力**:SystemCapability.Communication.IPC.Core 5895 5896**参数:** 5897 5898 | 参数名 | 类型 | 必填 | 说明 | 5899 | -------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- | 5900 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 5901 | data | [MessageSequence](#messagesequence9) | 是 | 保存待发送数据的 MessageSequence对象。 | 5902 | reply | [MessageSequence](#messagesequence9) | 是 | 接收应答数据的MessageSequence对象。 | 5903 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 5904 | callback | AsyncCallback<RequestResult> | 是 | 接收发送结果的回调。 | 5905 5906### sendRequest<sup>8+(deprecated)</sup> 5907 5908>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。 5909 5910sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback<SendRequestResult>): void 5911 5912以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。 5913 5914**系统能力**:SystemCapability.Communication.IPC.Core 5915 5916**参数:** 5917 5918 | 参数名 | 类型 | 必填 | 说明 | 5919 | -------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- | 5920 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 5921 | data | [MessageParcel](#messageparceldeprecated) | 是 | 保存待发送数据的 MessageParcel对象。 | 5922 | reply | [MessageParcel](#messageparceldeprecated) | 是 | 接收应答数据的MessageParcel对象。 | 5923 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 5924 | callback | AsyncCallback<SendRequestResult> | 是 | 接收发送结果的回调。 | 5925 5926### registerDeathRecipient<sup>9+</sup> 5927 5928registerDeathRecipient(recipient: DeathRecipient, flags: number): void 5929 5930注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。 5931 5932**系统能力**:SystemCapability.Communication.IPC.Core 5933 5934**参数:** 5935 5936 | 参数名 | 类型 | 必填 | 说明 | 5937 | --------- | --------------------------------- | ---- | -------------- | 5938 | recipient | [DeathRecipient](#deathrecipient) | 是 | 要注册的回调。 | 5939 | flags | number | 是 | 死亡通知标志。 | 5940 5941**错误码:** 5942 5943以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 5944 5945 | 错误码ID | 错误信息 | 5946 | -------- | -------- | 5947 | 1900008 | proxy or remote object is invalid | 5948 5949### addDeathrecipient<sup>(deprecated)</sup> 5950 5951>从API version 9 开始不再维护,建议使用[registerDeathRecipient](#registerdeathrecipient9)类替代。 5952 5953addDeathRecipient(recipient: DeathRecipient, flags: number): boolean 5954 5955注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。 5956 5957**系统能力**:SystemCapability.Communication.IPC.Core 5958 5959**参数:** 5960 5961 | 参数名 | 类型 | 必填 | 说明 | 5962 | --------- | --------------------------------- | ---- | -------------- | 5963 | recipient | [DeathRecipient](#deathrecipient) | 是 | 要注册的回调。 | 5964 | flags | number | 是 | 死亡通知标志。 | 5965 5966**返回值:** 5967 5968 | 类型 | 说明 | 5969 | ------- | ---------------------------------------- | 5970 | boolean | true:回调注册成功,false:回调注册失败。| 5971 5972 5973### unregisterDeathRecipient<sup>9+</sup> 5974 5975unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void 5976 5977注销用于接收远程对象死亡通知的回调。 5978 5979**系统能力**:SystemCapability.Communication.IPC.Core 5980 5981**参数:** 5982 5983 | 参数名 | 类型 | 必填 | 说明 | 5984 | --------- | --------------------------------- | ---- | -------------- | 5985 | recipient | [DeathRecipient](#deathrecipient) | 是 | 要注销的回调。 | 5986 | flags | number | 是 | 死亡通知标志。 | 5987 5988**错误码:** 5989 5990以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 5991 5992 | 错误码ID | 错误信息 | 5993 | -------- | -------- | 5994 | 1900008 | proxy or remote object is invalid | 5995 5996### removeDeathRecipient<sup>(deprecated)</sup> 5997 5998>从API version 9 开始不再维护,建议使用[unregisterDeathRecipient](#unregisterdeathrecipient9)类替代。 5999 6000removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean 6001 6002注销用于接收远程对象死亡通知的回调。 6003 6004**系统能力**:SystemCapability.Communication.IPC.Core 6005 6006**参数:** 6007 6008 | 参数名 | 类型 | 必填 | 说明 | 6009 | --------- | --------------------------------- | ---- | -------------- | 6010 | recipient | [DeathRecipient](#deathrecipient) | 是 | 要注销的回调。 | 6011 | flags | number | 是 | 死亡通知标志。 | 6012 6013**返回值:** 6014 6015 | 类型 | 说明 | 6016 | ------- | -----------------------------------------| 6017 | boolean | true:回调注销成功,false:回调注销失败。| 6018 6019### getDescriptor<sup>9+</sup> 6020 6021getDescriptor(): string 6022 6023获取对象的接口描述符,接口描述符为字符串。 6024 6025**系统能力**:SystemCapability.Communication.IPC.Core 6026 6027**返回值:** 6028 6029 | 类型 | 说明 | 6030 | ------ | ---------------- | 6031 | string | 返回接口描述符。 | 6032 6033**错误码:** 6034 6035以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 6036 6037 | 错误码ID | 错误信息 | 6038 | -------- | -------- | 6039 | 1900008 | proxy or remote object is invalid | 6040 6041 6042### getInterfaceDescriptor<sup>(deprecated)</sup> 6043 6044>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。 6045 6046getInterfaceDescriptor(): string 6047 6048获取对象的接口描述符,接口描述符为字符串。 6049 6050**系统能力**:SystemCapability.Communication.IPC.Core 6051 6052**返回值:** 6053 6054 | 类型 | 说明 | 6055 | ------ | ---------------- | 6056 | string | 返回接口描述符。 | 6057 6058 6059### isObjectDead 6060 6061isObjectDead(): boolean 6062 6063检查当前对象是否死亡。 6064 6065**系统能力**:SystemCapability.Communication.IPC.Core 6066 6067**返回值:** 6068 6069 | 类型 | 说明 | 6070 | ------- | ---------------------------------- | 6071 | boolean | true:对象死亡,false:对象未死亡。| 6072 6073 6074## RemoteProxy 6075 6076实现IRemoteObject代理对象。 6077 6078**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。 6079 6080| 名称 | 值 | 说明 | 6081| --------------------- | ----------------------- | --------------------------------- | 6082| PING_TRANSACTION | 1599098439 (0x5f504e47) | 内部指令码,用于测试IPC服务正常。 | 6083| DUMP_TRANSACTION | 1598311760 (0x5f444d50) | 内部指令码,获取Binder内部状态。 | 6084| INTERFACE_TRANSACTION | 1598968902 (0x5f4e5446) | 内部指令码,获取对端接口描述符。 | 6085| MIN_TRANSACTION_ID | 1 (0x00000001) | 最小有效指令码。 | 6086| MAX_TRANSACTION_ID | 16777215 (0x00FFFFFF) | 最大有效指令码。 | 6087 6088### sendRequest<sup>(deprecated)</sup> 6089 6090>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。 6091 6092sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean 6093 6094以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。 6095 6096**系统能力**:SystemCapability.Communication.IPC.Core 6097 6098**参数:** 6099 6100 | 参数名 | 类型 | 必填 | 说明 | 6101 | ------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- | 6102 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 6103 | data | [MessageParcel](#messageparceldeprecated) | 是 | 保存待发送数据的 MessageParcel对象。 | 6104 | reply | [MessageParcel](#messageparceldeprecated) | 是 | 接收应答数据的MessageParcel对象。 | 6105 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 6106 6107**返回值:** 6108 6109 | 类型 | 说明 | 6110 | ------- | ---------------------------------| 6111 | boolean | true:发送成功,false:发送失败。| 6112 6113**示例:** 6114 6115 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6116 6117 ```ts 6118 // 仅FA模型需要导入@ohos.ability.featureAbility 6119 // import FA from "@ohos.ability.featureAbility"; 6120 6121 let proxy; 6122 let connect = { 6123 onConnect: function(elementName, remoteProxy) { 6124 console.log("RpcClient: js onConnect called."); 6125 proxy = remoteProxy; 6126 }, 6127 onDisconnect: function(elementName) { 6128 console.log("RpcClient: onDisconnect"); 6129 }, 6130 onFailed: function() { 6131 console.log("RpcClient: onFailed"); 6132 } 6133 }; 6134 let want = { 6135 "bundleName": "com.ohos.server", 6136 "abilityName": "com.ohos.server.EntryAbility", 6137 }; 6138 6139 // FA模型使用此方法连接服务 6140 // FA.connectAbility(want,connect); 6141 6142 globalThis.context.connectServiceExtensionAbility(want, connect); 6143 ``` 6144 6145 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendRequest接口方法发送消息 6146 6147 ```ts 6148 let option = new rpc.MessageOption(); 6149 let data = rpc.MessageParcel.create(); 6150 let reply = rpc.MessageParcel.create(); 6151 data.writeInt(1); 6152 data.writeString("hello"); 6153 let ret: boolean = proxy.sendRequest(1, data, reply, option); 6154 if (ret) { 6155 console.log("sendRequest got result"); 6156 let msg = reply.readString(); 6157 console.log("RPCTest: reply msg: " + msg); 6158 } else { 6159 console.log("RPCTest: sendRequest failed"); 6160 } 6161 console.log("RPCTest: sendRequest ends, reclaim parcel"); 6162 data.reclaim(); 6163 reply.reclaim(); 6164 ``` 6165 6166### sendMessageRequest<sup>9+</sup> 6167 6168sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise<RequestResult> 6169 6170以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。 6171 6172**系统能力**:SystemCapability.Communication.IPC.Core 6173 6174**参数:** 6175 6176 | 参数名 | 类型 | 必填 | 说明 | 6177 | ------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- | 6178 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 6179 | data | [MessageSequence](#messagesequence9) | 是 | 保存待发送数据的 MessageSequence对象。 | 6180 | reply | [MessageSequence](#messagesequence9) | 是 | 接收应答数据的MessageSequence对象。 | 6181 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 6182 6183**返回值:** 6184 6185 | 类型 | 说明 | 6186 | ---------------------------- | ----------------------------------------- | 6187 | Promise<RequestResult> | 返回一个期约,兑现值是requestResult实例。 | 6188 6189**示例:** 6190 6191 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6192 6193 ```ts 6194 // 仅FA模型需要导入@ohos.ability.featureAbility 6195 // import FA from "@ohos.ability.featureAbility"; 6196 6197 let proxy; 6198 let connect = { 6199 onConnect: function(elementName, remoteProxy) { 6200 console.log("RpcClient: js onConnect called."); 6201 proxy = remoteProxy; 6202 }, 6203 onDisconnect: function(elementName) { 6204 console.log("RpcClient: onDisconnect"); 6205 }, 6206 onFailed: function() { 6207 console.log("RpcClient: onFailed"); 6208 } 6209 }; 6210 let want = { 6211 "bundleName": "com.ohos.server", 6212 "abilityName": "com.ohos.server.EntryAbility", 6213 }; 6214 6215 // FA模型使用此方法连接服务 6216 // FA.connectAbility(want,connect); 6217 6218 globalThis.context.connectServiceExtensionAbility(want, connect); 6219 ``` 6220 6221 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息 6222 6223 ```ts 6224 let option = new rpc.MessageOption(); 6225 let data = rpc.MessageSequence.create(); 6226 let reply = rpc.MessageSequence.create(); 6227 data.writeInt(1); 6228 data.writeString("hello"); 6229 proxy.sendMessageRequest(1, data, reply, option) 6230 .then(function(result) { 6231 if (result.errCode === 0) { 6232 console.log("sendMessageRequest got result"); 6233 result.reply.readException(); 6234 let msg = result.reply.readString(); 6235 console.log("RPCTest: reply msg: " + msg); 6236 } else { 6237 console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode); 6238 } 6239 }).catch(function(e) { 6240 console.log("RPCTest: sendMessageRequest got exception: " + e.message); 6241 }).finally (() => { 6242 console.log("RPCTest: sendMessageRequest ends, reclaim parcel"); 6243 data.reclaim(); 6244 reply.reclaim(); 6245 }); 6246 ``` 6247 6248### sendRequest<sup>8+(deprecated)</sup> 6249 6250>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。 6251 6252sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise<SendRequestResult> 6253 6254以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。 6255 6256**系统能力**:SystemCapability.Communication.IPC.Core 6257 6258**参数:** 6259 6260 | 参数名 | 类型 | 必填 | 说明 | 6261 | ------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- | 6262 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 6263 | data | [MessageParcel](#messageparceldeprecated) | 是 | 保存待发送数据的 MessageParcel对象。 | 6264 | reply | [MessageParcel](#messageparceldeprecated) | 是 | 接收应答数据的MessageParcel对象。 | 6265 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 6266 6267**返回值:** 6268 6269 | 类型 | 说明 | 6270 | -------------------------------- | --------------------------------------------- | 6271 | Promise<SendRequestResult> | 返回一个期约,兑现值是sendRequestResult实例。 | 6272 6273**示例:** 6274 6275 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6276 6277 ```ts 6278 // 仅FA模型需要导入@ohos.ability.featureAbility 6279 // import FA from "@ohos.ability.featureAbility"; 6280 6281 let proxy; 6282 let connect = { 6283 onConnect: function(elementName, remoteProxy) { 6284 console.log("RpcClient: js onConnect called."); 6285 proxy = remoteProxy; 6286 }, 6287 onDisconnect: function(elementName) { 6288 console.log("RpcClient: onDisconnect"); 6289 }, 6290 onFailed: function() { 6291 console.log("RpcClient: onFailed"); 6292 } 6293 }; 6294 let want = { 6295 "bundleName": "com.ohos.server", 6296 "abilityName": "com.ohos.server.EntryAbility", 6297 }; 6298 6299 // FA模型使用此方法连接服务 6300 // FA.connectAbility(want,connect); 6301 6302 globalThis.context.connectServiceExtensionAbility(want, connect); 6303 ``` 6304 6305 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendRequest接口方法发送消息 6306 6307 ```ts 6308 let option = new rpc.MessageOption(); 6309 let data = rpc.MessageParcel.create(); 6310 let reply = rpc.MessageParcel.create(); 6311 data.writeInt(1); 6312 data.writeString("hello"); 6313 proxy.sendRequest(1, data, reply, option) 6314 .then(function(result) { 6315 if (result.errCode === 0) { 6316 console.log("sendRequest got result"); 6317 result.reply.readException(); 6318 let msg = result.reply.readString(); 6319 console.log("RPCTest: reply msg: " + msg); 6320 } else { 6321 console.log("RPCTest: sendRequest failed, errCode: " + result.errCode); 6322 } 6323 }).catch(function(e) { 6324 console.log("RPCTest: sendRequest got exception: " + e.message); 6325 }).finally (() => { 6326 console.log("RPCTest: sendRequest ends, reclaim parcel"); 6327 data.reclaim(); 6328 reply.reclaim(); 6329 }); 6330 ``` 6331 6332### sendMessageRequest<sup>9+</sup> 6333 6334sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback<RequestResult>): void 6335 6336以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendMessageRequest返回后的某个时机执行回调,回复内容在RequestResult的reply报文里。 6337 6338**系统能力**:SystemCapability.Communication.IPC.Core 6339 6340**参数:** 6341 6342 | 参数名 | 类型 | 必填 | 说明 | 6343 | -------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- | 6344 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 6345 | data | [MessageSequence](#messagesequence9) | 是 | 保存待发送数据的 MessageSequence对象。 | 6346 | reply | [MessageSequence](#messagesequence9) | 是 | 接收应答数据的MessageSequence对象。 | 6347 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 6348 | callback | AsyncCallback<RequestResult> | 是 | 接收发送结果的回调。 | 6349 6350**示例:** 6351 6352 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6353 6354 ```ts 6355 // 仅FA模型需要导入@ohos.ability.featureAbility 6356 // import FA from "@ohos.ability.featureAbility"; 6357 6358 let proxy; 6359 let connect = { 6360 onConnect: function(elementName, remoteProxy) { 6361 console.log("RpcClient: js onConnect called."); 6362 proxy = remoteProxy; 6363 }, 6364 onDisconnect: function(elementName) { 6365 console.log("RpcClient: onDisconnect"); 6366 }, 6367 onFailed: function() { 6368 console.log("RpcClient: onFailed"); 6369 } 6370 }; 6371 let want = { 6372 "bundleName": "com.ohos.server", 6373 "abilityName": "com.ohos.server.EntryAbility", 6374 }; 6375 function sendRequestCallback(result) { 6376 if (result.errCode === 0) { 6377 console.log("sendRequest got result"); 6378 result.reply.readException(); 6379 let msg = result.reply.readString(); 6380 console.log("RPCTest: reply msg: " + msg); 6381 } else { 6382 console.log("RPCTest: sendRequest failed, errCode: " + result.errCode); 6383 } 6384 console.log("RPCTest: sendRequest ends, reclaim parcel"); 6385 result.data.reclaim(); 6386 result.reply.reclaim(); 6387 } 6388 6389 // FA模型使用此方法连接服务 6390 // FA.connectAbility(want,connect); 6391 6392 globalThis.context.connectServiceExtensionAbility(want, connect); 6393 ``` 6394 6395 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendMessageRequest接口方法发送消息 6396 6397 ```ts 6398 let option = new rpc.MessageOption(); 6399 let data = rpc.MessageSequence.create(); 6400 let reply = rpc.MessageSequence.create(); 6401 data.writeInt(1); 6402 data.writeString("hello"); 6403 try { 6404 proxy.sendMessageRequest(1, data, reply, option, sendRequestCallback); 6405 } catch(error) { 6406 console.info("rpc send sequence request fail, errorCode " + error.code); 6407 console.info("rpc send sequence request fail, errorMessage " + error.message); 6408 } 6409 ``` 6410 6411### sendRequest<sup>8+(deprecated)</sup> 6412 6413>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。 6414 6415sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback<SendRequestResult>): void 6416 6417以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。 6418 6419**系统能力**:SystemCapability.Communication.IPC.Core 6420 6421**参数:** 6422 6423 | 参数名 | 类型 | 必填 | 说明 | 6424 | -------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- | 6425 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 6426 | data | [MessageParcel](#messageparceldeprecated) | 是 | 保存待发送数据的 MessageParcel对象。 | 6427 | reply | [MessageParcel](#messageparceldeprecated) | 是 | 接收应答数据的MessageParcel对象。 | 6428 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 6429 | callback | AsyncCallback<SendRequestResult> | 是 | 接收发送结果的回调。 | 6430 6431**示例:** 6432 6433 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6434 6435 ```ts 6436 // 仅FA模型需要导入@ohos.ability.featureAbility 6437 // import FA from "@ohos.ability.featureAbility"; 6438 6439 let proxy; 6440 let connect = { 6441 onConnect: function(elementName, remoteProxy) { 6442 console.log("RpcClient: js onConnect called."); 6443 proxy = remoteProxy; 6444 }, 6445 onDisconnect: function(elementName) { 6446 console.log("RpcClient: onDisconnect"); 6447 }, 6448 onFailed: function() { 6449 console.log("RpcClient: onFailed"); 6450 } 6451 }; 6452 let want = { 6453 "bundleName": "com.ohos.server", 6454 "abilityName": "com.ohos.server.EntryAbility", 6455 }; 6456 function sendRequestCallback(result) { 6457 if (result.errCode === 0) { 6458 console.log("sendRequest got result"); 6459 result.reply.readException(); 6460 let msg = result.reply.readString(); 6461 console.log("RPCTest: reply msg: " + msg); 6462 } else { 6463 console.log("RPCTest: sendRequest failed, errCode: " + result.errCode); 6464 } 6465 console.log("RPCTest: sendRequest ends, reclaim parcel"); 6466 result.data.reclaim(); 6467 result.reply.reclaim(); 6468 } 6469 6470 // FA模型使用此方法连接服务 6471 // FA.connectAbility(want,connect); 6472 6473 globalThis.context.connectServiceExtensionAbility(want, connect); 6474 ``` 6475 6476 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的sendRequest接口方法发送消息 6477 6478 ```ts 6479 let option = new rpc.MessageOption(); 6480 let data = rpc.MessageParcel.create(); 6481 let reply = rpc.MessageParcel.create(); 6482 data.writeInt(1); 6483 data.writeString("hello"); 6484 proxy.sendRequest(1, data, reply, option, sendRequestCallback); 6485 ``` 6486 6487### getLocalInterface<sup>9+</sup> 6488 6489getLocalInterface(interface: string): IRemoteBroker 6490 6491查询并获取当前接口描述符对应的本地接口对象。 6492 6493**系统能力**:SystemCapability.Communication.IPC.Core 6494 6495**参数:** 6496 6497 | 参数名 | 类型 | 必填 | 说明 | 6498 | --------- | ------ | ---- | ---------------------- | 6499 | interface | string | 是 | 需要查询的接口描述符。 | 6500 6501**返回值:** 6502 6503 | 类型 | 说明 | 6504 | ------------- | ------------------------------------------ | 6505 | IRemoteBroker | 默认返回Null,标识该接口是一个代理侧接口。 | 6506 6507**错误码:** 6508 6509以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 6510 6511 | 错误码ID | 错误信息 | 6512 | -------- | -------- | 6513 | 1900006 | only remote object permitted | 6514 6515**示例:** 6516 6517 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6518 6519 ```ts 6520 // 仅FA模型需要导入@ohos.ability.featureAbility 6521 // import FA from "@ohos.ability.featureAbility"; 6522 6523 let proxy; 6524 let connect = { 6525 onConnect: function(elementName, remoteProxy) { 6526 console.log("RpcClient: js onConnect called."); 6527 proxy = remoteProxy; 6528 }, 6529 onDisconnect: function(elementName) { 6530 console.log("RpcClient: onDisconnect"); 6531 }, 6532 onFailed: function() { 6533 console.log("RpcClient: onFailed"); 6534 } 6535 }; 6536 let want = { 6537 "bundleName": "com.ohos.server", 6538 "abilityName": "com.ohos.server.EntryAbility", 6539 }; 6540 6541 // FA模型使用此方法连接服务 6542 // FA.connectAbility(want,connect); 6543 6544 globalThis.context.connectServiceExtensionAbility(want, connect); 6545 ``` 6546 6547 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的getLocalInterface接口方法查询接口对象 6548 6549 ```ts 6550 try { 6551 let broker = proxy.getLocalInterface("testObject"); 6552 console.log("RpcClient: getLocalInterface is " + broker); 6553 } catch(error) { 6554 console.info("rpc get local interface fail, errorCode " + error.code); 6555 console.info("rpc get local interface fail, errorMessage " + error.message); 6556 } 6557 ``` 6558 6559### queryLocalInterface<sup>(deprecated)</sup> 6560 6561>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。 6562 6563queryLocalInterface(interface: string): IRemoteBroker 6564 6565查询并获取当前接口描述符对应的本地接口对象。 6566 6567**系统能力**:SystemCapability.Communication.IPC.Core 6568 6569**参数:** 6570 6571 | 参数名 | 类型 | 必填 | 说明 | 6572 | --------- | ------ | ---- | ---------------------- | 6573 | interface | string | 是 | 需要查询的接口描述符。 | 6574 6575**返回值:** 6576 6577 | 类型 | 说明 | 6578 | ------------- | ------------------------------------------ | 6579 | IRemoteBroker | 默认返回Null,标识该接口是一个代理侧接口。 | 6580 6581**示例:** 6582 6583 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6584 6585 ```ts 6586 // 仅FA模型需要导入@ohos.ability.featureAbility 6587 // import FA from "@ohos.ability.featureAbility"; 6588 6589 let proxy; 6590 let connect = { 6591 onConnect: function(elementName, remoteProxy) { 6592 console.log("RpcClient: js onConnect called."); 6593 proxy = remoteProxy; 6594 }, 6595 onDisconnect: function(elementName) { 6596 console.log("RpcClient: onDisconnect"); 6597 }, 6598 onFailed: function() { 6599 console.log("RpcClient: onFailed"); 6600 } 6601 }; 6602 let want = { 6603 "bundleName": "com.ohos.server", 6604 "abilityName": "com.ohos.server.EntryAbility", 6605 }; 6606 6607 // FA模型使用此方法连接服务 6608 // FA.connectAbility(want,connect); 6609 6610 globalThis.context.connectServiceExtensionAbility(want, connect); 6611 ``` 6612 6613 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的queryLocalInterface接口获取接口对象 6614 6615 ```ts 6616 let broker = proxy.queryLocalInterface("testObject"); 6617 console.log("RpcClient: queryLocalInterface is " + broker); 6618 ``` 6619 6620### registerDeathRecipient<sup>9+</sup> 6621 6622registerDeathRecipient(recipient: DeathRecipient, flags: number): void 6623 6624注册用于接收远程对象死亡通知的回调。如果与RemoteProxy对象匹配的远程对象进程死亡,则调用此方法。 6625 6626**系统能力**:SystemCapability.Communication.IPC.Core 6627 6628**参数:** 6629 6630 | 参数名 | 类型 | 必填 | 说明 | 6631 | --------- | --------------------------------- | ---- | -------------- | 6632 | recipient | [DeathRecipient](#deathrecipient) | 是 | 要注册的回调。 | 6633 | flags | number | 是 | 死亡通知标志。 | 6634 6635**错误码:** 6636 6637以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 6638 6639 | 错误码ID | 错误信息 | 6640 | -------- | -------- | 6641 | 1900008 | proxy or remote object is invalid | 6642 6643**示例:** 6644 6645 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6646 6647 ```ts 6648 // 仅FA模型需要导入@ohos.ability.featureAbility 6649 // import FA from "@ohos.ability.featureAbility"; 6650 6651 let proxy; 6652 let connect = { 6653 onConnect: function(elementName, remoteProxy) { 6654 console.log("RpcClient: js onConnect called."); 6655 proxy = remoteProxy; 6656 }, 6657 onDisconnect: function(elementName) { 6658 console.log("RpcClient: onDisconnect"); 6659 }, 6660 onFailed: function() { 6661 console.log("RpcClient: onFailed"); 6662 } 6663 }; 6664 let want = { 6665 "bundleName": "com.ohos.server", 6666 "abilityName": "com.ohos.server.EntryAbility", 6667 }; 6668 6669 // FA模型使用此方法连接服务 6670 // FA.connectAbility(want,connect); 6671 6672 globalThis.context.connectServiceExtensionAbility(want, connect); 6673 ``` 6674 6675 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的registerDeathRecipient接口注册死亡回调 6676 6677 ```ts 6678 class MyDeathRecipient { 6679 onRemoteDied() { 6680 console.log("server died"); 6681 } 6682 } 6683 let deathRecipient = new MyDeathRecipient(); 6684 try { 6685 proxy.registerDeathRecipient(deathRecipient, 0); 6686 } catch(error) { 6687 console.info("proxy register deathRecipient fail, errorCode " + error.code); 6688 console.info("proxy register deathRecipient fail, errorMessage " + error.message); 6689 } 6690 ``` 6691 6692### addDeathRecippient<sup>(deprecated)</sup> 6693 6694>从API version 9 开始不再维护,建议使用[registerDeathRecipient](#registerdeathrecipient9)类替代。 6695 6696addDeathRecipient(recipient: DeathRecipient, flags: number): boolean 6697 6698注册用于接收远程对象死亡通知的回调,增加proxy对象上的死亡通知。 6699 6700**系统能力**:SystemCapability.Communication.IPC.Core 6701 6702**参数:** 6703 6704 | 参数名 | 类型 | 必填 | 说明 | 6705 | --------- | --------------------------------- | ---- | --------------------------------- | 6706 | recipient | [DeathRecipient](#deathrecipient) | 是 | 收件人表示要注册的回调。 | 6707 | flags | number | 是 | 死亡通知标志。保留参数。设置为0。 | 6708 6709**返回值:** 6710 6711 | 类型 | 说明 | 6712 | ------- | ---------------------------------------- | 6713 | boolean | true:回调注册成功,false:回调注册失败。| 6714 6715**示例:** 6716 6717 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6718 6719 ```ts 6720 // 仅FA模型需要导入@ohos.ability.featureAbility 6721 // import FA from "@ohos.ability.featureAbility"; 6722 6723 let proxy; 6724 let connect = { 6725 onConnect: function(elementName, remoteProxy) { 6726 console.log("RpcClient: js onConnect called."); 6727 proxy = remoteProxy; 6728 }, 6729 onDisconnect: function(elementName) { 6730 console.log("RpcClient: onDisconnect"); 6731 }, 6732 onFailed: function() { 6733 console.log("RpcClient: onFailed"); 6734 } 6735 }; 6736 let want = { 6737 "bundleName": "com.ohos.server", 6738 "abilityName": "com.ohos.server.EntryAbility", 6739 }; 6740 6741 // FA模型使用此方法连接服务 6742 // FA.connectAbility(want,connect); 6743 6744 globalThis.context.connectServiceExtensionAbility(want, connect); 6745 ``` 6746 6747 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的addDeathRecippient接口方法新增死亡回调 6748 6749 ```ts 6750 class MyDeathRecipient { 6751 onRemoteDied() { 6752 console.log("server died"); 6753 } 6754 } 6755 let deathRecipient = new MyDeathRecipient(); 6756 proxy.addDeathRecipient(deathRecipient, 0); 6757 ``` 6758 6759### unregisterDeathRecipient<sup>9+</sup> 6760 6761unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void 6762 6763注销用于接收远程对象死亡通知的回调。 6764 6765**系统能力**:SystemCapability.Communication.IPC.Core 6766 6767**参数:** 6768 6769 | 参数名 | 类型 | 必填 | 说明 | 6770 | --------- | --------------------------------- | ---- | -------------- | 6771 | recipient | [DeathRecipient](#deathrecipient) | 是 | 要注销的回调。 | 6772 | flags | number | 是 | 死亡通知标志。 | 6773 6774**错误码:** 6775 6776以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 6777 6778 | 错误码ID | 错误信息 | 6779 | -------- | -------- | 6780 | 1900008 | proxy or remote object is invalid | 6781 6782**示例:** 6783 6784 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6785 6786 ```ts 6787 // 仅FA模型需要导入@ohos.ability.featureAbility 6788 // import FA from "@ohos.ability.featureAbility"; 6789 6790 let proxy; 6791 let connect = { 6792 onConnect: function(elementName, remoteProxy) { 6793 console.log("RpcClient: js onConnect called."); 6794 proxy = remoteProxy; 6795 }, 6796 onDisconnect: function(elementName) { 6797 console.log("RpcClient: onDisconnect"); 6798 }, 6799 onFailed: function() { 6800 console.log("RpcClient: onFailed"); 6801 } 6802 }; 6803 let want = { 6804 "bundleName": "com.ohos.server", 6805 "abilityName": "com.ohos.server.EntryAbility", 6806 }; 6807 6808 // FA模型使用此方法连接服务 6809 // FA.connectAbility(want,connect); 6810 6811 globalThis.context.connectServiceExtensionAbility(want, connect); 6812 ``` 6813 6814 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的unregisterDeathRecipient接口方法注销死亡回调 6815 6816 ```ts 6817 class MyDeathRecipient { 6818 onRemoteDied() { 6819 console.log("server died"); 6820 } 6821 } 6822 let deathRecipient = new MyDeathRecipient(); 6823 try { 6824 proxy.registerDeathRecippient(deathRecipient, 0); 6825 proxy.unregisterDeathRecippient(deathRecipient, 0); 6826 } catch(error) { 6827 console.info("proxy register deathRecipient fail, errorCode " + error.code); 6828 console.info("proxy register deathRecipient fail, errorMessage " + error.message); 6829 } 6830 ``` 6831 6832### removeDeathRecipient<sup>(deprecated)</sup> 6833 6834>从API version 9 开始不再维护,建议使用[unregisterDeathRecipient](#unregisterdeathrecipient9)类替代。 6835 6836removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean 6837 6838注销用于接收远程对象死亡通知的回调。 6839 6840**系统能力**:SystemCapability.Communication.IPC.Core 6841 6842**参数:** 6843 6844 | 参数名 | 类型 | 必填 | 说明 | 6845 | --------- | --------------------------------- | ---- | --------------------------------- | 6846 | recipient | [DeathRecipient](#deathrecipient) | 是 | 要注销的死亡回调。 | 6847 | flags | number | 是 | 死亡通知标志。保留参数。设置为0。 | 6848 6849**返回值:** 6850 6851 | 类型 | 说明 | 6852 | ------- | ---------------------------------------- | 6853 | boolean | true:回调注销成功,false:回调注销失败。| 6854 6855**示例:** 6856 6857 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6858 6859 ```ts 6860 // 仅FA模型需要导入@ohos.ability.featureAbility 6861 // import FA from "@ohos.ability.featureAbility"; 6862 6863 let proxy; 6864 let connect = { 6865 onConnect: function(elementName, remoteProxy) { 6866 console.log("RpcClient: js onConnect called."); 6867 proxy = remoteProxy; 6868 }, 6869 onDisconnect: function(elementName) { 6870 console.log("RpcClient: onDisconnect"); 6871 }, 6872 onFailed: function() { 6873 console.log("RpcClient: onFailed"); 6874 } 6875 }; 6876 let want = { 6877 "bundleName": "com.ohos.server", 6878 "abilityName": "com.ohos.server.EntryAbility", 6879 }; 6880 6881 // FA模型使用此方法连接服务 6882 // FA.connectAbility(want,connect); 6883 6884 globalThis.context.connectServiceExtensionAbility(want, connect); 6885 ``` 6886 6887 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的removeDeathRecipient接口方法去注册死亡回调 6888 6889 ```ts 6890 class MyDeathRecipient { 6891 onRemoteDied() { 6892 console.log("server died"); 6893 } 6894 } 6895 let deathRecipient = new MyDeathRecipient(); 6896 proxy.addDeathRecippient(deathRecipient, 0); 6897 proxy.removeDeathRecipient(deathRecipient, 0); 6898 ``` 6899 6900### getDescriptor<sup>9+</sup> 6901 6902getDescriptor(): string 6903 6904获取对象的接口描述符,接口描述符为字符串。 6905 6906**系统能力**:SystemCapability.Communication.IPC.Core 6907 6908**返回值:** 6909 6910 | 类型 | 说明 | 6911 | ------ | ---------------- | 6912 | string | 返回接口描述符。 | 6913 6914**错误码:** 6915 6916以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 6917 6918 | 错误码ID | 错误信息 | 6919 | -------- | -------- | 6920 | 1900008 | proxy or remote object is invalid | 6921 | 1900007 | communication failed | 6922 6923**示例:** 6924 6925 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6926 6927 ```ts 6928 // 仅FA模型需要导入@ohos.ability.featureAbility 6929 // import FA from "@ohos.ability.featureAbility"; 6930 6931 let proxy; 6932 let connect = { 6933 onConnect: function(elementName, remoteProxy) { 6934 console.log("RpcClient: js onConnect called."); 6935 proxy = remoteProxy; 6936 }, 6937 onDisconnect: function(elementName) { 6938 console.log("RpcClient: onDisconnect"); 6939 }, 6940 onFailed: function() { 6941 console.log("RpcClient: onFailed"); 6942 } 6943 }; 6944 let want = { 6945 "bundleName": "com.ohos.server", 6946 "abilityName": "com.ohos.server.EntryAbility", 6947 }; 6948 6949 // FA模型使用此方法连接服务 6950 // FA.connectAbility(want,connect); 6951 6952 globalThis.context.connectServiceExtensionAbility(want, connect); 6953 ``` 6954 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的getDescriptor接口方法获取对象的接口描述符 6955 6956 ```ts 6957 try { 6958 let descriptor = proxy.getDescriptor(); 6959 console.log("RpcClient: descriptor is " + descriptor); 6960 } catch(error) { 6961 console.info("rpc get interface descriptor fail, errorCode " + error.code); 6962 console.info("rpc get interface descriptor fail, errorMessage " + error.message); 6963 } 6964 ``` 6965 6966### getInterfaceDescriptor<sup>(deprecated)</sup> 6967 6968>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。 6969 6970getInterfaceDescriptor(): string 6971 6972查询当前代理对象接口的描述符。 6973 6974**系统能力**:SystemCapability.Communication.IPC.Core 6975 6976**返回值:** 6977 6978 | 类型 | 说明 | 6979 | ------ | ------------------ | 6980 | string | 当前的接口描述符。 | 6981 6982**示例:** 6983 6984 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 6985 6986 ```ts 6987 // 仅FA模型需要导入@ohos.ability.featureAbility 6988 // import FA from "@ohos.ability.featureAbility"; 6989 6990 let proxy; 6991 let connect = { 6992 onConnect: function(elementName, remoteProxy) { 6993 console.log("RpcClient: js onConnect called."); 6994 proxy = remoteProxy; 6995 }, 6996 onDisconnect: function(elementName) { 6997 console.log("RpcClient: onDisconnect"); 6998 }, 6999 onFailed: function() { 7000 console.log("RpcClient: onFailed"); 7001 } 7002 }; 7003 let want = { 7004 "bundleName": "com.ohos.server", 7005 "abilityName": "com.ohos.server.EntryAbility", 7006 }; 7007 7008 // FA模型使用此方法连接服务 7009 // FA.connectAbility(want,connect); 7010 7011 globalThis.context.connectServiceExtensionAbility(want, connect); 7012 ``` 7013 7014 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的getInterfaceDescriptor接口方法查询当前代理对象接口的描述符 7015 7016 ```ts 7017 let descriptor = proxy.getInterfaceDescriptor(); 7018 console.log("RpcClient: descriptor is " + descriptor); 7019 ``` 7020 7021### isObjectDead 7022 7023isObjectDead(): boolean 7024 7025指示对应的RemoteObject是否死亡。 7026 7027**系统能力**:SystemCapability.Communication.IPC.Core 7028 7029**返回值:** 7030 7031 | 类型 | 说明 | 7032 | ------- | ------------------------------------------------- | 7033 | boolean | true:对应的对象已经死亡,false:对应的对象未死亡 | 7034 7035**示例:** 7036 7037 Stage模型的应用在获取服务前需要先获取context,具体方法可参考[获取context](#获取context) 7038 7039 ```ts 7040 // 仅FA模型需要导入@ohos.ability.featureAbility 7041 // import FA from "@ohos.ability.featureAbility"; 7042 7043 let proxy; 7044 let connect = { 7045 onConnect: function(elementName, remoteProxy) { 7046 console.log("RpcClient: js onConnect called."); 7047 proxy = remoteProxy; 7048 }, 7049 onDisconnect: function(elementName) { 7050 console.log("RpcClient: onDisconnect"); 7051 }, 7052 onFailed: function() { 7053 console.log("RpcClient: onFailed"); 7054 } 7055 }; 7056 let want = { 7057 "bundleName": "com.ohos.server", 7058 "abilityName": "com.ohos.server.EntryAbility", 7059 }; 7060 7061 // FA模型使用此方法连接服务 7062 // FA.connectAbility(want,connect); 7063 7064 globalThis.context.connectServiceExtensionAbility(want, connect); 7065 ``` 7066 7067 上述onConnect回调函数中的proxy对象需要等ability异步连接成功后才会被赋值,然后才可调用proxy对象的isObjectDead接口方法判断当前对象是否已经死亡 7068 7069 ```ts 7070 let isDead = proxy.isObjectDead(); 7071 console.log("RpcClient: isObjectDead is " + isDead); 7072 ``` 7073 7074## MessageOption 7075 7076公共消息选项(int标志,int等待时间),使用标志中指定的标志构造指定的MessageOption对象。 7077 7078**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。 7079 7080 | 名称 | 值 | 说明 | 7081 | ------------- | ---- | ----------------------------------------------------------- | 7082 | TF_SYNC | 0 | 同步调用标识。 | 7083 | TF_ASYNC | 1 | 异步调用标识。 | 7084 | TF_ACCEPT_FDS | 0x10 | 指示sendMessageRequest<sup>9+</sup>接口可以返回文件描述符。 | 7085 | TF_WAIT_TIME | 8 | 默认等待时间(单位/秒)。 | 7086 7087 7088### constructor<sup>9+</sup> 7089 7090constructor(async?: boolean); 7091 7092MessageOption构造函数。 7093 7094**系统能力**:SystemCapability.Communication.IPC.Core 7095 7096**参数:** 7097 7098| 参数名 | 类型 | 必填 | 说明 | 7099| ------ | ------- | ---- | -------------------------------------- | 7100| async | boolean | 否 | 同步调用或异步调用标志。默认同步调用。 | 7101 7102 7103**示例:** 7104 7105 ```ts 7106 class TestRemoteObject extends rpc.MessageOption { 7107 constructor(async) { 7108 super(async); 7109 } 7110 } 7111 ``` 7112 7113### constructor 7114 7115constructor(syncFlags?: number, waitTime?: number) 7116 7117MessageOption构造函数。 7118 7119**系统能力**:SystemCapability.Communication.IPC.Core 7120 7121**参数:** 7122 7123 | 参数名 | 类型 | 必填 | 说明 | 7124 | --------- | ------ | ---- | --------------------------------------------- | 7125 | syncFlags | number | 否 | 同步调用或异步调用标志。默认同步调用。 | 7126 | waitTime | number | 否 | 调用rpc最长等待时间。默认 TF_WAIT_TIME。 | 7127 7128**示例:** 7129 7130 ```ts 7131 class TestRemoteObject extends rpc.MessageOption { 7132 constructor(syncFlags,waitTime) { 7133 super(syncFlags,waitTime); 7134 } 7135 } 7136 ``` 7137### isAsync<sup>9+</sup> 7138 7139isAsync(): boolean; 7140 7141获取SendMessageRequest调用中确定同步或是异步的标志。 7142 7143**系统能力**:SystemCapability.Communication.IPC.Core 7144 7145**返回值:** 7146 7147 | 类型 | 说明 | 7148 | ------- | ---------------------------------------- | 7149 | boolean | true:同步调用成功,false:异步调用成功。| 7150 7151**示例:** 7152 7153 ```ts 7154 let option = new rpc.MessageOption(); 7155 let isAsync = option.isAsync(); 7156 ``` 7157 7158### setAsync<sup>9+</sup> 7159 7160setAsync(async: boolean): void; 7161 7162设置SendMessageRequest调用中确定同步或是异步的标志。 7163 7164**系统能力**:SystemCapability.Communication.IPC.Core 7165 7166**示例:** 7167 7168 ```ts 7169 let option = new rpc.MessageOption(); 7170 let setAsync = option.setAsync(true); 7171 console.log("Set synchronization flag"); 7172 ``` 7173 7174### getFlags 7175 7176getFlags(): number 7177 7178获取同步调用或异步调用标志。 7179 7180**系统能力**:SystemCapability.Communication.IPC.Core 7181 7182**返回值:** 7183 7184 | 类型 | 说明 | 7185 | ------ | ------------------------------------ | 7186 | number | 调用成功返回同步调用或异步调用标志。 | 7187 7188**示例:** 7189 7190 ```ts 7191 try { 7192 let option = new rpc.MessageOption(); 7193 console.info("create object successfully."); 7194 let flog = option.getFlags(); 7195 console.info("run getFlags success, flog is " + flog); 7196 option.setFlags(1) 7197 console.info("run setFlags success"); 7198 let flog2 = option.getFlags(); 7199 console.info("run getFlags success, flog2 is " + flog2); 7200 } catch (error) { 7201 console.info("error " + error); 7202 } 7203 ``` 7204 7205### setFlags 7206 7207setFlags(flags: number): void 7208 7209设置同步调用或异步调用标志。 7210 7211**系统能力**:SystemCapability.Communication.IPC.Core 7212 7213**参数:** 7214 7215 | 参数名 | 类型 | 必填 | 说明 | 7216 | ------ | ------ | ---- | ------------------------ | 7217 | flags | number | 是 | 同步调用或异步调用标志。 | 7218 7219**示例:** 7220 7221 ```ts 7222 try { 7223 let option = new rpc.MessageOption(); 7224 option.setFlags(1) 7225 console.info("run setFlags success"); 7226 let flog = option.getFlags(); 7227 console.info("run getFlags success, flog is " + flog); 7228 } catch (error) { 7229 console.info("error " + error); 7230 } 7231 ``` 7232 7233### getWaitTime 7234 7235getWaitTime(): number 7236 7237获取rpc调用的最长等待时间。 7238 7239**系统能力**:SystemCapability.Communication.IPC.Core 7240 7241**返回值:** 7242 7243 | 类型 | 说明 | 7244 | ------ | ----------------- | 7245 | number | rpc最长等待时间。 | 7246 7247**示例:** 7248 7249 ```ts 7250 try { 7251 let option = new rpc.MessageOption(); 7252 let time = option.getWaitTime(); 7253 console.info("run getWaitTime success"); 7254 option.setWaitTime(16); 7255 let time2 = option.getWaitTime(); 7256 console.info("run getWaitTime success, time is " + time); 7257 } catch (error) { 7258 console.info("error " + error); 7259 } 7260 ``` 7261 7262### setWaitTime 7263 7264setWaitTime(waitTime: number): void 7265 7266设置rpc调用最长等待时间。 7267 7268**系统能力**:SystemCapability.Communication.IPC.Core 7269 7270**参数:** 7271 7272 | 参数名 | 类型 | 必填 | 说明 | 7273 | -------- | ------ | ---- | --------------------- | 7274 | waitTime | number | 是 | rpc调用最长等待时间。 | 7275 7276**示例:** 7277 7278 ```ts 7279 try { 7280 let option = new rpc.MessageOption(); 7281 option.setWaitTime(16); 7282 let time = option.getWaitTime(); 7283 console.info("run getWaitTime success, time is " + time); 7284 } catch (error) { 7285 console.info("error " + error); 7286 } 7287 ``` 7288 7289## IPCSkeleton 7290 7291用于获取IPC上下文信息,包括获取UID和PID、获取本端和对端设备ID、检查接口调用是否在同一设备上。 7292 7293### getContextObject 7294 7295static getContextObject(): IRemoteObject 7296 7297静态方法,获取系统能力的管理者。 7298 7299**系统能力**:SystemCapability.Communication.IPC.Core 7300 7301**返回值:** 7302 7303 | 类型 | 说明 | 7304 | ------------------------------- | -------------------- | 7305 | [IRemoteObject](#iremoteobject) | 返回系统能力管理者。 | 7306 7307**示例:** 7308 7309 ```ts 7310 let samgr = rpc.IPCSkeleton.getContextObject(); 7311 console.log("RpcServer: getContextObject result: " + samgr); 7312 ``` 7313 7314### getCallingPid 7315 7316static getCallingPid(): number 7317 7318静态方法,获取调用者的PID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的PID。 7319 7320**系统能力**:SystemCapability.Communication.IPC.Core 7321 7322**返回值:** 7323 7324 | 类型 | 说明 | 7325 | ------ | ----------------- | 7326 | number | 返回调用者的PID。 | 7327 7328**示例:** 7329 7330 ```ts 7331 class Stub extends rpc.RemoteObject { 7332 onRemoteMessageRequest(code, data, reply, option) { 7333 let callerPid = rpc.IPCSkeleton.getCallingPid(); 7334 console.log("RpcServer: getCallingPid result: " + callerPid); 7335 return true; 7336 } 7337 } 7338 ``` 7339 7340### getCallingUid 7341 7342static getCallingUid(): number 7343 7344静态方法,获取调用者的UID。此方法由RemoteObject对象在onRemoteRequest方法中调用,不在IPC上下文环境(onRemoteRequest)中调用则返回本进程的UID。 7345 7346**系统能力**:SystemCapability.Communication.IPC.Core 7347 7348**返回值:** 7349 7350 | 类型 | 说明 | 7351 | ------ | ----------------- | 7352 | number | 返回调用者的UID。 | 7353 7354**示例:** 7355 7356 ```ts 7357 class Stub extends rpc.RemoteObject { 7358 onRemoteMessageRequest(code, data, reply, option) { 7359 let callerUid = rpc.IPCSkeleton.getCallingUid(); 7360 console.log("RpcServer: getCallingUid result: " + callerUid); 7361 return true; 7362 } 7363 } 7364 ``` 7365 7366### getCallingTokenId<sup>8+</sup> 7367 7368static getCallingTokenId(): number; 7369 7370静态方法,获取调用者的TokenId,用于被调用方对调用方的身份校验。 7371 7372**系统能力**:SystemCapability.Communication.IPC.Core 7373 7374**返回值:** 7375 7376 | 类型 | 说明 | 7377 | ------ | --------------------- | 7378 | number | 返回调用者的TokenId。 | 7379 7380**示例:** 7381 7382 ```ts 7383 class Stub extends rpc.RemoteObject { 7384 onRemoteMessageRequest(code, data, reply, option) { 7385 let callerTokenId = rpc.IPCSkeleton.getCallingTokenId(); 7386 console.log("RpcServer: getCallingTokenId result: " + callerTokenId); 7387 return true; 7388 } 7389 } 7390 ``` 7391 7392 7393### getCallingDeviceID 7394 7395static getCallingDeviceID(): string 7396 7397静态方法,获取调用者进程所在的设备ID。 7398 7399**系统能力**:SystemCapability.Communication.IPC.Core 7400 7401**返回值:** 7402 7403 | 类型 | 说明 | 7404 | ------ | ---------------------------- | 7405 | string | 返回调用者进程所在的设备ID。 | 7406 7407**示例:** 7408 7409 ```ts 7410 class Stub extends rpc.RemoteObject { 7411 onRemoteMessageRequest(code, data, reply, option) { 7412 let callerDeviceID = rpc.IPCSkeleton.getCallingDeviceID(); 7413 console.log("RpcServer: callerDeviceID is: " + callerDeviceID); 7414 return true; 7415 } 7416 } 7417 ``` 7418 7419### getLocalDeviceID 7420 7421static getLocalDeviceID(): string 7422 7423静态方法,获取本端设备ID。 7424 7425**系统能力**:SystemCapability.Communication.IPC.Core 7426 7427**返回值:** 7428 7429 | 类型 | 说明 | 7430 | ------ | ------------------ | 7431 | string | 返回本地设备的ID。 | 7432 7433**示例:** 7434 7435 ```ts 7436 class Stub extends rpc.RemoteObject { 7437 onRemoteMessageRequest(code, data, reply, option) { 7438 let localDeviceID = rpc.IPCSkeleton.getLocalDeviceID(); 7439 console.log("RpcServer: localDeviceID is: " + localDeviceID); 7440 return true; 7441 } 7442 } 7443 ``` 7444 7445### isLocalCalling 7446 7447static isLocalCalling(): boolean 7448 7449静态方法,检查当前通信对端是否是本设备的进程。 7450 7451**系统能力**:SystemCapability.Communication.IPC.Core 7452 7453**返回值:** 7454 7455 | 类型 | 说明 | 7456 | ------- | -------------------------------------------------- | 7457 | boolean | true:调用在同一台设备,false:调用未在同一台设备。| 7458 7459**示例:** 7460 7461 ```ts 7462 class Stub extends rpc.RemoteObject { 7463 onRemoteMessageRequest(code, data, reply, option) { 7464 let isLocalCalling = rpc.IPCSkeleton.isLocalCalling(); 7465 console.log("RpcServer: isLocalCalling is: " + isLocalCalling); 7466 return true; 7467 } 7468 } 7469 ``` 7470 7471### flushCmdBuffer<sup>9+</sup> 7472 7473static flushCmdBuffer(object: IRemoteObject): void 7474 7475静态方法,将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。 7476 7477**系统能力**:SystemCapability.Communication.IPC.Core 7478 7479**参数:** 7480 7481 | 参数名 | 类型 | 必填 | 说明 | 7482 | ------ | ------------------------------- | ---- | ------------------- | 7483 | object | [IRemoteObject](#iremoteobject) | 是 | 指定的RemoteProxy。 | 7484 7485 7486**示例:** 7487 7488 ```ts 7489 class TestRemoteObject extends rpc.RemoteObject { 7490 constructor(descriptor) { 7491 super(descriptor); 7492 } 7493 } 7494 let remoteObject = new TestRemoteObject("aaa"); 7495 try { 7496 rpc.IPCSkeleton.flushCmdBuffer(remoteObject); 7497 } catch(error) { 7498 console.info("proxy set calling identity fail, errorCode " + error.code); 7499 console.info("proxy set calling identity fail, errorMessage " + error.message); 7500 } 7501 ``` 7502 7503### flushCommands<sup>(deprecated)</sup> 7504 7505>从API version 9 开始不再维护,建议使用[flushCmdBuffer](#flushcmdbuffer9)类替代。 7506 7507static flushCommands(object: IRemoteObject): number 7508 7509静态方法,将所有挂起的命令从指定的RemoteProxy刷新到相应的RemoteObject。建议在执行任何时间敏感操作之前调用此方法。 7510 7511**系统能力**:SystemCapability.Communication.IPC.Core 7512 7513**参数:** 7514 7515 | 参数名 | 类型 | 必填 | 说明 | 7516 | ------ | ------------------------------- | ---- | ------------------- | 7517 | object | [IRemoteObject](#iremoteobject) | 是 | 指定的RemoteProxy。 | 7518 7519**返回值:** 7520 7521 | 类型 | 说明 | 7522 | ------ | --------------------------------------------------------------------------------- | 7523 | number | 如果操作成功,返回0;如果输入对象为空或RemoteObject,或者操作失败,返回错误代码。 | 7524 7525**示例:** 7526 7527 ```ts 7528 class MyDeathRecipient { 7529 onRemoteDied() { 7530 console.log("server died"); 7531 } 7532 } 7533 class TestRemoteObject extends rpc.RemoteObject { 7534 constructor(descriptor) { 7535 super(descriptor); 7536 } 7537 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 7538 return true; 7539 } 7540 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 7541 return true; 7542 } 7543 isObjectDead(): boolean { 7544 return false; 7545 } 7546 } 7547 let remoteObject = new TestRemoteObject("aaa"); 7548 let ret = rpc.IPCSkeleton.flushCommands(remoteObject); 7549 console.log("RpcServer: flushCommands result: " + ret); 7550 ``` 7551 7552### resetCallingIdentity 7553 7554static resetCallingIdentity(): string 7555 7556静态方法,将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。 7557 7558**系统能力**:SystemCapability.Communication.IPC.Core 7559 7560**返回值:** 7561 7562 | 类型 | 说明 | 7563 | ------ | ------------------------------------ | 7564 | string | 返回包含远程用户的UID和PID的字符串。 | 7565 7566**示例:** 7567 7568 ```ts 7569 class Stub extends rpc.RemoteObject { 7570 onRemoteMessageRequest(code, data, reply, option) { 7571 let callingIdentity = rpc.IPCSkeleton.resetCallingIdentity(); 7572 console.log("RpcServer: callingIdentity is: " + callingIdentity); 7573 return true; 7574 } 7575 } 7576 ``` 7577 7578 7579### restoreCallingIdentity<sup>9+</sup> 7580 7581static restoreCallingIdentity(identity: string): void 7582 7583静态方法,将远程用户的UID和PID替换为本地用户的UID和PID。它可以用于身份验证等场景。 7584 7585**系统能力**:SystemCapability.Communication.IPC.Core 7586 7587**参数:** 7588 7589 | 参数名 | 类型 | 必填 | 说明 | 7590 | -------- | ------ | ---- | ------------------------------------------------------------------ | 7591 | identity | string | 是 | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 | 7592 7593**示例:** 7594 7595 ```ts 7596 class Stub extends rpc.RemoteObject { 7597 onRemoteMessageRequest(code, data, reply, option) { 7598 let callingIdentity = null; 7599 try { 7600 callingIdentity = rpc.IPCSkeleton.resetCallingIdentity(); 7601 console.log("RpcServer: callingIdentity is: " + callingIdentity); 7602 } finally { 7603 rpc.IPCSkeleton.restoreCallingIdentity("callingIdentity "); 7604 } 7605 return true; 7606 } 7607 } 7608 ``` 7609 7610### setCallingIdentity<sup>(deprecated)</sup> 7611 7612>从API version 9 开始不再维护,建议使用[restoreCallingIdentity](#restorecallingidentity9)类替代。 7613 7614static setCallingIdentity(identity: string): boolean 7615 7616静态方法,将UID和PID恢复为远程用户的UID和PID。它通常在使用resetCallingIdentity后调用,需要resetCallingIdentity返回的远程用户的UID和PID。 7617 7618**系统能力**:SystemCapability.Communication.IPC.Core 7619 7620**参数:** 7621 7622 | 参数名 | 类型 | 必填 | 说明 | 7623 | -------- | ------ | ---- | ------------------------------------------------------------------ | 7624 | identity | string | 是 | 标识表示包含远程用户UID和PID的字符串。由resetCallingIdentity返回。 | 7625 7626**返回值:** 7627 7628 | 类型 | 说明 | 7629 | ------- | ---------------------------------| 7630 | boolean | true:设置成功,false:设置失败。| 7631 7632**示例:** 7633 7634 ```ts 7635 class Stub extends rpc.RemoteObject { 7636 onRemoteMessageRequest(code, data, reply, option) { 7637 let callingIdentity = null; 7638 try { 7639 callingIdentity = rpc.IPCSkeleton.resetCallingIdentity(); 7640 console.log("RpcServer: callingIdentity is: " + callingIdentity); 7641 } finally { 7642 let ret = rpc.IPCSkeleton.setCallingIdentity("callingIdentity "); 7643 console.log("RpcServer: setCallingIdentity is: " + ret); 7644 } 7645 return true; 7646 } 7647 } 7648 ``` 7649 7650## RemoteObject 7651 7652实现远程对象。服务提供者必须继承此类。 7653 7654### constructor 7655 7656constructor(descriptor: string) 7657 7658RemoteObject构造函数。 7659 7660**系统能力**:SystemCapability.Communication.IPC.Core 7661 7662**参数:** 7663 7664 | 参数名 | 类型 | 必填 | 说明 | 7665 | ---------- | ------ | ---- | ------------ | 7666 | descriptor | string | 是 | 接口描述符。 | 7667 7668 7669### sendRequest<sup>(deprecated)</sup> 7670 7671>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。 7672 7673sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean 7674 7675以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。 7676 7677**系统能力**:SystemCapability.Communication.IPC.Core 7678 7679**参数:** 7680 7681 | 参数名 | 类型 | 必填 | 说明 | 7682 | ------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- | 7683 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 7684 | data | [MessageParcel](#messageparceldeprecated) | 是 | 保存待发送数据的 MessageParcel对象。 | 7685 | reply | [MessageParcel](#messageparceldeprecated) | 是 | 接收应答数据的MessageParcel对象。 | 7686 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 7687 7688**返回值:** 7689 7690 | 类型 | 说明 | 7691 | ------- | -------------------------------- | 7692 | boolean | true:发送成功,false:发送失败。| 7693 7694**示例:** 7695 7696 ```ts 7697 class MyDeathRecipient { 7698 onRemoteDied() { 7699 console.log("server died"); 7700 } 7701 } 7702 class TestRemoteObject extends rpc.RemoteObject { 7703 constructor(descriptor) { 7704 super(descriptor); 7705 } 7706 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 7707 return true; 7708 } 7709 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 7710 return true; 7711 } 7712 isObjectDead(): boolean { 7713 return false; 7714 } 7715 } 7716 let testRemoteObject = new TestRemoteObject("testObject"); 7717 let option = new rpc.MessageOption(); 7718 let data = rpc.MessageParcel.create(); 7719 let reply = rpc.MessageParcel.create(); 7720 data.writeInt(1); 7721 data.writeString("hello"); 7722 let ret: boolean = testRemoteObject.sendRequest(1, data, reply, option); 7723 if (ret) { 7724 console.log("sendRequest got result"); 7725 let msg = reply.readString(); 7726 console.log("RPCTest: reply msg: " + msg); 7727 } else { 7728 console.log("RPCTest: sendRequest failed"); 7729 } 7730 console.log("RPCTest: sendRequest ends, reclaim parcel"); 7731 data.reclaim(); 7732 reply.reclaim(); 7733 ``` 7734 7735### sendRequest<sup>8+(deprecated)</sup> 7736 7737>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。 7738 7739sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise<SendRequestResult> 7740 7741以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendRequest返回时兑现,回复内容在reply报文里。 7742 7743**系统能力**:SystemCapability.Communication.IPC.Core 7744 7745**参数:** 7746 7747 | 参数名 | 类型 | 必填 | 说明 | 7748 | ------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- | 7749 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 7750 | data | [MessageParcel](#messageparceldeprecated) | 是 | 保存待发送数据的 MessageParcel对象。 | 7751 | reply | [MessageParcel](#messageparceldeprecated) | 是 | 接收应答数据的MessageParcel对象。 | 7752 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 7753 7754**返回值:** 7755 7756 | 类型 | 说明 | 7757 | -------------------------------- | --------------------------------------------- | 7758 | Promise<SendRequestResult> | 返回一个期约,兑现值是sendRequestResult实例。 | 7759 7760**示例:** 7761 7762 ```ts 7763 class MyDeathRecipient { 7764 onRemoteDied() { 7765 console.log("server died"); 7766 } 7767 } 7768 class TestRemoteObject extends rpc.RemoteObject { 7769 constructor(descriptor) { 7770 super(descriptor); 7771 } 7772 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 7773 return true; 7774 } 7775 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 7776 return true; 7777 } 7778 isObjectDead(): boolean { 7779 return false; 7780 } 7781 } 7782 let testRemoteObject = new TestRemoteObject("testObject"); 7783 let option = new rpc.MessageOption(); 7784 let data = rpc.MessageParcel.create(); 7785 let reply = rpc.MessageParcel.create(); 7786 data.writeInt(1); 7787 data.writeString("hello"); 7788 testRemoteObject.sendRequest(1, data, reply, option) 7789 .then(function(result) { 7790 if (result.errCode === 0) { 7791 console.log("sendRequest got result"); 7792 result.reply.readException(); 7793 let msg = result.reply.readString(); 7794 console.log("RPCTest: reply msg: " + msg); 7795 } else { 7796 console.log("RPCTest: sendRequest failed, errCode: " + result.errCode); 7797 } 7798 }).catch(function(e) { 7799 console.log("RPCTest: sendRequest got exception: " + e.message); 7800 }).finally (() => { 7801 console.log("RPCTest: sendRequest ends, reclaim parcel"); 7802 data.reclaim(); 7803 reply.reclaim(); 7804 }); 7805 ``` 7806 7807### sendMessageRequest<sup>9+</sup> 7808 7809sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise<RequestResult> 7810 7811以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则期约立即兑现,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则期约将在sendMessageRequest返回时兑现,回复内容在reply报文里。 7812 7813**系统能力**:SystemCapability.Communication.IPC.Core 7814 7815**参数:** 7816 7817 | 参数名 | 类型 | 必填 | 说明 | 7818 | ------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- | 7819 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 7820 | data | [MessageSequence](#messagesequence9) | 是 | 保存待发送数据的 MessageSequence对象。 | 7821 | reply | [MessageSequence](#messagesequence9) | 是 | 接收应答数据的MessageSequence对象。 | 7822 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 7823 7824**返回值:** 7825 7826 | 类型 | 说明 | 7827 | ---------------------------- | --------------------------------------------- | 7828 | Promise<RequestResult> | 返回一个期约,兑现值是RequestResult实例。 | 7829 7830**示例:** 7831 7832 ```ts 7833 class TestRemoteObject extends rpc.RemoteObject { 7834 constructor(descriptor) { 7835 super(descriptor); 7836 } 7837 } 7838 let testRemoteObject = new TestRemoteObject("testObject"); 7839 let option = new rpc.MessageOption(); 7840 let data = rpc.MessageSequence.create(); 7841 let reply = rpc.MessageSequence.create(); 7842 data.writeInt(1); 7843 data.writeString("hello"); 7844 testRemoteObject.sendMessageRequest(1, data, reply, option) 7845 .then(function(result) { 7846 if (result.errCode === 0) { 7847 console.log("sendMessageRequest got result"); 7848 result.reply.readException(); 7849 let msg = result.reply.readString(); 7850 console.log("RPCTest: reply msg: " + msg); 7851 } else { 7852 console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode); 7853 } 7854 }).catch(function(e) { 7855 console.log("RPCTest: sendMessageRequest got exception: " + e.message); 7856 }).finally (() => { 7857 console.log("RPCTest: sendMessageRequest ends, reclaim parcel"); 7858 data.reclaim(); 7859 reply.reclaim(); 7860 }); 7861 ``` 7862 7863### sendMessageRequest<sup>9+</sup> 7864 7865sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback<RequestResult>): void 7866 7867以同步或异步方式向对端进程发送MessageSequence消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendMessageRequest返回时收到回调,回复内容在reply报文里。 7868 7869**系统能力**:SystemCapability.Communication.IPC.Core 7870 7871**参数:** 7872 7873 | 参数名 | 类型 | 必填 | 说明 | 7874 | ------------- | ------------------------------------ | ---- | -------------------------------------------------------------------------------------- | 7875 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 7876 | data | [MessageSequence](#messagesequence9) | 是 | 保存待发送数据的 MessageSequence对象。 | 7877 | reply | [MessageSequence](#messagesequence9) | 是 | 接收应答数据的MessageSequence对象。 | 7878 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 7879 | AsyncCallback | AsyncCallback<RequestResult> | 是 | 接收发送结果的回调。 | 7880 7881**示例:** 7882 7883 ```ts 7884 class TestRemoteObject extends rpc.RemoteObject { 7885 constructor(descriptor) { 7886 super(descriptor); 7887 } 7888 } 7889 function sendRequestCallback(result) { 7890 if (result.errCode === 0) { 7891 console.log("sendRequest got result"); 7892 result.reply.readException(); 7893 let msg = result.reply.readString(); 7894 console.log("RPCTest: reply msg: " + msg); 7895 } else { 7896 console.log("RPCTest: sendRequest failed, errCode: " + result.errCode); 7897 } 7898 console.log("RPCTest: sendRequest ends, reclaim parcel"); 7899 result.data.reclaim(); 7900 result.reply.reclaim(); 7901 } 7902 let testRemoteObject = new TestRemoteObject("testObject"); 7903 let option = new rpc.MessageOption(); 7904 let data = rpc.MessageSequence.create(); 7905 let reply = rpc.MessageSequence.create(); 7906 data.writeInt(1); 7907 data.writeString("hello"); 7908 testRemoteObject.sendMessageRequest(1, data, reply, option, sendRequestCallback); 7909 ``` 7910 7911### sendRequest<sup>8+(deprecated)</sup> 7912 7913>从API version 9 开始不再维护,建议使用[sendMessageRequest](#sendmessagerequest9)类替代。 7914 7915sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback<SendRequestResult>): void 7916 7917以同步或异步方式向对端进程发送MessageParcel消息。如果为选项设置了异步模式,则立即收到回调,reply报文里没有内容,具体回复需要在业务侧的回调中获取。如果为选项设置了同步模式,则将在sendRequest返回时收到回调,回复内容在reply报文里。 7918 7919**系统能力**:SystemCapability.Communication.IPC.Core 7920 7921**参数:** 7922 7923 | 参数名 | 类型 | 必填 | 说明 | 7924 | ------------- | ----------------------------------------- | ---- | -------------------------------------------------------------------------------------- | 7925 | code | number | 是 | 本次请求调用的消息码,由通信双方确定。如果接口由IDL工具生成,则消息代码由IDL自动生成。 | 7926 | data | [MessageParcel](#messageparceldeprecated) | 是 | 保存待发送数据的 MessageParcel对象。 | 7927 | reply | [MessageParcel](#messageparceldeprecated) | 是 | 接收应答数据的MessageParcel对象。 | 7928 | options | [MessageOption](#messageoption) | 是 | 本次请求的同异步模式,默认同步调用。 | 7929 | AsyncCallback | AsyncCallback<SendRequestResult> | 是 | 接收发送结果的回调。 | 7930 7931**示例:** 7932 7933 ```ts 7934 class MyDeathRecipient { 7935 onRemoteDied() { 7936 console.log("server died"); 7937 } 7938 } 7939 class TestRemoteObject extends rpc.RemoteObject { 7940 constructor(descriptor) { 7941 super(descriptor); 7942 } 7943 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 7944 return true; 7945 } 7946 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 7947 return true; 7948 } 7949 isObjectDead(): boolean { 7950 return false; 7951 } 7952 } 7953 function sendRequestCallback(result) { 7954 if (result.errCode === 0) { 7955 console.log("sendRequest got result"); 7956 result.reply.readException(); 7957 let msg = result.reply.readString(); 7958 console.log("RPCTest: reply msg: " + msg); 7959 } else { 7960 console.log("RPCTest: sendRequest failed, errCode: " + result.errCode); 7961 } 7962 console.log("RPCTest: sendRequest ends, reclaim parcel"); 7963 result.data.reclaim(); 7964 result.reply.reclaim(); 7965 } 7966 let testRemoteObject = new TestRemoteObject("testObject"); 7967 let option = new rpc.MessageOption(); 7968 let data = rpc.MessageParcel.create(); 7969 let reply = rpc.MessageParcel.create(); 7970 data.writeInt(1); 7971 data.writeString("hello"); 7972 testRemoteObject.sendRequest(1, data, reply, option, sendRequestCallback); 7973 ``` 7974 7975### onRemoteRequest<sup>8+(deprecated)</sup> 7976 7977>从API version 9 开始不再维护,建议使用[onRemoteMessageRequest](#onremotemessagerequest9)类替代。 7978 7979onRemoteRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean 7980 7981sendMessageRequest请求的响应处理函数,服务端在该函数里处理请求,回复结果。 7982 7983**系统能力**:SystemCapability.Communication.IPC.Core 7984 7985**参数:** 7986 7987 | 参数名 | 类型 | 必填 | 说明 | 7988 | ------ | ----------------------------------------- | ---- | --------------------------------------- | 7989 | code | number | 是 | 对端发送的服务请求码。 | 7990 | data | [MessageParcel](#messageparceldeprecated) | 是 | 携带客户端调用参数的MessageParcel对象。 | 7991 | reply | [MessageParcel](#messageparceldeprecated) | 是 | 写入结果的MessageParcel对象。 | 7992 | option | [MessageOption](#messageoption) | 是 | 指示操作是同步还是异步。 | 7993 7994**返回值:** 7995 7996 | 类型 | 说明 | 7997 | ------- | -------------------------------- | 7998 | boolean | true:操作成功,false:操作失败。| 7999 8000**示例:** 8001 8002 ```ts 8003 class MyDeathRecipient { 8004 onRemoteDied() { 8005 console.log("server died"); 8006 } 8007 } 8008 class TestRemoteObject extends rpc.RemoteObject { 8009 constructor(descriptor) { 8010 super(descriptor); 8011 } 8012 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 8013 return true; 8014 } 8015 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 8016 return true; 8017 } 8018 isObjectDead(): boolean { 8019 return false; 8020 } 8021 onRemoteRequest(code, data, reply, option) { 8022 if (code === 1) { 8023 console.log("RpcServer: onRemoteRequest called"); 8024 return true; 8025 } else { 8026 console.log("RpcServer: unknown code: " + code); 8027 return false; 8028 } 8029 } 8030 } 8031 ``` 8032 8033### onRemoteMessageRequest<sup>9+</sup> 8034 8035onRemoteMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): boolean | Promise\<boolean> 8036 8037> **说明:** 8038> 8039>* 开发者应优先选择重载onRemoteMessageRequest方法,其中可以自由实现同步和异步的消息处理。 8040>* 开发者同时重载onRemoteRequest和onRemoteMessageRequest方法时,仅onRemoteMessageRequest方法生效。 8041 8042sendMessageRequest请求的响应处理函数,服务端在该函数里同步或异步地处理请求,回复结果。 8043 8044**系统能力**:SystemCapability.Communication.IPC.Core 8045 8046**参数:** 8047 8048 | 参数名 | 类型 | 必填 | 说明 | 8049 | ------ | ------------------------------------ | ---- | ----------------------------------------- | 8050 | code | number | 是 | 对端发送的服务请求码。 | 8051 | data | [MessageSequence](#messagesequence9) | 是 | 携带客户端调用参数的MessageSequence对象。 | 8052 | reply | [MessageSequence](#messagesequence9) | 是 | 写入结果的MessageSequence对象。 | 8053 | option | [MessageOption](#messageoption) | 是 | 指示操作是同步还是异步。 | 8054 8055**返回值:** 8056 8057 | 类型 | 说明 | 8058 | ----------------- | ----------------------------------------------------------------------------------------------- | 8059 | boolean | 若在onRemoteMessageRequest中同步地处理请求,则返回一个布尔值:true:操作成功,false:操作失败。 | 8060 | Promise\<boolean> | 若在onRemoteMessageRequest中异步地处理请求,则返回一个Promise对象。 | 8061 8062**重载onRemoteMessageRequest方法同步处理请求示例:** 8063 8064 ```ts 8065 class TestRemoteObject extends rpc.RemoteObject { 8066 constructor(descriptor) { 8067 super(descriptor); 8068 } 8069 8070 onRemoteMessageRequest(code, data, reply, option) { 8071 if (code === 1) { 8072 console.log("RpcServer: sync onRemoteMessageRequest is called"); 8073 return true; 8074 } else { 8075 console.log("RpcServer: unknown code: " + code); 8076 return false; 8077 } 8078 } 8079 } 8080 ``` 8081 8082 **重载onRemoteMessageRequest方法异步处理请求示例:** 8083 8084 ```ts 8085 class TestRemoteObject extends rpc.RemoteObject { 8086 constructor(descriptor) { 8087 super(descriptor); 8088 } 8089 8090 async onRemoteMessageRequest(code, data, reply, option) { 8091 if (code === 1) { 8092 console.log("RpcServer: async onRemoteMessageRequest is called"); 8093 } else { 8094 console.log("RpcServer: unknown code: " + code); 8095 return false; 8096 } 8097 await new Promise((resolve) => { 8098 setTimeout(resolve, 100); 8099 }) 8100 return true; 8101 } 8102 } 8103 ``` 8104 8105**同时重载onRemoteMessageRequest和onRemoteRequest方法同步处理请求示例:** 8106 8107 ```ts 8108 class TestRemoteObject extends rpc.RemoteObject { 8109 constructor(descriptor) { 8110 super(descriptor); 8111 } 8112 8113 onRemoteRequest(code, data, reply, option) { 8114 if (code === 1) { 8115 console.log("RpcServer: sync onRemoteMessageRequest is called"); 8116 return true; 8117 } else { 8118 console.log("RpcServer: unknown code: " + code); 8119 return false; 8120 } 8121 } 8122 // 同时调用仅会执行onRemoteMessageRequest 8123 onRemoteMessageRequest(code, data, reply, option) { 8124 if (code === 1) { 8125 console.log("RpcServer: async onRemoteMessageRequest is called"); 8126 } else { 8127 console.log("RpcServer: unknown code: " + code); 8128 return false; 8129 } 8130 8131 return true; 8132 } 8133 } 8134 ``` 8135 8136 **同时重载onRemoteMessageRequest和onRemoteRequest方法异步处理请求示例:** 8137 8138 ```ts 8139 class TestRemoteObject extends rpc.RemoteObject { 8140 constructor(descriptor) { 8141 super(descriptor); 8142 } 8143 8144 onRemoteRequest(code, data, reply, option) { 8145 if (code === 1) { 8146 console.log("RpcServer: sync onRemoteRequest is called"); 8147 return true; 8148 } else { 8149 console.log("RpcServer: unknown code: " + code); 8150 return false; 8151 } 8152 } 8153 // 同时调用仅会执行onRemoteMessageRequest 8154 async onRemoteMessageRequest(code, data, reply, option) { 8155 if (code === 1) { 8156 console.log("RpcServer: async onRemoteMessageRequest is called"); 8157 } else { 8158 console.log("RpcServer: unknown code: " + code); 8159 return false; 8160 } 8161 await new Promise((resolve) => { 8162 setTimeout(resolve, 100); 8163 }) 8164 return true; 8165 } 8166 } 8167 ``` 8168 8169### getCallingUid 8170 8171getCallingUid(): number 8172 8173获取通信对端的进程Uid。 8174 8175**系统能力**:SystemCapability.Communication.IPC.Core 8176 8177**返回值:** 8178 | 类型 | 说明 | 8179 | ------ | ----------------------- | 8180 | number | 返回通信对端的进程Uid。 | 8181 8182**示例:** 8183 8184 ```ts 8185 class TestRemoteObject extends rpc.RemoteObject { 8186 constructor(descriptor) { 8187 super(descriptor); 8188 } 8189 } 8190 let testRemoteObject = new TestRemoteObject("testObject"); 8191 console.log("RpcServer: getCallingUid: " + testRemoteObject.getCallingUid()); 8192 ``` 8193 8194### getCallingPid 8195 8196getCallingPid(): number 8197 8198获取通信对端的进程Pid。 8199 8200**系统能力**:SystemCapability.Communication.IPC.Core 8201 8202**返回值:** 8203 8204 | 类型 | 说明 | 8205 | ------ | ----------------------- | 8206 | number | 返回通信对端的进程Pid。 | 8207 8208**示例:** 8209 8210 ```ts 8211 class TestRemoteObject extends rpc.RemoteObject { 8212 constructor(descriptor) { 8213 super(descriptor); 8214 } 8215 } 8216 let testRemoteObject = new TestRemoteObject("testObject"); 8217 console.log("RpcServer: getCallingPid: " + testRemoteObject.getCallingPid()); 8218 ``` 8219 8220### getLocalInterface<sup>9+</sup> 8221 8222getLocalInterface(descriptor: string): IRemoteBroker 8223 8224查询接口描述符的字符串。 8225 8226**系统能力**:SystemCapability.Communication.IPC.Core 8227 8228**参数:** 8229 8230 | 参数名 | 类型 | 必填 | 说明 | 8231 | ---------- | ------ | ---- | -------------------- | 8232 | descriptor | string | 是 | 接口描述符的字符串。 | 8233 8234**返回值:** 8235 8236 | 类型 | 说明 | 8237 | ------------- | --------------------------------------------- | 8238 | IRemoteBroker | 返回绑定到指定接口描述符的IRemoteBroker对象。 | 8239 8240 8241**示例:** 8242 8243 ```ts 8244 class MyDeathRecipient { 8245 onRemoteDied() { 8246 console.log("server died"); 8247 } 8248 } 8249 class TestRemoteObject extends rpc.RemoteObject { 8250 constructor(descriptor) { 8251 super(descriptor); 8252 } 8253 registerDeathRecipient(recipient: MyDeathRecipient, flags: number) { 8254 // 方法逻辑需开发者根据业务需要实现 8255 } 8256 unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) { 8257 // 方法逻辑需开发者根据业务需要实现 8258 } 8259 isObjectDead(): boolean { 8260 return false; 8261 } 8262 } 8263 let testRemoteObject = new TestRemoteObject("testObject"); 8264 try { 8265 let broker = testRemoteObject.getLocalInterface("testObject"); 8266 } catch(error) { 8267 console.info("rpc get local interface fail, errorCode " + error.code); 8268 console.info("rpc get local interface fail, errorMessage " + error.message); 8269 } 8270 ``` 8271 8272### queryLocalInterface<sup>(deprecated)</sup> 8273 8274>从API version 9 开始不再维护,建议使用[getLocalInterface](#getlocalinterface9)类替代。 8275 8276queryLocalInterface(descriptor: string): IRemoteBroker 8277 8278查询并获取当前接口描述符对应的远端对象是否已经存在。 8279 8280**系统能力**:SystemCapability.Communication.IPC.Core 8281 8282**参数:** 8283 8284 | 参数名 | 类型 | 必填 | 说明 | 8285 | ---------- | ------ | ---- | ---------------------- | 8286 | descriptor | string | 是 | 需要查询的接口描述符。 | 8287 8288**返回值:** 8289 8290 | 类型 | 说明 | 8291 | ------------- | ------------------------------------------------------------------ | 8292 | IRemoteBroker | 如果接口描述符对应的远端对象存在,则返回该远端对象,否则返回Null。 | 8293 8294**示例:** 8295 8296 ```ts 8297 class MyDeathRecipient { 8298 onRemoteDied() { 8299 console.log("server died"); 8300 } 8301 } 8302 class TestRemoteObject extends rpc.RemoteObject { 8303 constructor(descriptor) { 8304 super(descriptor); 8305 } 8306 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 8307 return true; 8308 } 8309 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 8310 return true; 8311 } 8312 isObjectDead(): boolean { 8313 return false; 8314 } 8315 } 8316 let testRemoteObject = new TestRemoteObject("testObject"); 8317 let broker = testRemoteObject.queryLocalInterface("testObject"); 8318 ``` 8319 8320### getDescriptor<sup>9+</sup> 8321 8322getDescriptor(): string 8323 8324获取对象的接口描述符。接口描述符为字符串。 8325 8326**系统能力**:SystemCapability.Communication.IPC.Core 8327 8328**返回值:** 8329 8330 | 类型 | 说明 | 8331 | ------ | ---------------- | 8332 | string | 返回接口描述符。 | 8333 8334**错误码:** 8335 8336以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 8337 8338 | 错误码ID | 错误信息 | 8339 | -------- | -------- | 8340 | 1900008 | proxy or remote object is invalid | 8341 8342**示例:** 8343 8344 ```ts 8345 class MyDeathRecipient { 8346 onRemoteDied() { 8347 console.log("server died"); 8348 } 8349 } 8350 class TestRemoteObject extends rpc.RemoteObject { 8351 constructor(descriptor) { 8352 super(descriptor); 8353 } 8354 registerDeathRecipient(recipient: MyDeathRecipient, flags: number) { 8355 // 方法逻辑需开发者根据业务需要实现 8356 } 8357 unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) { 8358 // 方法逻辑需开发者根据业务需要实现 8359 } 8360 isObjectDead(): boolean { 8361 return false; 8362 } 8363 } 8364 let testRemoteObject = new TestRemoteObject("testObject"); 8365 console.log("RpcServer: descriptor is: " + descriptor); 8366 try { 8367 let descriptor = testRemoteObject.getDescriptor(); 8368 } catch(error) { 8369 console.info("rpc get local interface fail, errorCode " + error.code); 8370 console.info("rpc get local interface fail, errorMessage " + error.message); 8371 } 8372 ``` 8373 8374### getInterfaceDescriptor<sup>(deprecated)</sup> 8375 8376>从API version 9 开始不再维护,建议使用[getDescriptor](#getdescriptor9)类替代。 8377 8378getInterfaceDescriptor(): string 8379 8380查询接口描述符。 8381 8382**系统能力**:SystemCapability.Communication.IPC.Core 8383 8384**返回值:** 8385 8386 | 类型 | 说明 | 8387 | ------ | ---------------- | 8388 | string | 返回接口描述符。 | 8389 8390**示例:** 8391 8392 ```ts 8393 class MyDeathRecipient { 8394 onRemoteDied() { 8395 console.log("server died"); 8396 } 8397 } 8398 class TestRemoteObject extends rpc.RemoteObject { 8399 constructor(descriptor) { 8400 super(descriptor); 8401 } 8402 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 8403 return true; 8404 } 8405 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 8406 return true; 8407 } 8408 isObjectDead(): boolean { 8409 return false; 8410 } 8411 } 8412 let testRemoteObject = new TestRemoteObject("testObject"); 8413 let descriptor = testRemoteObject.getInterfaceDescriptor(); 8414 console.log("RpcServer: descriptor is: " + descriptor); 8415 ``` 8416 8417### modifyLocalInterface<sup>9+</sup> 8418 8419modifyLocalInterface(localInterface: IRemoteBroker, descriptor: string): void 8420 8421此接口用于把接口描述符和IRemoteBroker对象绑定。 8422 8423**系统能力**:SystemCapability.Communication.IPC.Core 8424 8425**参数:** 8426 8427 | 参数名 | 类型 | 必填 | 说明 | 8428 | -------------- | ------------- | ---- | ------------------------------------- | 8429 | localInterface | IRemoteBroker | 是 | 将与描述符绑定的IRemoteBroker对象。 | 8430 | descriptor | string | 是 | 用于与IRemoteBroker对象绑定的描述符。 | 8431 8432**示例:** 8433 8434 ```ts 8435 class MyDeathRecipient { 8436 onRemoteDied() { 8437 console.log("server died"); 8438 } 8439 } 8440 class TestRemoteObject extends rpc.RemoteObject { 8441 constructor(descriptor) { 8442 super(descriptor); 8443 try { 8444 this.modifyLocalInterface(this, descriptor); 8445 } catch(error) { 8446 console.info(" rpc attach local interface fail, errorCode " + error.code); 8447 console.info(" rpc attach local interface fail, errorMessage " + error.message); 8448 } 8449 } 8450 registerDeathRecipient(recipient: MyDeathRecipient, flags: number) { 8451 // 方法逻辑需开发者根据业务需要实现 8452 } 8453 unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) { 8454 // 方法逻辑需开发者根据业务需要实现 8455 } 8456 isObjectDead(): boolean { 8457 return false; 8458 } 8459 asObject(): rpc.IRemoteObject { 8460 return this; 8461 } 8462 } 8463 let testRemoteObject = new TestRemoteObject("testObject"); 8464 ``` 8465 8466### attachLocalInterface<sup>(deprecated)</sup> 8467 8468>从API version 9 开始不再维护,建议使用[modifyLocalInterface](#modifylocalinterface9)类替代。 8469 8470attachLocalInterface(localInterface: IRemoteBroker, descriptor: string): void 8471 8472此接口用于把接口描述符和IRemoteBroker对象绑定。 8473 8474**系统能力**:SystemCapability.Communication.IPC.Core 8475 8476**参数:** 8477 8478 | 参数名 | 类型 | 必填 | 说明 | 8479 | -------------- | ------------- | ---- | ------------------------------------- | 8480 | localInterface | IRemoteBroker | 是 | 将与描述符绑定的IRemoteBroker对象。 | 8481 | descriptor | string | 是 | 用于与IRemoteBroker对象绑定的描述符。 | 8482 8483**示例:** 8484 8485 ```ts 8486 class MyDeathRecipient { 8487 onRemoteDied() { 8488 console.log("server died"); 8489 } 8490 } 8491 class TestRemoteObject extends rpc.RemoteObject { 8492 constructor(descriptor) { 8493 super(descriptor); 8494 this.attachLocalInterface(this, descriptor); 8495 } 8496 addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 8497 return true; 8498 } 8499 removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean { 8500 return true; 8501 } 8502 isObjectDead(): boolean { 8503 return false; 8504 } 8505 asObject(): rpc.IRemoteObject { 8506 return this; 8507 } 8508 } 8509 let testRemoteObject = new TestRemoteObject("testObject"); 8510 ``` 8511 8512## Ashmem<sup>8+</sup> 8513 8514提供与匿名共享内存对象相关的方法,包括创建、关闭、映射和取消映射Ashmem、从Ashmem读取数据和写入数据、获取Ashmem大小、设置Ashmem保护。 8515 8516**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.IPC.Core。 8517 8518映射内存保护类型: 8519 8520 | 名称 | 值 | 说明 | 8521 | ---------- | --- | ------------------ | 8522 | PROT_EXEC | 4 | 映射的内存可执行 | 8523 | PROT_NONE | 0 | 映射的内存不可访问 | 8524 | PROT_READ | 1 | 映射的内存可读 | 8525 | PROT_WRITE | 2 | 映射的内存可写 | 8526 8527### create<sup>9+</sup> 8528 8529static create(name: string, size: number): Ashmem 8530 8531静态方法,根据指定的名称和大小创建Ashmem对象。 8532 8533**系统能力**:SystemCapability.Communication.IPC.Core 8534 8535**参数:** 8536 8537 | 参数名 | 类型 | 必填 | 说明 | 8538 | ------ | ------ | ---- | ---------------------------- | 8539 | name | string | 是 | 名称,用于查询Ashmem信息。 | 8540 | size | number | 是 | Ashmem的大小,以字节为单位。 | 8541 8542**返回值:** 8543 8544 | 类型 | 说明 | 8545 | ------ | ---------------------------------------------- | 8546 | Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 | 8547 8548**示例:** 8549 8550 ```ts 8551 let ashmem; 8552 try { 8553 ashmem = rpc.Ashmem.create("ashmem", 1024*1024); 8554 } catch(error) { 8555 console.info("Rpc creat ashmem fail, errorCode " + error.code); 8556 console.info("Rpc creat ashmem fail, errorMessage " + error.message); 8557 } 8558 let size = ashmem.getAshmemSize(); 8559 console.log("RpcTest: get ashemm by create : " + ashmem + " size is : " + size); 8560 ``` 8561 8562### createAshmem<sup>8+(deprecated)</sup> 8563 8564>从API version 9 开始不再维护,建议使用[create](#create9)类替代。 8565 8566static createAshmem(name: string, size: number): Ashmem 8567 8568静态方法,根据指定的名称和大小创建Ashmem对象。 8569 8570**系统能力**:SystemCapability.Communication.IPC.Core 8571 8572**参数:** 8573 8574 | 参数名 | 类型 | 必填 | 说明 | 8575 | ------ | ------ | ---- | ---------------------------- | 8576 | name | string | 是 | 名称,用于查询Ashmem信息。 | 8577 | size | number | 是 | Ashmem的大小,以字节为单位。 | 8578 8579**返回值:** 8580 8581 | 类型 | 说明 | 8582 | ------ | ---------------------------------------------- | 8583 | Ashmem | 返回创建的Ashmem对象;如果创建失败,返回null。 | 8584 8585**示例:** 8586 8587 ```ts 8588 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024); 8589 let size = ashmem.getAshmemSize(); 8590 console.log("RpcTest: get ashemm by createAshmem : " + ashmem + " size is : " + size); 8591 ``` 8592 8593### create<sup>9+</sup> 8594 8595static create(ashmem: Ashmem): Ashmem 8596 8597静态方法,通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。 8598 8599**系统能力**:SystemCapability.Communication.IPC.Core 8600 8601**参数:** 8602 8603 | 参数名 | 类型 | 必填 | 说明 | 8604 | ------ | ------ | ---- | -------------------- | 8605 | ashmem | Ashmem | 是 | 已存在的Ashmem对象。 | 8606 8607**返回值:** 8608 8609 | 类型 | 说明 | 8610 | ------ | ---------------------- | 8611 | Ashmem | 返回创建的Ashmem对象。 | 8612 8613 8614**示例:** 8615 8616 ```ts 8617 let ashmem2; 8618 try { 8619 let ashmem = rpc.Ashmem.create("ashmem", 1024*1024); 8620 let ashmem2 = rpc.Ashmem.create(ashmem); 8621 } catch(error) { 8622 console.info("Rpc creat ashmem from existing fail, errorCode " + error.code); 8623 console.info("Rpc creat ashmem from existing fail, errorMessage " + error.message); 8624 } 8625 let size = ashmem2.getAshmemSize(); 8626 console.log("RpcTest: get ashemm by create : " + ashmem2 + " size is : " + size); 8627 ``` 8628 8629### createAshmemFromExisting<sup>8+(deprecated)</sup> 8630 8631>从API version 9 开始不再维护,建议使用[create](#create9)类替代。 8632 8633static createAshmemFromExisting(ashmem: Ashmem): Ashmem 8634 8635静态方法,通过复制现有Ashmem对象的文件描述符(fd)来创建Ashmem对象。两个Ashmem对象指向同一个共享内存区域。 8636 8637**系统能力**:SystemCapability.Communication.IPC.Core 8638 8639**参数:** 8640 8641 | 参数名 | 类型 | 必填 | 说明 | 8642 | ------ | ------ | ---- | -------------------- | 8643 | ashmem | Ashmem | 是 | 已存在的Ashmem对象。 | 8644 8645**返回值:** 8646 8647 | 类型 | 说明 | 8648 | ------ | ---------------------- | 8649 | Ashmem | 返回创建的Ashmem对象。 | 8650 8651**示例:** 8652 8653 ```ts 8654 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024); 8655 let ashmem2 = rpc.Ashmem.createAshmemFromExisting(ashmem); 8656 let size = ashmem2.getAshmemSize(); 8657 console.log("RpcTest: get ashemm by createAshmemFromExisting : " + ashmem2 + " size is : " + size); 8658 ``` 8659 8660### closeAshmem<sup>8+</sup> 8661 8662closeAshmem(): void 8663 8664关闭这个Ashmem。 8665 8666**系统能力**:SystemCapability.Communication.IPC.Core 8667 8668**示例:** 8669 8670 ```ts 8671 let ashmem = rpc.Ashmem.create("ashmem", 1024*1024); 8672 ashmem.closeAshmem(); 8673 ``` 8674 8675### unmapAshmem<sup>8+</sup> 8676 8677unmapAshmem(): void 8678 8679删除该Ashmem对象的地址映射。 8680 8681**系统能力**:SystemCapability.Communication.IPC.Core 8682 8683**示例:** 8684 8685 ```ts 8686 let ashmem = rpc.Ashmem.create("ashmem", 1024*1024); 8687 ashmem.unmapAshmem(); 8688 ``` 8689 8690### getAshmemSize<sup>8+</sup> 8691 8692getAshmemSize(): number 8693 8694获取Ashmem对象的内存大小。 8695 8696**系统能力**:SystemCapability.Communication.IPC.Core 8697 8698**返回值:** 8699 8700 | 类型 | 说明 | 8701 | ------ | -------------------------- | 8702 | number | 返回Ashmem对象的内存大小。 | 8703 8704**示例:** 8705 8706 ```ts 8707 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024); 8708 let size = ashmem.getAshmemSize(); 8709 console.log("RpcTest: get ashmem is " + ashmem + " size is : " + size); 8710 ``` 8711 8712### mapTypedAshmem<sup>9+</sup> 8713 8714mapTypedAshmem(mapType: number): void 8715 8716在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。 8717 8718**系统能力**:SystemCapability.Communication.IPC.Core 8719 8720**参数:** 8721 8722 | 参数名 | 类型 | 必填 | 说明 | 8723 | ------- | ------ | ---- | ------------------------------ | 8724 | mapType | number | 是 | 指定映射的内存区域的保护等级。 | 8725 8726**错误码:** 8727 8728以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 8729 8730 | 错误码ID | 错误信息 | 8731 | -------- | -------- | 8732 | 1900001 | call mmap function failed | 8733 8734**示例:** 8735 8736 ```ts 8737 let ashmem = rpc.Ashmem.create("ashmem", 1024*1024); 8738 try { 8739 ashmem.mapTypedAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE); 8740 } catch(error) { 8741 console.info("Rpc map ashmem fail, errorCode " + error.code); 8742 console.info("Rpc map ashmem fail, errorMessage " + error.message); 8743 } 8744 ``` 8745 8746### mapAshmem<sup>8+(deprecated)</sup> 8747 8748>从API version 9 开始不再维护,建议使用[mapTypedAshmem](#maptypedashmem9)类替代。 8749 8750mapAshmem(mapType: number): boolean 8751 8752在此进程的虚拟地址空间上创建共享文件映射,映射区域大小由此Ashmem对象指定。 8753 8754**系统能力**:SystemCapability.Communication.IPC.Core 8755 8756**参数:** 8757 8758 | 参数名 | 类型 | 必填 | 说明 | 8759 | ------- | ------ | ---- | ------------------------------ | 8760 | mapType | number | 是 | 指定映射的内存区域的保护等级。 | 8761 8762**返回值:** 8763 8764 | 类型 | 说明 | 8765 | ------- | -------------------------------- | 8766 | boolean | true:映射成功,false:映射失败。| 8767 8768**示例:** 8769 8770 ```ts 8771 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024); 8772 let mapReadAndWrite = ashmem.mapAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE); 8773 console.log("RpcTest: map ashmem result is : " + mapReadAndWrite); 8774 ``` 8775 8776### mapReadWriteAshmem<sup>9+</sup> 8777 8778mapReadWriteAshmem(): void 8779 8780在此进程虚拟地址空间上创建可读写的共享文件映射。 8781 8782**系统能力**:SystemCapability.Communication.IPC.Core 8783 8784**错误码:** 8785 8786以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 8787 8788 | 错误码ID | 错误信息 | 8789 | -------- | -------- | 8790 | 1900001 | call mmap function failed | 8791 8792**示例:** 8793 8794 ```ts 8795 let ashmem = rpc.Ashmem.create("ashmem", 1024*1024); 8796 try { 8797 ashmem.mapReadWriteAshmem(); 8798 } catch(error) { 8799 console.info("Rpc map read and write ashmem fail, errorCode " + error.code); 8800 console.info("Rpc map read and write ashmem fail, errorMessage " + error.message); 8801 } 8802 ``` 8803 8804### mapReadAndWriteAshmem<sup>8+(deprecated)</sup> 8805 8806>从API version 9 开始不再维护,建议使用[mapReadWriteAshmem](#mapreadwriteashmem9)类替代。 8807 8808mapReadAndWriteAshmem(): boolean 8809 8810在此进程虚拟地址空间上创建可读写的共享文件映射。 8811 8812**系统能力**:SystemCapability.Communication.IPC.Core 8813 8814**返回值:** 8815 8816 | 类型 | 说明 | 8817 | ------- | -------------------------------- | 8818 | boolean | true:映射成功,false:映射失败。| 8819 8820**示例:** 8821 8822 ```ts 8823 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024); 8824 let mapResult = ashmem.mapReadAndWriteAshmem(); 8825 console.log("RpcTest: map ashmem result is : " + mapResult); 8826 ``` 8827 8828### mapReadonlyAshmem<sup>9+</sup> 8829 8830mapReadonlyAshmem(): void 8831 8832在此进程虚拟地址空间上创建只读的共享文件映射。 8833 8834**系统能力**:SystemCapability.Communication.IPC.Core 8835 8836**错误码:** 8837 8838以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 8839 8840 | 错误码ID | 错误信息 | 8841 | -------- | -------- | 8842 | 1900001 | call mmap function failed | 8843 8844**示例:** 8845 8846 ```ts 8847 let ashmem = rpc.Ashmem.create("ashmem", 1024*1024); 8848 try { 8849 ashmem.mapReadonlyAshmem(); 8850 } catch(error) { 8851 console.info("Rpc map read and write ashmem fail, errorCode " + error.code); 8852 console.info("Rpc map read and write ashmem fail, errorMessage " + error.message); 8853 } 8854 ``` 8855 8856### mapReadOnlyAshmem<sup>8+(deprecated)</sup> 8857 8858>从API version 9 开始不再维护,建议使用[mapReadonlyAshmem](#mapreadonlyashmem9)类替代。 8859 8860mapReadOnlyAshmem(): boolean 8861 8862在此进程虚拟地址空间上创建只读的共享文件映射。 8863 8864**系统能力**:SystemCapability.Communication.IPC.Core 8865 8866**返回值:** 8867 8868 | 类型 | 说明 | 8869 | ------- | -------------------------------- | 8870 | boolean | true:映射成功,false:映射失败。| 8871 8872**示例:** 8873 8874 ```ts 8875 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024); 8876 let mapResult = ashmem.mapReadOnlyAshmem(); 8877 console.log("RpcTest: Ashmem mapReadOnlyAshmem result is : " + mapResult); 8878 ``` 8879 8880### setProtectionType<sup>9+</sup> 8881 8882setProtectionType(protectionType: number): void 8883 8884设置映射内存区域的保护等级。 8885 8886**系统能力**:SystemCapability.Communication.IPC.Core 8887 8888**参数:** 8889 8890 | 参数名 | 类型 | 必填 | 说明 | 8891 | -------------- | ------ | ---- | ------------------ | 8892 | protectionType | number | 是 | 要设置的保护类型。 | 8893 8894**错误码:** 8895 8896以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 8897 8898 | 错误码ID | 错误信息 | 8899 | -------- | -------- | 8900 | 1900002 | call os ioctl function failed | 8901 8902**示例:** 8903 8904 ```ts 8905 let ashmem = rpc.Ashmem.create("ashmem", 1024*1024); 8906 try { 8907 ashmem.setProtection(ashmem.PROT_READ); 8908 } catch(error) { 8909 console.info("Rpc set protection type fail, errorCode " + error.code); 8910 console.info("Rpc set protection type fail, errorMessage " + error.message); 8911 } 8912 ``` 8913 8914### setProtection<sup>8+(deprecated)</sup> 8915 8916>从API version 9 开始不再维护,建议使用[setProtectionType](#setprotectiontype9)类替代。 8917 8918setProtection(protectionType: number): boolean 8919 8920设置映射内存区域的保护等级。 8921 8922**系统能力**:SystemCapability.Communication.IPC.Core 8923 8924**参数:** 8925 8926 | 参数名 | 类型 | 必填 | 说明 | 8927 | -------------- | ------ | ---- | ------------------ | 8928 | protectionType | number | 是 | 要设置的保护类型。 | 8929 8930**返回值:** 8931 8932 | 类型 | 说明 | 8933 | ------- | -------------------------------- | 8934 | boolean | true:设置成功,false:设置失败。| 8935 8936**示例:** 8937 8938 ```ts 8939 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024); 8940 let result = ashmem.setProtection(ashmem.PROT_READ); 8941 console.log("RpcTest: Ashmem setProtection result is : " + result); 8942 ``` 8943 8944### writeAshmem<sup>9+</sup> 8945 8946writeAshmem(buf: number[], size: number, offset: number): void 8947 8948将数据写入此Ashmem对象关联的共享文件。 8949 8950**系统能力**:SystemCapability.Communication.IPC.Core 8951 8952**参数:** 8953 8954 | 参数名 | 类型 | 必填 | 说明 | 8955 | ------ | -------- | ---- | -------------------------------------------------- | 8956 | buf | number[] | 是 | 写入Ashmem对象的数据。 | 8957 | size | number | 是 | 要写入的数据大小。 | 8958 | offset | number | 是 | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 | 8959 8960**错误码:** 8961 8962以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 8963 8964 | 错误码ID | 错误信息 | 8965 | -------- | -------- | 8966 | 1900003 | write to ashmem failed | 8967 8968**示例:** 8969 8970 ```ts 8971 let ashmem = rpc.Ashmem.create("ashmem", 1024*1024); 8972 ashmem.mapReadWriteAshmem(); 8973 var ByteArrayVar = [1, 2, 3, 4, 5]; 8974 try { 8975 ashmem.writeAshmem(ByteArrayVar, 5, 0); 8976 } catch(error) { 8977 console.info("Rpc write to ashmem fail, errorCode " + error.code); 8978 console.info("Rpc write to ashmem fail, errorMessage " + error.message); 8979 } 8980 ``` 8981 8982### writeToAshmem<sup>8+(deprecated)</sup> 8983 8984>从API version 9 开始不再维护,建议使用[writeAshmem](#writeashmem9)类替代。 8985 8986writeToAshmem(buf: number[], size: number, offset: number): boolean 8987 8988将数据写入此Ashmem对象关联的共享文件。 8989 8990**系统能力**:SystemCapability.Communication.IPC.Core 8991 8992**参数:** 8993 8994 | 参数名 | 类型 | 必填 | 说明 | 8995 | ------ | -------- | ---- | -------------------------------------------------- | 8996 | buf | number[] | 是 | 写入Ashmem对象的数据。 | 8997 | size | number | 是 | 要写入的数据大小。 | 8998 | offset | number | 是 | 要写入的数据在此Ashmem对象关联的内存区间的起始位置 | 8999 9000**返回值:** 9001 9002 | 类型 | 说明 | 9003 | ------- | ----------------------------------------------------------------------------- | 9004 | boolean | true:如果数据写入成功,false:在其他情况下,如数据写入越界或未获得写入权限。 | 9005 9006**示例:** 9007 9008 ```ts 9009 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024); 9010 let mapResult = ashmem.mapReadAndWriteAshmem(); 9011 console.info("RpcTest map ashmem result is " + mapResult); 9012 var ByteArrayVar = [1, 2, 3, 4, 5]; 9013 let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0); 9014 console.log("RpcTest: write to Ashmem result is : " + writeResult); 9015 ``` 9016 9017### readAshmem<sup>9+</sup> 9018 9019readAshmem(size: number, offset: number): number[] 9020 9021从此Ashmem对象关联的共享文件中读取数据。 9022 9023**系统能力**:SystemCapability.Communication.IPC.Core 9024 9025**参数:** 9026 9027 | 参数名 | 类型 | 必填 | 说明 | 9028 | ------ | ------ | ---- | -------------------------------------------------- | 9029 | size | number | 是 | 要读取的数据的大小。 | 9030 | offset | number | 是 | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 | 9031 9032**返回值:** 9033 9034 | 类型 | 说明 | 9035 | -------- | ---------------- | 9036 | number[] | 返回读取的数据。 | 9037 9038**错误码:** 9039 9040以下错误码的详细介绍请参见[ohos.rpc错误码](../errorcodes/errorcode-rpc.md) 9041 9042 | 错误码ID | 错误信息 | 9043 | -------- | -------- | 9044 | 1900004 | read from ashmem failed | 9045 9046**示例:** 9047 9048 ```ts 9049 let ashmem = rpc.Ashmem.create("ashmem", 1024*1024); 9050 ashmem.mapReadWriteAshmem(); 9051 var ByteArrayVar = [1, 2, 3, 4, 5]; 9052 ashmem.writeAshmem(ByteArrayVar, 5, 0); 9053 try { 9054 let readResult = ashmem.readAshmem(5, 0); 9055 console.log("RpcTest: read from Ashmem result is : " + readResult); 9056 } catch(error) { 9057 console.info("Rpc read from ashmem fail, errorCode " + error.code); 9058 console.info("Rpc read from ashmem fail, errorMessage " + error.message); 9059 } 9060 ``` 9061 9062### readFromAshmem<sup>8+(deprecated)</sup> 9063 9064>从API version 9 开始不再维护,建议使用[readAshmem](#readashmem9)类替代。 9065 9066readFromAshmem(size: number, offset: number): number[] 9067 9068从此Ashmem对象关联的共享文件中读取数据。 9069 9070**系统能力**:SystemCapability.Communication.IPC.Core 9071 9072**参数:** 9073 9074 | 参数名 | 类型 | 必填 | 说明 | 9075 | ------ | ------ | ---- | -------------------------------------------------- | 9076 | size | number | 是 | 要读取的数据的大小。 | 9077 | offset | number | 是 | 要读取的数据在此Ashmem对象关联的内存区间的起始位置 | 9078 9079**返回值:** 9080 9081 | 类型 | 说明 | 9082 | -------- | ---------------- | 9083 | number[] | 返回读取的数据。 | 9084 9085**示例:** 9086 9087 ``` ts 9088 let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024); 9089 let mapResult = ashmem.mapReadAndWriteAshmem(); 9090 console.info("RpcTest map ashmem result is " + mapResult); 9091 var ByteArrayVar = [1, 2, 3, 4, 5]; 9092 let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0); 9093 console.log("RpcTest: write to Ashmem result is : " + writeResult); 9094 let readResult = ashmem.readFromAshmem(5, 0); 9095 console.log("RpcTest: read to Ashmem result is : " + readResult); 9096 ``` 9097 9098## 获取context 9099 9100**示例:** 9101 9102 ```ts 9103 import Ability from '@ohos.app.ability.UIAbility'; 9104 9105 export default class MainAbility extends Ability { 9106 onCreate(want, launchParam) { 9107 console.log("[Demo] MainAbility onCreate"); 9108 globalThis.context = this.context; 9109 } 9110 onDestroy() { 9111 console.log("[Demo] MainAbility onDestroy"); 9112 } 9113 onWindowStageCreate(windowStage) { 9114 // Main window is created, set main page for this ability 9115 console.log("[Demo] MainAbility onWindowStageCreate"); 9116 } 9117 onWindowStageDestroy() { 9118 // Main window is destroyed, release UI related resources 9119 console.log("[Demo] MainAbility onWindowStageDestroy"); 9120 } 9121 onForeground() { 9122 // Ability has brought to foreground 9123 console.log("[Demo] MainAbility onForeground"); 9124 } 9125 onBackground() { 9126 // Ability has back to background 9127 console.log("[Demo] MainAbility onBackground"); 9128 } 9129 }; 9130 ``` 9131 9132