進(jìn)程間通信能力

2024-01-23 17:01 更新

本模塊提供進(jìn)程間通信能力,包括設(shè)備內(nèi)的進(jìn)程間通信(IPC)和設(shè)備間的進(jìn)程間通信(RPC),前者基于Binder驅(qū)動,后者基于軟總線驅(qū)動。

說明
  • 本模塊首批接口從API version 7開始支持。后續(xù)版本的新增接口,采用上角標(biāo)單獨標(biāo)記接口的起始版本。

  • 本模塊從API version 9開始支持異常返回功能。

導(dǎo)入模塊

  1. import rpc from '@ohos.rpc';

ErrorCode9+

從API version 9起,IPC支持異常返回功能。錯誤碼對應(yīng)數(shù)值及含義如下。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

名稱

說明

CHECK_PARAM_ERROR

401

檢查參數(shù)失敗。

OS_MMAP_ERROR

1900001

執(zhí)行系統(tǒng)調(diào)用mmap失敗。

OS_IOCTL_ERROR

1900002

在共享內(nèi)存文件描述符上執(zhí)行系統(tǒng)調(diào)用ioctl失敗。

WRITE_TO_ASHMEM_ERROR

1900003

向共享內(nèi)存寫數(shù)據(jù)失敗。

READ_FROM_ASHMEM_ERROR

1900004

從共享內(nèi)存讀數(shù)據(jù)失敗。

ONLY_PROXY_OBJECT_PERMITTED_ERROR

1900005

只有proxy對象允許該操作。

ONLY_REMOTE_OBJECT_PERMITTED_ERROR

1900006

只有remote對象允許該操作。

COMMUNICATION_ERROR

1900007

和遠(yuǎn)端對象進(jìn)行進(jìn)程間通信失敗。

PROXY_OR_REMOTE_OBJECT_INVALID_ERROR

1900008

非法的代理對象或者遠(yuǎn)端對象。

WRITE_DATA_TO_MESSAGE_SEQUENCE_ERROR

1900009

向MessageSequence寫數(shù)據(jù)失敗。

READ_DATA_FROM_MESSAGE_SEQUENCE_ERROR

1900010

讀取MessageSequence數(shù)據(jù)失敗。

PARCEL_MEMORY_ALLOC_ERROR

1900011

序列化過程中內(nèi)存分配失敗。

CALL_JS_METHOD_ERROR

1900012

執(zhí)行JS回調(diào)方法失敗。

OS_DUP_ERROR

1900013

執(zhí)行系統(tǒng)調(diào)用dup失敗。

MessageSequence9+

在RPC或IPC過程中,發(fā)送方可以使用MessageSequence提供的寫方法,將待發(fā)送的數(shù)據(jù)以特定格式寫入該對象。接收方可以使用MessageSequence提供的讀方法從該對象中讀取特定格式的數(shù)據(jù)。數(shù)據(jù)格式包括:基礎(chǔ)類型及數(shù)組、IPC對象、接口描述符和自定義序列化對象。

create

static create(): MessageSequence

靜態(tài)方法,創(chuàng)建MessageSequence對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

MessageSequence

返回創(chuàng)建的MessageSequence對象。

示例:

  1. let data = rpc.MessageSequence.create();
  2. console.log("RpcClient: data is " + data);

reclaim

reclaim(): void

釋放不再使用的MessageSequence對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

示例:

  1. let reply = rpc.MessageSequence.create();
  2. reply.reclaim();

writeRemoteObject

writeRemoteObject(object: IRemoteObject): void

序列化遠(yuǎn)程對象并將其寫入MessageSequence對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

object

IRemoteObject

要序列化并寫入MessageSequence的遠(yuǎn)程對象。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900008

proxy or remote object is invalid

1900009

write data to message sequence failed

示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. }
  6. let data = rpc.MessageSequence.create();
  7. let testRemoteObject = new TestRemoteObject("testObject");
  8. try {
  9. data.writeRemoteObject(testRemoteObject);
  10. } catch(error) {
  11. console.info("Rpc write remote object fail, errorCode " + error.code);
  12. console.info("Rpc write remote object fail, errorMessage " + error.message);
  13. }

readRemoteObject

readRemoteObject(): IRemoteObject

從MessageSequence讀取遠(yuǎn)程對象。此方法用于反序列化MessageSequence對象以生成IRemoteObject。遠(yuǎn)程對象按寫入MessageSequence的順序讀取。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

IRemoteObject

讀取到的遠(yuǎn)程對象。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900008

proxy or remote object is invalid

1900010

read data from message sequence failed

示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. }
  6. let data = rpc.MessageSequence.create();
  7. let testRemoteObject = new TestRemoteObject("testObject");
  8. try {
  9. data.writeRemoteObject(testRemoteObject);
  10. let proxy = data.readRemoteObject();
  11. } catch(error) {
  12. console.info("Rpc write remote object fail, errorCode " + error.code);
  13. console.info("Rpc write remote object fail, errorMessage " + error.message);
  14. }

writeInterfaceToken

writeInterfaceToken(token: string): void

將接口描述符寫入MessageSequence對象,遠(yuǎn)端對象可使用該信息校驗本次通信。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

token

string

字符串類型描述符。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeInterfaceToken("aaa");
  4. } catch(error) {
  5. console.info("rpc write interface fail, errorCode " + error.code);
  6. console.info("rpc write interface fail, errorMessage " + error.message);
  7. }

readInterfaceToken

readInterfaceToken(): string

從MessageSequence對象中讀取接口描述符,接口描述符按寫入MessageSequence的順序讀取,本地對象可使用該信息檢驗本次通信。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回讀取到的接口描述符。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteRequest(code, data, reply, option) {
  3. try {
  4. let interfaceToken = data.readInterfaceToken();
  5. console.log("RpcServer: interfaceToken is " + interfaceToken);
  6. } catch(error) {
  7. console.info("RpcServer: read interfaceToken failed, errorCode " + error.code);
  8. console.info("RpcServer: read interfaceToken failed, errorMessage " + error.message);
  9. }
  10. return true;
  11. }
  12. }

getSize

getSize(): number

獲取當(dāng)前創(chuàng)建的MessageSequence對象的數(shù)據(jù)大小。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

獲取的MessageSequence實例的數(shù)據(jù)大小。以字節(jié)為單位。

示例:

  1. let data = rpc.MessageSequence.create();
  2. let size = data.getSize();
  3. console.log("RpcClient: size is " + size);

getCapacity

getCapacity(): number

獲取當(dāng)前MessageSequence對象的容量大小。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

獲取的MessageSequence實例的容量大小。以字節(jié)為單位。

示例:

  1. let data = rpc.MessageSequence.create();
  2. let result = data.getCapacity();
  3. console.log("RpcClient: capacity is " + result);

setSize

setSize(size: number): void

設(shè)置MessageSequence對象中包含的數(shù)據(jù)大小。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

size

number

MessageSequence實例的數(shù)據(jù)大小。以字節(jié)為單位。

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.setSize(16);
  4. console.log("RpcClient: setSize is " + data.getSize());
  5. } catch(error) {
  6. console.info("rpc set size of MessageSequence fail, errorCode " + error.code);
  7. console.info("rpc set size of MessageSequence fail, errorMessage " + error.message);
  8. }

setCapacity

setCapacity(size: number): void

設(shè)置MessageSequence對象的存儲容量。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

size

number

MessageSequence實例的存儲容量。以字節(jié)為單位。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900011

parcel memory alloc failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.setCapacity(100);
  4. console.log("RpcClient: setCapacity is " + data.getCapacity());
  5. } catch(error) {
  6. console.info("rpc memory alloc fail, errorCode " + error.code);
  7. console.info("rpc memory alloc fail, errorMessage " + error.message);
  8. }

getWritableBytes

getWritableBytes(): number

獲取MessageSequence的可寫字節(jié)空間大小。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

獲取到的MessageSequence實例的可寫字節(jié)空間。以字節(jié)為單位。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteRequest(code, data, reply, option) {
  3. let getWritableBytes = data.getWritableBytes();
  4. console.log("RpcServer: getWritableBytes is " + getWritableBytes);
  5. return true;
  6. }
  7. }

getReadableBytes

getReadableBytes(): number

獲取MessageSequence的可讀字節(jié)空間。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

獲取到的MessageSequence實例的可讀字節(jié)空間。以字節(jié)為單位。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteRequest(code, data, reply, option) {
  3. let result = data.getReadableBytes();
  4. console.log("RpcServer: getReadableBytes is " + result);
  5. return true;
  6. }
  7. }

getReadPosition

getReadPosition(): number

獲取MessageSequence的讀位置。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回MessageSequence實例中的當(dāng)前讀取位置。

示例:

  1. let data = rpc.MessageSequence.create();
  2. let readPos = data.getReadPosition();
  3. console.log("RpcClient: readPos is " + readPos);

getWritePosition

getWritePosition(): number

獲取MessageSequence的寫位置。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回MessageSequence實例中的當(dāng)前寫入位置。

示例:

  1. let data = rpc.MessageSequence.create();
  2. data.writeInt(10);
  3. let bwPos = data.getWritePosition();
  4. console.log("RpcClient: bwPos is " + bwPos);

rewindRead

rewindRead(pos: number): void

重新偏移讀取位置到指定的位置。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

pos

number

開始讀取數(shù)據(jù)的目標(biāo)位置。

示例:

  1. let data = rpc.MessageSequence.create();
  2. data.writeInt(12);
  3. data.writeString("sequence");
  4. let number = data.readInt();
  5. console.log("RpcClient: number is " + number);
  6. try {
  7. data.rewindRead(0);
  8. } catch(error) {
  9. console.info("rpc rewind read data fail, errorCode " + error.code);
  10. console.info("rpc rewind read data fail, errorMessage " + error.message);
  11. }
  12. let number2 = data.readInt();
  13. console.log("RpcClient: rewindRead is " + number2);

rewindWrite

rewindWrite(pos: number): void

重新偏移寫位置到指定的位置。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

pos

number

開始寫入數(shù)據(jù)的目標(biāo)位置。

示例:

  1. let data = rpc.MessageSequence.create();
  2. data.writeInt(4);
  3. try {
  4. data.rewindWrite(0);
  5. } catch(error) {
  6. console.info("rpc rewind read data fail, errorCode " + error.code);
  7. console.info("rpc rewind read data fail, errorMessage " + error.message);
  8. }
  9. data.writeInt(5);
  10. let number = data.readInt();
  11. console.log("RpcClient: rewindWrite is: " + number);

writeByte

writeByte(val: number): void

將字節(jié)值寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的字節(jié)值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeByte(2);
  4. } catch(error) {
  5. console.info("rpc write byte fail, errorCode " + error.code);
  6. console.info("rpc write byte fail, errorMessage" + error.message);
  7. }

readByte

readByte(): number

從MessageSequence實例讀取字節(jié)值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回字節(jié)值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeByte(2);
  4. } catch(error) {
  5. console.info("rpc write byte fail, errorCode " + error.code);
  6. console.info("rpc write byte fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let ret = data.readByte();
  10. console.log("RpcClient: readByte is: " + ret);
  11. } catch(error) {
  12. console.info("rpc write byte fail, errorCode " + error.code);
  13. console.info("rpc write byte fail, errorMessage" + error.message);
  14. }

writeShort

writeShort(val: number): void

將短整數(shù)值寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的短整數(shù)值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeShort(8);
  4. } catch(error) {
  5. console.info("rpc write short fail, errorCode " + error.code);
  6. console.info("rpc write short fail, errorMessage" + error.message);
  7. }

readShort

readShort(): number

從MessageSequence實例讀取短整數(shù)值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回短整數(shù)值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeShort(8);
  4. } catch(error) {
  5. console.info("rpc write short fail, errorCode " + error.code);
  6. console.info("rpc write short fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let ret = data.readShort();
  10. console.log("RpcClient: readByte is: " + ret);
  11. } catch(error) {
  12. console.info("rpc read short fail, errorCode " + error.code);
  13. console.info("rpc read short fail, errorMessage" + error.message);
  14. }

writeInt

writeInt(val: number): void

將整數(shù)值寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的整數(shù)值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeInt(10);
  4. } catch(error) {
  5. console.info("rpc write int fail, errorCode " + error.code);
  6. console.info("rpc write int fail, errorMessage" + error.message);
  7. }

readInt

readInt(): number

從MessageSequence實例讀取整數(shù)值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回整數(shù)值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeInt(10);
  4. } catch(error) {
  5. console.info("rpc write int fail, errorCode " + error.code);
  6. console.info("rpc write int fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let ret = data.readInt();
  10. console.log("RpcClient: readInt is " + ret);
  11. } catch(error) {
  12. console.info("rpc read int fail, errorCode " + error.code);
  13. console.info("rpc read int fail, errorMessage" + error.message);
  14. }

writeLong

writeLong(val: number): void

將長整數(shù)值寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的長整數(shù)值

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeLong(10000);
  4. } catch(error) {
  5. console.info("rpc write long fail, errorCode " + error.code);
  6. console.info("rpc write long fail, errorMessage" + error.message);
  7. }

readLong

readLong(): number

從MessageSequence實例中讀取長整數(shù)值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回長整數(shù)值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeLong(10000);
  4. } catch(error) {
  5. console.info("rpc write long fail, errorCode " + error.code);
  6. console.info("rpc write long fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let ret = data.readLong();
  10. console.log("RpcClient: readLong is " + ret);
  11. } catch(error) {
  12. console.info("rpc read long fail, errorCode " + error.code);
  13. console.info("rpc read long fail, errorMessage" + error.message);
  14. }

writeFloat

writeFloat(val: number): void

將浮點值寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的浮點值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeFloat(1.2);
  4. } catch(error) {
  5. console.info("rpc write float fail, errorCode " + error.code);
  6. console.info("rpc write float fail, errorMessage" + error.message);
  7. }

readFloat

readFloat(): number

從MessageSequence實例中讀取浮點值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回浮點值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeFloat(1.2);
  4. } catch(error) {
  5. console.info("rpc write float fail, errorCode " + error.code);
  6. console.info("rpc write float fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let ret = data.readFloat();
  10. console.log("RpcClient: readFloat is " + ret);
  11. } catch(error) {
  12. console.info("rpc read float fail, errorCode " + error.code);
  13. console.info("rpc read float fail, errorMessage" + error.message);
  14. }

writeDouble

writeDouble(val: number): void

將雙精度浮點值寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的雙精度浮點值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeDouble(10.2);
  4. } catch(error) {
  5. console.info("rpc read float fail, errorCode " + error.code);
  6. console.info("rpc read float fail, errorMessage" + error.message);
  7. }

readDouble

readDouble(): number

從MessageSequence實例讀取雙精度浮點值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回雙精度浮點值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeDouble(10.2);
  4. } catch(error) {
  5. console.info("rpc write double fail, errorCode " + error.code);
  6. console.info("rpc write double fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let ret = data.readDouble();
  10. console.log("RpcClient: readDouble is " + ret);
  11. } catch(error) {
  12. console.info("rpc read double fail, errorCode " + error.code);
  13. console.info("rpc read double fail, errorMessage" + error.message);
  14. }

writeBoolean

writeBoolean(val: boolean): void

將布爾值寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

boolean

要寫入的布爾值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeBoolean(false);
  4. } catch(error) {
  5. console.info("rpc write boolean fail, errorCode " + error.code);
  6. console.info("rpc write boolean fail, errorMessage" + error.message);
  7. }

readBoolean

readBoolean(): boolean

從MessageSequence實例讀取布爾值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean

返回讀取到的布爾值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeBoolean(false);
  4. } catch(error) {
  5. console.info("rpc write boolean fail, errorCode " + error.code);
  6. console.info("rpc write boolean fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let ret = data.readBoolean();
  10. console.log("RpcClient: readBoolean is " + ret);
  11. } catch(error) {
  12. console.info("rpc read boolean fail, errorCode " + error.code);
  13. console.info("rpc read boolean fail, errorMessage" + error.message);
  14. }

writeChar

writeChar(val: number): void

將單個字符值寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的單個字符值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeChar(97);
  4. } catch(error) {
  5. console.info("rpc write char fail, errorCode " + error.code);
  6. console.info("rpc write char fail, errorMessage" + error.message);
  7. }

readChar

readChar(): number

從MessageSequence實例中讀取單個字符值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回單個字符值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeChar(97);
  4. } catch(error) {
  5. console.info("rpc write char fail, errorCode " + error.code);
  6. console.info("rpc write char fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let ret = data.readChar();
  10. console.log("RpcClient: readChar is " + ret);
  11. } catch(error) {
  12. console.info("rpc read char fail, errorCode " + error.code);
  13. console.info("rpc read char fail, errorMessage" + error.message);
  14. }

writeString

writeString(val: string): void

將字符串值寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

string

要寫入的字符串值,其長度應(yīng)小于40960字節(jié)。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeString('abc');
  4. } catch(error) {
  5. console.info("rpc write string fail, errorCode " + error.code);
  6. console.info("rpc write string fail, errorMessage" + error.message);
  7. }

readString

readString(): string

從MessageSequence實例讀取字符串值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回字符串值。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeString('abc');
  4. } catch(error) {
  5. console.info("rpc write string fail, errorCode " + error.code);
  6. console.info("rpc write string fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let ret = data.readString();
  10. console.log("RpcClient: readString is " + ret);
  11. } catch(error) {
  12. console.info("rpc read string fail, errorCode " + error.code);
  13. console.info("rpc read string fail, errorMessage" + error.message);
  14. }

writeParcelable

writeParcelable(val: Parcelable): void

將自定義序列化對象寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

Parcelable

要寫入的可序列對象。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. class MySequenceable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageSequence) {
  9. messageSequence.writeInt(this.num);
  10. messageSequence.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageSequence) {
  14. this.num = messageSequence.readInt();
  15. this.str = messageSequence.readString();
  16. return true;
  17. }
  18. }
  19. let parcelable = new MySequenceable(1, "aaa");
  20. let data = rpc.MessageSequence.create();
  21. try {
  22. data.writeParcelable(parcelable);
  23. } catch(error) {
  24. console.info("rpc write parcelable fail, errorCode " + error.code);
  25. console.info("rpc write parcelable fail, errorMessage" + error.message);
  26. }

readParcelable

readParcelable(dataIn: Parcelable): void

從MessageSequence實例中讀取成員變量到指定的對象(dataIn)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

Parcelable

需要從MessageSequence讀取成員變量的對象。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

1900012

call js callback function failed

示例:

  1. class MySequenceable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageSequence) {
  9. messageSequence.writeInt(this.num);
  10. messageSequence.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageSequence) {
  14. this.num = messageSequence.readInt();
  15. this.str = messageSequence.readString();
  16. return true;
  17. }
  18. }
  19. let parcelable = new MySequenceable(1, "aaa");
  20. let data = rpc.MessageSequence.create();
  21. data.writeParcelable(parcelable);
  22. let ret = new MySequenceable(0, "");
  23. try {
  24. data.readParcelable(ret);
  25. }catch(error) {
  26. console.info("rpc read parcelable fail, errorCode " + error.code);
  27. console.info("rpc read parcelable fail, errorMessage" + error.message);
  28. }

writeByteArray

writeByteArray(byteArray: number[]): void

將字節(jié)數(shù)組寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

byteArray

number[]

要寫入的字節(jié)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. let ByteArrayVar = [1, 2, 3, 4, 5];
  3. try {
  4. data.writeByteArray(ByteArrayVar);
  5. } catch(error) {
  6. console.info("rpc write byteArray fail, errorCode " + error.code);
  7. console.info("rpc write byteArray fail, errorMessage" + error.message);
  8. }

readByteArray

readByteArray(dataIn: number[]): void

從MessageSequence實例讀取字節(jié)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的字節(jié)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. let ByteArrayVar = [1, 2, 3, 4, 5];
  3. try {
  4. data.writeByteArray(ByteArrayVar);
  5. } catch(error) {
  6. console.info("rpc write byteArray fail, errorCode " + error.code);
  7. console.info("rpc write byteArray fail, errorMessage" + error.message);
  8. }
  9. try {
  10. let array = new Array(5);
  11. data.readByteArray(array);
  12. } catch(error) {
  13. console.info("rpc write byteArray fail, errorCode " + error.code);
  14. console.info("rpc write byteArray fail, errorMessage" + error.message);
  15. }

readByteArray

readByteArray(): number[]

從MessageSequence實例中讀取字節(jié)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回字節(jié)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. let byteArrayVar = [1, 2, 3, 4, 5];
  3. try {
  4. data.writeByteArray(byteArrayVar);
  5. } catch(error) {
  6. console.info("rpc write byteArray fail, errorCode " + error.code);
  7. console.info("rpc write byteArray fail, errorMessage" + error.message);
  8. }
  9. try {
  10. let array = data.readByteArray();
  11. console.log("RpcClient: readByteArray is " + array);
  12. } catch(error) {
  13. console.info("rpc read byteArray fail, errorCode " + error.code);
  14. console.info("rpc read byteArray fail, errorMessage" + error.message);
  15. }

writeShortArray

writeShortArray(shortArray: number[]): void

將短整數(shù)數(shù)組寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

shortArray

number[]

要寫入的短整數(shù)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeShortArray([11, 12, 13]);
  4. } catch(error) {
  5. console.info("rpc read byteArray fail, errorCode " + error.code);
  6. console.info("rpc read byteArray fail, errorMessage" + error.message);
  7. }

readShortArray

readShortArray(dataIn: number[]): void

從MessageSequence實例中讀取短整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的短整數(shù)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeShortArray([11, 12, 13]);
  4. } catch(error) {
  5. console.info("rpc write shortArray fail, errorCode " + error.code);
  6. console.info("rpc write shortArray fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let array = new Array(3);
  10. data.readShortArray(array);
  11. } catch(error) {
  12. console.info("rpc read shortArray fail, errorCode " + error.code);
  13. console.info("rpc read shortArray fail, errorMessage" + error.message);
  14. }

readShortArray

readShortArray(): number[]

從MessageSequence實例中讀取短整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回短整數(shù)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeShortArray([11, 12, 13]);
  4. } catch(error) {
  5. console.info("rpc write shortArray fail, errorCode " + error.code);
  6. console.info("rpc write shortArray fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let array = data.readShortArray();
  10. console.log("RpcClient: readShortArray is " + array);
  11. } catch(error) {
  12. console.info("rpc read shortArray fail, errorCode " + error.code);
  13. console.info("rpc read shortArray fail, errorMessage" + error.message);
  14. }

writeIntArray

writeIntArray(intArray: number[]): void

將整數(shù)數(shù)組寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

intArray

number[]

要寫入的整數(shù)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeIntArray([100, 111, 112]);
  4. } catch(error) {
  5. console.info("rpc write intArray fail, errorCode " + error.code);
  6. console.info("rpc write intArray fail, errorMessage" + error.message);
  7. }

readIntArray

readIntArray(dataIn: number[]): void

從MessageSequence實例中讀取整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的整數(shù)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeIntArray([100, 111, 112]);
  4. } catch(error) {
  5. console.info("rpc write intArray fail, errorCode " + error.code);
  6. console.info("rpc write intArray fail, errorMessage" + error.message);
  7. }
  8. let array = new Array(3);
  9. try {
  10. data.readIntArray(array);
  11. } catch(error) {
  12. console.info("rpc read intArray fail, errorCode " + error.code);
  13. console.info("rpc read intArray fail, errorMessage" + error.message);
  14. }

readIntArray

readIntArray(): number[]

從MessageSequence實例中讀取整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回整數(shù)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeIntArray([100, 111, 112]);
  4. } catch(error) {
  5. console.info("rpc write intArray fail, errorCode " + error.code);
  6. console.info("rpc write intArray fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let array = data.readIntArray();
  10. console.log("RpcClient: readIntArray is " + array);
  11. } catch(error) {
  12. console.info("rpc read intArray fail, errorCode " + error.code);
  13. console.info("rpc read intArray fail, errorMessage" + error.message);
  14. }

writeLongArray

writeLongArray(longArray: number[]): void

將長整數(shù)數(shù)組寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

longArray

number[]

要寫入的長整數(shù)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeLongArray([1111, 1112, 1113]);
  4. }catch(error){
  5. console.info("rpc write longArray fail, errorCode " + error.code);
  6. console.info("rpc write longArray fail, errorMessage" + error.message);
  7. }

readLongArray

readLongArray(dataIn: number[]): void

從MessageSequence實例讀取的長整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的長整數(shù)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeLongArray([1111, 1112, 1113]);
  4. } catch(error) {
  5. console.info("rpc write longArray fail, errorCode " + error.code);
  6. console.info("rpc write longArray fail, errorMessage" + error.message);
  7. }
  8. let array = new Array(3);
  9. try {
  10. data.readLongArray(array);
  11. } catch(error) {
  12. console.info("rpc read longArray fail, errorCode " + error.code);
  13. console.info("rpc read longArray fail, errorMessage" + error.message);
  14. }

readLongArray

readLongArray(): number[]

從MessageSequence實例中讀取所有的長整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回長整數(shù)數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeLongArray([1111, 1112, 1113]);
  4. } catch(error) {
  5. console.info("rpc write longArray fail, errorCode " + error.code);
  6. console.info("rpc write longArray fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let array = data.readLongArray();
  10. console.log("RpcClient: readLongArray is " + array);
  11. } catch(error) {
  12. console.info("rpc read longArray fail, errorCode " + error.code);
  13. console.info("rpc read longArray fail, errorMessage" + error.message);
  14. }

writeFloatArray

writeFloatArray(floatArray: number[]): void

將浮點數(shù)組寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

floatArray

number[]

要寫入的浮點數(shù)組。由于系統(tǒng)內(nèi)部對float類型的數(shù)據(jù)是按照double處理的,使用時對于數(shù)組所占的總字節(jié)數(shù)應(yīng)按照double類型來計算。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeFloatArray([1.2, 1.3, 1.4]);
  4. } catch(error) {
  5. console.info("rpc write floatArray fail, errorCode " + error.code);
  6. console.info("rpc write floatArray fail, errorMessage" + error.message);
  7. }

readFloatArray

readFloatArray(dataIn: number[]): void

從MessageSequence實例中讀取浮點數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的浮點數(shù)組。由于系統(tǒng)內(nèi)部對float類型的數(shù)據(jù)是按照double處理的,使用時對于數(shù)組所占的總字節(jié)數(shù)應(yīng)按照double類型來計算。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeFloatArray([1.2, 1.3, 1.4]);
  4. }catch(error){
  5. console.info("rpc write floatArray fail, errorCode " + error.code);
  6. console.info("rpc write floatArray fail, errorMessage" + error.message);
  7. }
  8. let array = new Array(3);
  9. try {
  10. data.readFloatArray(array);
  11. } catch(error) {
  12. console.info("rpc read floatArray fail, errorCode " + error.code);
  13. console.info("rpc read floatArray fail, errorMessage" + error.message);
  14. }

readFloatArray

readFloatArray(): number[]

從MessageSequence實例中讀取浮點數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回浮點數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeFloatArray([1.2, 1.3, 1.4]);
  4. } catch(error) {
  5. console.info("rpc write floatArray fail, errorCode " + error.code);
  6. console.info("rpc write floatArray fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let array = data.readFloatArray();
  10. console.log("RpcClient: readFloatArray is " + array);
  11. } catch(error) {
  12. console.info("rpc read floatArray fail, errorCode " + error.code);
  13. console.info("rpc read floatArray fail, errorMessage" + error.message);
  14. }

writeDoubleArray

writeDoubleArray(doubleArray: number[]): void

將雙精度浮點數(shù)組寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

doubleArray

number[]

要寫入的雙精度浮點數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeDoubleArray([11.1, 12.2, 13.3]);
  4. } catch(error) {
  5. console.info("rpc write doubleArray fail, errorCode " + error.code);
  6. console.info("rpc write doubleArray fail, errorMessage" + error.message);
  7. }

readDoubleArray

readDoubleArray(dataIn: number[]): void

從MessageSequence實例中讀取雙精度浮點數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的雙精度浮點數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeDoubleArray([11.1, 12.2, 13.3]);
  4. } catch(error) {
  5. console.info("rpc write doubleArray fail, errorCode " + error.code);
  6. console.info("rpc write doubleArray fail, errorMessage" + error.message);
  7. }
  8. let array = new Array(3);
  9. try {
  10. data.readDoubleArray(array);
  11. } catch(error) {
  12. console.info("rpc read doubleArray fail, errorCode " + error.code);
  13. console.info("rpc read doubleArray fail, errorMessage" + error.message);
  14. }

readDoubleArray

readDoubleArray(): number[]

從MessageSequence實例讀取所有雙精度浮點數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回雙精度浮點數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeDoubleArray([11.1, 12.2, 13.3]);
  4. } catch(error) {
  5. console.info("rpc write doubleArray fail, errorCode " + error.code);
  6. console.info("rpc write doubleArray fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let array = data.readDoubleArray();
  10. console.log("RpcClient: readDoubleArray is " + array);
  11. } catch(error) {
  12. console.info("rpc read doubleArray fail, errorCode " + error.code);
  13. console.info("rpc read doubleArray fail, errorMessage" + error.message);
  14. }

writeBooleanArray

writeBooleanArray(booleanArray: boolean[]): void

將布爾數(shù)組寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

booleanArray

boolean[]

要寫入的布爾數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeBooleanArray([false, true, false]);
  4. } catch(error) {
  5. console.info("rpc write booleanArray fail, errorCode " + error.code);
  6. console.info("rpc write booleanArray fail, errorMessage" + error.message);
  7. }

readBooleanArray

readBooleanArray(dataIn: boolean[]): void

從MessageSequence實例中讀取布爾數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

boolean[]

要讀取的布爾數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeBooleanArray([false, true, false]);
  4. } catch(error) {
  5. console.info("rpc write booleanArray fail, errorCode " + error.code);
  6. console.info("rpc write booleanArray fail, errorMessage" + error.message);
  7. }
  8. let array = new Array(3);
  9. try {
  10. data.readBooleanArray(array);
  11. } catch(error) {
  12. console.info("rpc read booleanArray fail, errorCode " + error.code);
  13. console.info("rpc read booleanArray fail, errorMessage" + error.message);
  14. }

readBooleanArray

readBooleanArray(): boolean[]

從MessageSequence實例中讀取所有布爾數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean[]

返回布爾數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeBooleanArray([false, true, false]);
  4. } catch(error) {
  5. console.info("rpc write booleanArray fail, errorCode " + error.code);
  6. console.info("rpc write booleanArray fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let array = data.readBooleanArray();
  10. console.log("RpcClient: readBooleanArray is " + array);
  11. } catch(error) {
  12. console.info("rpc read booleanArray fail, errorCode " + error.code);
  13. console.info("rpc read booleanArray fail, errorMessage" + error.message);
  14. }

writeCharArray

writeCharArray(charArray: number[]): void

將單個字符數(shù)組寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

charArray

number[]

要寫入的單個字符數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeCharArray([97, 98, 88]);
  4. } catch(error) {
  5. console.info("rpc write charArray fail, errorCode " + error.code);
  6. console.info("rpc write charArray fail, errorMessage" + error.message);
  7. }

readCharArray

readCharArray(dataIn: number[]): void

從MessageSequence實例中讀取單個字符數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的單個字符數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeCharArray([97, 98, 88]);
  4. } catch(error) {
  5. console.info("rpc write charArray fail, errorCode " + error.code);
  6. console.info("rpc write charArray fail, errorMessage" + error.message);
  7. }
  8. let array = new Array(3);
  9. try {
  10. data.readCharArray(array);
  11. } catch(error) {
  12. console.info("rpc read charArray fail, errorCode " + error.code);
  13. console.info("rpc read charArray fail, errorMessage" + error.message);
  14. }

readCharArray

readCharArray(): number[]

從MessageSequence實例讀取單個字符數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回單個字符數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeCharArray([97, 98, 88]);
  4. } catch(error) {
  5. console.info("rpc write charArray fail, errorCode " + error.code);
  6. console.info("rpc write charArray fail, errorMessage" + error.message);
  7. }
  8. let array = new Array(3);
  9. try {
  10. let array = data.readCharArray();
  11. console.log("RpcClient: readCharArray is " + array);
  12. } catch(error) {
  13. console.info("rpc read charArray fail, errorCode " + error.code);
  14. console.info("rpc read charArray fail, errorMessage" + error.message);
  15. }

writeStringArray

writeStringArray(stringArray: string[]): void

將字符串?dāng)?shù)組寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

stringArray

string[]

要寫入的字符串?dāng)?shù)組,數(shù)組單個元素的長度應(yīng)小于40960字節(jié)。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeStringArray(["abc", "def"]);
  4. } catch(error) {
  5. console.info("rpc write stringArray fail, errorCode " + error.code);
  6. console.info("rpc write stringArray fail, errorMessage" + error.message);
  7. }

readStringArray

readStringArray(dataIn: string[]): void

從MessageSequence實例讀取字符串?dāng)?shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

string[]

要讀取的字符串?dāng)?shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeStringArray(["abc", "def"]);
  4. } catch(error) {
  5. console.info("rpc write stringArray fail, errorCode " + error.code);
  6. console.info("rpc write stringArray fail, errorMessage" + error.message);
  7. }
  8. let array = new Array(2);
  9. try {
  10. data.readStringArray(array);
  11. } catch(error) {
  12. console.info("rpc read stringArray fail, errorCode " + error.code);
  13. console.info("rpc read stringArray fail, errorMessage" + error.message);
  14. }

readStringArray

readStringArray(): string[]

從MessageSequence實例讀取字符串?dāng)?shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string[]

返回字符串?dāng)?shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let data = rpc.MessageSequence.create();
  2. try {
  3. data.writeStringArray(["abc", "def"]);
  4. } catch(error) {
  5. console.info("rpc write stringArray fail, errorCode " + error.code);
  6. console.info("rpc write stringArray fail, errorMessage" + error.message);
  7. }
  8. try {
  9. let array = data.readStringArray();
  10. console.log("RpcClient: readStringArray is " + array);
  11. } catch(error) {
  12. console.info("rpc read stringArray fail, errorCode " + error.code);
  13. console.info("rpc read stringArray fail, errorMessage" + error.message);
  14. }

writeNoException

writeNoException(): void

向MessageSequence寫入“指示未發(fā)生異?!钡男畔ⅰ?/p>

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. onRemoteRequest(code, data, reply, option) {
  6. if (code === 1) {
  7. console.log("RpcServer: onRemoteRequest called");
  8. try {
  9. reply.writeNoException();
  10. } catch(error) {
  11. console.info("rpc write no exception fail, errorCode " + error.code);
  12. console.info("rpc write no exception fail, errorMessage" + error.message);
  13. }
  14. return true;
  15. } else {
  16. console.log("RpcServer: unknown code: " + code);
  17. return false;
  18. }
  19. }
  20. }

readException

readException(): void

從MessageSequence中讀取異常。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的sendMessageRequest接口方法發(fā)送消息

  1. let option = new rpc.MessageOption();
  2. let data = rpc.MessageSequence.create();
  3. let reply = rpc.MessageSequence.create();
  4. data.writeInt(1);
  5. data.writeString("hello");
  6. proxy.sendMessageRequest(1, data, reply, option)
  7. .then(function(errCode) {
  8. if (errCode === 0) {
  9. console.log("sendMessageRequest got result");
  10. try {
  11. reply.readException();
  12. } catch(error) {
  13. console.info("rpc read exception fail, errorCode " + error.code);
  14. console.info("rpc read no exception fail, errorMessage" + error.message);
  15. }
  16. let msg = reply.readString();
  17. console.log("RPCTest: reply msg: " + msg);
  18. } else {
  19. console.log("RPCTest: sendMessageRequest failed, errCode: " + errCode);
  20. }
  21. }).catch(function(e) {
  22. console.log("RPCTest: sendMessageRequest got exception: " + e.message);
  23. }).finally (() => {
  24. console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
  25. data.reclaim();
  26. reply.reclaim();
  27. });

writeParcelableArray

writeParcelableArray(parcelableArray: Parcelable[]): void

將可序列化對象數(shù)組寫入MessageSequence實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

parcelableArray

Parcelable[]

要寫入的可序列化對象數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. class MyParcelable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageSequence) {
  9. messageSequence.writeInt(this.num);
  10. messageSequence.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageSequence) {
  14. this.num = messageSequence.readInt();
  15. this.str = messageSequence.readString();
  16. return true;
  17. }
  18. }
  19. let parcelable = new MyParcelable(1, "aaa");
  20. let parcelable2 = new MyParcelable(2, "bbb");
  21. let parcelable3 = new MyParcelable(3, "ccc");
  22. let a = [parcelable, parcelable2, parcelable3];
  23. let data = rpc.MessageSequence.create();
  24. try {
  25. data.writeParcelableArray(a);
  26. } catch(error) {
  27. console.info("rpc write parcelable array fail, errorCode " + error.code);
  28. console.info("rpc write parcelable array fail, errorMessage" + error.message);
  29. }

readParcelableArray

readParcelableArray(parcelableArray: Parcelable[]): void

從MessageSequence實例讀取可序列化對象數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

parcelableArray

Parcelable[]

要讀取的可序列化對象數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

1900012

call js callback function failed

示例:

  1. class MyParcelable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageSequence) {
  9. messageSequence.writeInt(this.num);
  10. messageSequence.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageSequence) {
  14. this.num = messageSequence.readInt();
  15. this.str = messageSequence.readString();
  16. return true;
  17. }
  18. }
  19. let parcelable = new MyParcelable(1, "aaa");
  20. let parcelable2 = new MyParcelable(2, "bbb");
  21. let parcelable3 = new MyParcelable(3, "ccc");
  22. let a = [parcelable, parcelable2, parcelable3];
  23. let data = rpc.MessageSequence.create();
  24. let result = data.writeParcelableArray(a);
  25. console.log("RpcClient: writeParcelableArray is " + result);
  26. let b = [new MyParcelable(0, ""), new MyParcelable(0, ""), new MyParcelable(0, "")];
  27. try {
  28. data.readParcelableArray(b);
  29. } catch(error) {
  30. console.info("rpc read parcelable array fail, errorCode " + error.code);
  31. console.info("rpc read parcelable array fail, errorMessage" + error.message);
  32. }
  33. data.readParcelableArray(b);

writeRemoteObjectArray

writeRemoteObjectArray(objectArray: IRemoteObject[]): void

將IRemoteObject對象數(shù)組寫入MessageSequence。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

objectArray

IRemoteObject[]

要寫入MessageSequence的IRemoteObject對象數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. this.modifyLocalInterface(this, descriptor);
  5. }
  6. asObject(): rpc.IRemoteObject {
  7. return this;
  8. }
  9. }
  10. let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
  11. let data = rpc.MessageSequence.create();
  12. let result = data.writeRemoteObjectArray(a);
  13. try {
  14. data.writeRemoteObjectArray(a);
  15. } catch(error) {
  16. console.info("rpc write remote object array fail, errorCode " + error.code);
  17. console.info("rpc write remote object array fail, errorMessage" + error.message);
  18. }
  19. console.log("RpcClient: writeRemoteObjectArray is " + result);

readRemoteObjectArray

readRemoteObjectArray(objects: IRemoteObject[]): void

從MessageSequence讀取IRemoteObject對象數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

objects

IRemoteObject[]

從MessageSequence讀取的IRemoteObject對象數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. this.modifyLocalInterface(this, descriptor);
  10. }
  11. asObject(): rpc.IRemoteObject {
  12. return this;
  13. }
  14. }
  15. let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
  16. let data = rpc.MessageSequence.create();
  17. data.writeRemoteObjectArray(a);
  18. let b = new Array(3);
  19. try {
  20. data.readRemoteObjectArray(b);
  21. } catch(error) {
  22. console.info("rpc read remote object array fail, errorCode " + error.code);
  23. console.info("rpc read remote object array fail, errorMessage" + error.message);
  24. }
  25. data.readRemoteObjectArray(b);

readRemoteObjectArray

readRemoteObjectArray(): IRemoteObject[]

從MessageSequence讀取IRemoteObject對象數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

IRemoteObject[]

返回IRemoteObject對象數(shù)組。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. this.modifyLocalInterface(this, descriptor);
  5. }
  6. asObject(): rpc.IRemoteObject {
  7. return this;
  8. }
  9. }
  10. let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
  11. let data = rpc.MessageSequence.create();
  12. data.writeRemoteObjectArray(a);
  13. try {
  14. let b = data.readRemoteObjectArray();
  15. console.log("RpcClient: readRemoteObjectArray is " + b);
  16. } catch(error) {
  17. console.info("rpc read remote object array fail, errorCode " + error.code);
  18. console.info("rpc read remote object array fail, errorMessage" + error.message);
  19. }

closeFileDescriptor9+

static closeFileDescriptor(fd: number): void

靜態(tài)方法,關(guān)閉給定的文件描述符。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

fd

number

要關(guān)閉的文件描述符。

示例:

  1. import fileio from '@ohos.fileio';
  2. let filePath = "path/to/file";
  3. let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  4. try {
  5. rpc.MessageSequence.closeFileDescriptor(fd);
  6. } catch(error) {
  7. console.info("rpc close file descriptor fail, errorCode " + error.code);
  8. console.info("rpc close file descriptor fail, errorMessage" + error.message);
  9. }

dupFileDescriptor

static dupFileDescriptor(fd: number) :number

靜態(tài)方法,復(fù)制給定的文件描述符。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

fd

number

表示已存在的文件描述符。

返回值:

類型

說明

number

返回新的文件描述符。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900013

call os dup function failed

示例:

  1. import fileio from '@ohos.fileio';
  2. let filePath = "path/to/file";
  3. let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  4. try {
  5. let newFd = rpc.MessageSequence.dupFileDescriptor(fd);
  6. } catch(error) {
  7. console.info("rpc dup file descriptor fail, errorCode " + error.code);
  8. console.info("rpc dup file descriptor fail, errorMessage" + error.message);
  9. }

containFileDescriptors

containFileDescriptors(): boolean

檢查此MessageSequence對象是否包含文件描述符。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean

true:包含文件描述符,false:不包含文件描述符。

示例:

  1. import fileio from '@ohos.fileio';
  2. let sequence = new rpc.MessageSequence();
  3. let filePath = "path/to/file";
  4. let r1 = sequence.containFileDescriptors();
  5. let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  6. try {
  7. sequence.writeFileDescriptor(fd);
  8. } catch(error) {
  9. console.info("rpc write file descriptor fail, errorCode " + error.code);
  10. console.info("rpc write file descriptor fail, errorMessage" + error.message);
  11. }
  12. try {
  13. let containFD = sequence.containFileDescriptors();
  14. console.log("RpcTest: sequence after write fd containFd result is : " + containFD);
  15. } catch(error) {
  16. console.info("rpc contain file descriptor fail, errorCode " + error.code);
  17. console.info("rpc contain file descriptor fail, errorMessage" + error.message);
  18. }

writeFileDescriptor

writeFileDescriptor(fd: number): void

寫入文件描述符到MessageSequence。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

fd

number

文件描述符。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. import fileio from '@ohos.fileio';
  2. let sequence = new rpc.MessageSequence();
  3. let filePath = "path/to/file";
  4. let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  5. try {
  6. sequence.writeFileDescriptor(fd);
  7. } catch(error) {
  8. console.info("rpc write file descriptor fail, errorCode " + error.code);
  9. console.info("rpc write file descriptor fail, errorMessage" + error.message);
  10. }

readFileDescriptor

readFileDescriptor(): number

從MessageSequence中讀取文件描述符。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回文件描述符。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. import fileio from '@ohos.fileio';
  2. let sequence = new rpc.MessageSequence();
  3. let filePath = "path/to/file";
  4. let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  5. try {
  6. sequence.writeFileDescriptor(fd);
  7. } catch(error) {
  8. console.info("rpc write file descriptor fail, errorCode " + error.code);
  9. console.info("rpc write file descriptor fail, errorMessage" + error.message);
  10. }
  11. try {
  12. let readFD = sequence.readFileDescriptor();
  13. } catch(error) {
  14. console.info("rpc read file descriptor fail, errorCode " + error.code);
  15. console.info("rpc read file descriptor fail, errorMessage" + error.message);
  16. }

writeAshmem

writeAshmem(ashmem: Ashmem): void

將指定的匿名共享對象寫入此MessageSequence。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

ashmem

Ashmem

要寫入MessageSequence的匿名共享對象。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900003

write to ashmem failed

示例:

  1. let sequence = new rpc.MessageSequence();
  2. let ashmem;
  3. try {
  4. ashmem = rpc.Ashmem.create("ashmem", 1024);
  5. } catch(error) {
  6. console.info("rpc create ashmem fail, errorCode " + error.code);
  7. console.info("rpc creat ashmem fail, errorMessage" + error.message);
  8. }
  9. try {
  10. sequence.writeAshmem(ashmem);
  11. } catch(error) {
  12. console.info("rpc write ashmem fail, errorCode " + error.code);
  13. console.info("rpc write ashmem fail, errorMessage" + error.message);
  14. }

readAshmem

readAshmem(): Ashmem

從MessageSequence讀取匿名共享對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

Ashmem

返回匿名共享對象。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900004

read from ashmem failed

示例:

  1. let sequence = new rpc.MessageSequence();
  2. let ashmem;
  3. try {
  4. ashmem = rpc.Ashmem.create("ashmem", 1024);
  5. } catch(error) {
  6. console.info("rpc create ashmem fail, errorCode " + error.code);
  7. console.info("rpc creat ashmem fail, errorMessage" + error.message);
  8. }
  9. try {
  10. sequence.writeAshmem(ashmem);
  11. } catch(error) {
  12. console.info("rpc write ashmem fail, errorCode " + error.code);
  13. console.info("rpc write ashmem fail, errorMessage" + error.message);
  14. }
  15. try {
  16. let readAshmem = sequence.readAshmem();
  17. console.log("RpcTest: read ashmem to result is : " + readAshmem);
  18. } catch(error) {
  19. console.info("rpc read ashmem fail, errorCode " + error.code);
  20. console.info("rpc read ashmem fail, errorMessage" + error.message);
  21. }

getRawDataCapacity

getRawDataCapacity(): number

獲取MessageSequence可以容納的最大原始數(shù)據(jù)量。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回MessageSequence可以容納的最大原始數(shù)據(jù)量,即128 Mb。

示例:

  1. let sequence = new rpc.MessageSequence();
  2. let result = sequence.getRawDataCapacity();
  3. console.log("RpcTest: sequence get RawDataCapacity result is : " + result);

writeRawData

writeRawData(rawData: number[], size: number): void

將原始數(shù)據(jù)寫入MessageSequence對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

rawData

number[]

要寫入的原始數(shù)據(jù)。

size

number

發(fā)送的原始數(shù)據(jù)大小,以字節(jié)為單位。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900009

write data to message sequence failed

示例:

  1. let sequence = new rpc.MessageSequence();
  2. let arr = [1, 2, 3, 4, 5];
  3. try {
  4. sequence.writeRawData(arr, arr.length);
  5. } catch(error) {
  6. console.info("rpc write rawdata fail, errorCode " + error.code);
  7. console.info("rpc write rawdata fail, errorMessage" + error.message);
  8. }

readRawData

readRawData(size: number): number[]

從MessageSequence讀取原始數(shù)據(jù)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

size

number

要讀取的原始數(shù)據(jù)的大小。

返回值:

類型

說明

number[]

返回原始數(shù)據(jù)(以字節(jié)為單位)。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900010

read data from message sequence failed

示例:

  1. let sequence = new rpc.MessageSequence();
  2. let arr = [1, 2, 3, 4, 5];
  3. try {
  4. sequence.writeRawData(arr, arr.length);
  5. } catch(error) {
  6. console.info("rpc write rawdata fail, errorCode " + error.code);
  7. console.info("rpc write rawdata fail, errorMessage" + error.message);
  8. }
  9. try {
  10. let result = sequence.readRawData(5);
  11. console.log("RpcTest: sequence read raw data result is : " + result);
  12. } catch(error) {
  13. console.info("rpc read rawdata fail, errorCode " + error.code);
  14. console.info("rpc read rawdata fail, errorMessage" + error.message);
  15. }

MessageParcel(deprecated)

從API version 9 開始不再維護(hù),建議使用MessageSequence類替代。

在RPC過程中,發(fā)送方可以使用MessageParcel提供的寫方法,將待發(fā)送的數(shù)據(jù)以特定格式寫入該對象。接收方可以使用MessageParcel提供的讀方法從該對象中讀取特定格式的數(shù)據(jù)。數(shù)據(jù)格式包括:基礎(chǔ)類型及數(shù)組、IPC對象、接口描述符和自定義序列化對象。

create

static create(): MessageParcel

靜態(tài)方法,創(chuàng)建MessageParcel對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

MessageParcel

返回創(chuàng)建的MessageParcel對象。

示例:

  1. let data = rpc.MessageParcel.create();
  2. console.log("RpcClient: data is " + data);

reclaim

reclaim(): void

釋放不再使用的MessageParcel對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

示例:

  1. let reply = rpc.MessageParcel.create();
  2. reply.reclaim();

writeRemoteObject

writeRemoteObject(object: IRemoteObject): boolean

序列化遠(yuǎn)程對象并將其寫入MessageParcel對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

object

IRemoteObject

要序列化并寫入MessageParcel的遠(yuǎn)程對象。

返回值:

類型

說明

boolean

true:操作成功,false:操作失敗。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  11. return true;
  12. }
  13. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  14. return true;
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. }
  20. let data = rpc.MessageParcel.create();
  21. let testRemoteObject = new TestRemoteObject("testObject");
  22. data.writeRemoteObject(testRemoteObject);

readRemoteObject

readRemoteObject(): IRemoteObject

從MessageParcel讀取遠(yuǎn)程對象。此方法用于反序列化MessageParcel對象以生成IRemoteObject。遠(yuǎn)程對象按寫入MessageParcel的順序讀取。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

IRemoteObject

讀取到的遠(yuǎn)程對象。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  11. return true;
  12. }
  13. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  14. return true;
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. }
  20. let data = rpc.MessageParcel.create();
  21. let testRemoteObject = new TestRemoteObject("testObject");
  22. data.writeRemoteObject(testRemoteObject);
  23. let proxy = data.readRemoteObject();

writeInterfaceToken

writeInterfaceToken(token: string): boolean

將接口描述符寫入MessageParcel對象,遠(yuǎn)端對象可使用該信息校驗本次通信。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

token

string

字符串類型描述符。

返回值:

類型

說明

boolean

true:操作成功,false:操作失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeInterfaceToken("aaa");
  3. console.log("RpcServer: writeInterfaceToken is " + result);

readInterfaceToken

readInterfaceToken(): string

從MessageParcel中讀取接口描述符,接口描述符按寫入MessageParcel的順序讀取,本地對象可使用該信息檢驗本次通信。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回讀取到的接口描述符。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let interfaceToken = data.readInterfaceToken();
  4. console.log("RpcServer: interfaceToken is " + interfaceToken);
  5. return true;
  6. }
  7. }

getSize

getSize(): number

獲取當(dāng)前MessageParcel的數(shù)據(jù)大小。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

獲取的MessageParcel的數(shù)據(jù)大小。以字節(jié)為單位。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let size = data.getSize();
  3. console.log("RpcClient: size is " + size);

getCapacity

getCapacity(): number

獲取當(dāng)前MessageParcel的容量。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

獲取的MessageParcel的容量大小。以字節(jié)為單位。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.getCapacity();
  3. console.log("RpcClient: capacity is " + result);

setSize

setSize(size: number): boolean

設(shè)置MessageParcel實例中包含的數(shù)據(jù)大小。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

size

number

MessageParcel實例的數(shù)據(jù)大小。以字節(jié)為單位。

返回值:

類型

說明

boolean

true:設(shè)置成功,false:設(shè)置失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let setSize = data.setSize(16);
  3. console.log("RpcClient: setSize is " + setSize);

setCapacity

setCapacity(size: number): boolean

設(shè)置MessageParcel實例的存儲容量。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

size

number

MessageParcel實例的存儲容量。以字節(jié)為單位。

返回值:

類型

說明

boolean

true:設(shè)置成功,false:設(shè)置失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.setCapacity(100);
  3. console.log("RpcClient: setCapacity is " + result);

getWritableBytes

getWritableBytes(): number

獲取MessageParcel的可寫字節(jié)空間。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

獲取到的MessageParcel的可寫字節(jié)空間。以字節(jié)為單位。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let getWritableBytes = data.getWritableBytes();
  4. console.log("RpcServer: getWritableBytes is " + getWritableBytes);
  5. return true;
  6. }
  7. }

getReadableBytes

getReadableBytes(): number

獲取MessageParcel的可讀字節(jié)空間。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

獲取到的MessageParcel的可讀字節(jié)空間。以字節(jié)為單位。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteRequest(code, data, reply, option) {
  3. let result = data.getReadableBytes();
  4. console.log("RpcServer: getReadableBytes is " + result);
  5. return true;
  6. }
  7. }

getReadPosition

getReadPosition(): number

獲取MessageParcel的讀位置。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回MessageParcel實例中的當(dāng)前讀取位置。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let readPos = data.getReadPosition();
  3. console.log("RpcClient: readPos is " + readPos);

getWritePosition

getWritePosition(): number

獲取MessageParcel的寫位置。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回MessageParcel實例中的當(dāng)前寫入位置。

示例:

  1. let data = rpc.MessageParcel.create();
  2. data.writeInt(10);
  3. let bwPos = data.getWritePosition();
  4. console.log("RpcClient: bwPos is " + bwPos);

rewindRead

rewindRead(pos: number): boolean

重新偏移讀取位置到指定的位置。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

pos

number

開始讀取數(shù)據(jù)的目標(biāo)位置。

返回值:

類型

說明

boolean

true:讀取位置發(fā)生更改,false:讀取位置未發(fā)生更改。

示例:

  1. let data = rpc.MessageParcel.create();
  2. data.writeInt(12);
  3. data.writeString("parcel");
  4. let number = data.readInt();
  5. console.log("RpcClient: number is " + number);
  6. data.rewindRead(0);
  7. let number2 = data.readInt();
  8. console.log("RpcClient: rewindRead is " + number2);

rewindWrite

rewindWrite(pos: number): boolean

重新偏移寫位置到指定的位置。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

pos

number

開始寫入數(shù)據(jù)的目標(biāo)位置。

返回值:

類型

說明

boolean

true:寫入位置發(fā)生更改,false:寫入位置未發(fā)生更改。

示例:

  1. let data = rpc.MessageParcel.create();
  2. data.writeInt(4);
  3. data.rewindWrite(0);
  4. data.writeInt(5);
  5. let number = data.readInt();
  6. console.log("RpcClient: rewindWrite is: " + number);

writeByte

writeByte(val: number): boolean

將字節(jié)值寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的字節(jié)值。

返回值:

類型

說明

boolean

寫入返回成功,否則返回false。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeByte(2);
  3. console.log("RpcClient: writeByte is: " + result);

readByte

readByte(): number

從MessageParcel實例讀取字節(jié)值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回字節(jié)值。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeByte(2);
  3. console.log("RpcClient: writeByte is: " + result);
  4. let ret = data.readByte();
  5. console.log("RpcClient: readByte is: " + ret);

writeShort

writeShort(val: number): boolean

將短整數(shù)值寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的短整數(shù)值。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeShort(8);
  3. console.log("RpcClient: writeShort is: " + result);

readShort

readShort(): number

從MessageParcel實例讀取短整數(shù)值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回短整數(shù)值。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeShort(8);
  3. console.log("RpcClient: writeShort is: " + result);
  4. let ret = data.readShort();
  5. console.log("RpcClient: readShort is: " + ret);

writeInt

writeInt(val: number): boolean

將整數(shù)值寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的整數(shù)值。

返回值:

類型

說明

boolean

寫入返回成功,否則返回false。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeInt(10);
  3. console.log("RpcClient: writeInt is " + result);

readInt

readInt(): number

從MessageParcel實例讀取整數(shù)值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回整數(shù)值。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeInt(10);
  3. console.log("RpcClient: writeInt is " + result);
  4. let ret = data.readInt();
  5. console.log("RpcClient: readInt is " + ret);

writeLong

writeLong(val: number): boolean

將長整數(shù)值寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的長整數(shù)值

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeLong(10000);
  3. console.log("RpcClient: writeLong is " + result);

readLong

readLong(): number

從MessageParcel實例中讀取長整數(shù)值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回長整數(shù)值。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeLong(10000);
  3. console.log("RpcClient: writeLong is " + result);
  4. let ret = data.readLong();
  5. console.log("RpcClient: readLong is " + ret);

writeFloat

writeFloat(val: number): boolean

將浮點值寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的浮點值。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeFloat(1.2);
  3. console.log("RpcClient: writeFloat is " + result);

readFloat

readFloat(): number

從MessageParcel實例中讀取浮點值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回浮點值。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeFloat(1.2);
  3. console.log("RpcClient: writeFloat is " + result);
  4. let ret = data.readFloat();
  5. console.log("RpcClient: readFloat is " + ret);

writeDouble

writeDouble(val: number): boolean

將雙精度浮點值寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的雙精度浮點值。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeDouble(10.2);
  3. console.log("RpcClient: writeDouble is " + result);

readDouble

readDouble(): number

從MessageParcel實例讀取雙精度浮點值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回雙精度浮點值。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeDouble(10.2);
  3. console.log("RpcClient: writeDouble is " + result);
  4. let ret = data.readDouble();
  5. console.log("RpcClient: readDouble is " + ret);

writeBoolean

writeBoolean(val: boolean): boolean

將布爾值寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

boolean

要寫入的布爾值。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeBoolean(false);
  3. console.log("RpcClient: writeBoolean is " + result);

readBoolean

readBoolean(): boolean

從MessageParcel實例讀取布爾值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean

返回讀取到的布爾值。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeBoolean(false);
  3. console.log("RpcClient: writeBoolean is " + result);
  4. let ret = data.readBoolean();
  5. console.log("RpcClient: readBoolean is " + ret);

writeChar

writeChar(val: number): boolean

將單個字符值寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

number

要寫入的單個字符值。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeChar(97);
  3. console.log("RpcClient: writeChar is " + result);

readChar

readChar(): number

從MessageParcel實例中讀取單個字符值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回單個字符值。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeChar(97);
  3. console.log("RpcClient: writeChar is " + result);
  4. let ret = data.readChar();
  5. console.log("RpcClient: readChar is " + ret);

writeString

writeString(val: string): boolean

將字符串值寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

string

要寫入的字符串值,其長度應(yīng)小于40960字節(jié)。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeString('abc');
  3. console.log("RpcClient: writeString is " + result);

readString

readString(): string

從MessageParcel實例讀取字符串值。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回字符串值。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeString('abc');
  3. console.log("RpcClient: writeString is " + result);
  4. let ret = data.readString();
  5. console.log("RpcClient: readString is " + ret);

writeSequenceable

writeSequenceable(val: Sequenceable): boolean

將自定義序列化對象寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

val

Sequenceable

要寫入的可序列對象。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. class MySequenceable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageParcel) {
  9. messageParcel.writeInt(this.num);
  10. messageParcel.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageParcel) {
  14. this.num = messageParcel.readInt();
  15. this.str = messageParcel.readString();
  16. return true;
  17. }
  18. }
  19. let sequenceable = new MySequenceable(1, "aaa");
  20. let data = rpc.MessageParcel.create();
  21. let result = data.writeSequenceable(sequenceable);
  22. console.log("RpcClient: writeSequenceable is " + result);

readSequenceable

readSequenceable(dataIn: Sequenceable): boolean

從MessageParcel實例中讀取成員變量到指定的對象(dataIn)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

Sequenceable

需要從MessageParcel讀取成員變量的對象。

返回值:

類型

說明

boolean

true:反序列化成功,false:反序列化失敗。

示例:

  1. class MySequenceable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageParcel) {
  9. messageParcel.writeInt(this.num);
  10. messageParcel.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageParcel) {
  14. this.num = messageParcel.readInt();
  15. this.str = messageParcel.readString();
  16. return true;
  17. }
  18. }
  19. let sequenceable = new MySequenceable(1, "aaa");
  20. let data = rpc.MessageParcel.create();
  21. let result = data.writeSequenceable(sequenceable);
  22. console.log("RpcClient: writeSequenceable is " + result);
  23. let ret = new MySequenceable(0, "");
  24. let result2 = data.readSequenceable(ret);
  25. console.log("RpcClient: writeSequenceable is " + result2);

writeByteArray

writeByteArray(byteArray: number[]): boolean

將字節(jié)數(shù)組寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

byteArray

number[]

要寫入的字節(jié)數(shù)組。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let ByteArrayVar = [1, 2, 3, 4, 5];
  3. let result = data.writeByteArray(ByteArrayVar);
  4. console.log("RpcClient: writeByteArray is " + result);

readByteArray

readByteArray(dataIn: number[]): void

從MessageParcel實例讀取字節(jié)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的字節(jié)數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let ByteArrayVar = [1, 2, 3, 4, 5];
  3. let result = data.writeByteArray(ByteArrayVar);
  4. console.log("RpcClient: writeByteArray is " + result);
  5. let array = new Array(5);
  6. data.readByteArray(array);

readByteArray

readByteArray(): number[]

從MessageParcel實例中讀取字節(jié)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回字節(jié)數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let ByteArrayVar = [1, 2, 3, 4, 5];
  3. let result = data.writeByteArray(ByteArrayVar);
  4. console.log("RpcClient: writeByteArray is " + result);
  5. let array = data.readByteArray();
  6. console.log("RpcClient: readByteArray is " + array);

writeShortArray

writeShortArray(shortArray: number[]): boolean

將短整數(shù)數(shù)組寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

shortArray

number[]

要寫入的短整數(shù)數(shù)組。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeShortArray([11, 12, 13]);
  3. console.log("RpcClient: writeShortArray is " + result);

readShortArray

readShortArray(dataIn: number[]): void

從MessageParcel實例中讀取短整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的短整數(shù)數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeShortArray([11, 12, 13]);
  3. console.log("RpcClient: writeShortArray is " + result);
  4. let array = new Array(3);
  5. data.readShortArray(array);

readShortArray

readShortArray(): number[]

從MessageParcel實例中讀取短整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回短整數(shù)數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeShortArray([11, 12, 13]);
  3. console.log("RpcClient: writeShortArray is " + result);
  4. let array = data.readShortArray();
  5. console.log("RpcClient: readShortArray is " + array);

writeIntArray

writeIntArray(intArray: number[]): boolean

將整數(shù)數(shù)組寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

intArray

number[]

要寫入的整數(shù)數(shù)組。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeIntArray([100, 111, 112]);
  3. console.log("RpcClient: writeIntArray is " + result);

readIntArray

readIntArray(dataIn: number[]): void

從MessageParcel實例中讀取整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的整數(shù)數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeIntArray([100, 111, 112]);
  3. console.log("RpcClient: writeIntArray is " + result);
  4. let array = new Array(3);
  5. data.readIntArray(array);

readIntArray

readIntArray(): number[]

從MessageParcel實例中讀取整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回整數(shù)數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeIntArray([100, 111, 112]);
  3. console.log("RpcClient: writeIntArray is " + result);
  4. let array = data.readIntArray();
  5. console.log("RpcClient: readIntArray is " + array);

writeLongArray

writeLongArray(longArray: number[]): boolean

將長整數(shù)數(shù)組寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

longArray

number[]

要寫入的長整數(shù)數(shù)組。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeLongArray([1111, 1112, 1113]);
  3. console.log("RpcClient: writeLongArray is " + result);

readLongArray

readLongArray(dataIn: number[]): void

從MessageParcel實例讀取長整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的長整數(shù)數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeLongArray([1111, 1112, 1113]);
  3. console.log("RpcClient: writeLongArray is " + result);
  4. let array = new Array(3);
  5. data.readLongArray(array);

readLongArray

readLongArray(): number[]

從MessageParcel實例中讀取長整數(shù)數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回長整數(shù)數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeLongArray([1111, 1112, 1113]);
  3. console.log("RpcClient: writeLongArray is " + result);
  4. let array = data.readLongArray();
  5. console.log("RpcClient: readLongArray is " + array);

writeFloatArray

writeFloatArray(floatArray: number[]): boolean

將浮點數(shù)組寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

floatArray

number[]

要寫入的浮點數(shù)組。由于系統(tǒng)內(nèi)部對float類型的數(shù)據(jù)是按照double處理的,使用時對于數(shù)組所占的總字節(jié)數(shù)應(yīng)按照double類型來計算。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeFloatArray([1.2, 1.3, 1.4]);
  3. console.log("RpcClient: writeFloatArray is " + result);

readFloatArray

readFloatArray(dataIn: number[]): void

從MessageParcel實例中讀取浮點數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的浮點數(shù)組。由于系統(tǒng)內(nèi)部對float類型的數(shù)據(jù)是按照double處理的,使用時對于數(shù)組所占的總字節(jié)數(shù)應(yīng)按照double類型來計算。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeFloatArray([1.2, 1.3, 1.4]);
  3. console.log("RpcClient: writeFloatArray is " + result);
  4. let array = new Array(3);
  5. data.readFloatArray(array);

readFloatArray

readFloatArray(): number[]

從MessageParcel實例中讀取浮點數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回浮點數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeFloatArray([1.2, 1.3, 1.4]);
  3. console.log("RpcClient: writeFloatArray is " + result);
  4. let array = data.readFloatArray();
  5. console.log("RpcClient: readFloatArray is " + array);

writeDoubleArray

writeDoubleArray(doubleArray: number[]): boolean

將雙精度浮點數(shù)組寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

doubleArray

number[]

要寫入的雙精度浮點數(shù)組。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
  3. console.log("RpcClient: writeDoubleArray is " + result);

readDoubleArray

readDoubleArray(dataIn: number[]): void

從MessageParcel實例中讀取雙精度浮點數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的雙精度浮點數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
  3. console.log("RpcClient: writeDoubleArray is " + result);
  4. let array = new Array(3);
  5. data.readDoubleArray(array);

readDoubleArray

readDoubleArray(): number[]

從MessageParcel實例讀取雙精度浮點數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回雙精度浮點數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeDoubleArray([11.1, 12.2, 13.3]);
  3. console.log("RpcClient: writeDoubleArray is " + result);
  4. let array = data.readDoubleArray();
  5. console.log("RpcClient: readDoubleArray is " + array);

writeBooleanArray

writeBooleanArray(booleanArray: boolean[]): boolean

將布爾數(shù)組寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

booleanArray

boolean[]

要寫入的布爾數(shù)組。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeBooleanArray([false, true, false]);
  3. console.log("RpcClient: writeBooleanArray is " + result);

readBooleanArray

readBooleanArray(dataIn: boolean[]): void

從MessageParcel實例中讀取布爾數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

boolean[]

要讀取的布爾數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeBooleanArray([false, true, false]);
  3. console.log("RpcClient: writeBooleanArray is " + result);
  4. let array = new Array(3);
  5. data.readBooleanArray(array);

readBooleanArray

readBooleanArray(): boolean[]

從MessageParcel實例中讀取布爾數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean[]

返回布爾數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeBooleanArray([false, true, false]);
  3. console.log("RpcClient: writeBooleanArray is " + result);
  4. let array = data.readBooleanArray();
  5. console.log("RpcClient: readBooleanArray is " + array);

writeCharArray

writeCharArray(charArray: number[]): boolean

將單個字符數(shù)組寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

charArray

number[]

要寫入的單個字符數(shù)組。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeCharArray([97, 98, 88]);
  3. console.log("RpcClient: writeCharArray is " + result);

readCharArray

readCharArray(dataIn: number[]): void

從MessageParcel實例中讀取單個字符數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

number[]

要讀取的單個字符數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeCharArray([97, 98, 99]);
  3. console.log("RpcClient: writeCharArray is " + result);
  4. let array = new Array(3);
  5. data.readCharArray(array);

readCharArray

readCharArray(): number[]

從MessageParcel實例讀取單個字符數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number[]

返回單個字符數(shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeCharArray([97, 98, 99]);
  3. console.log("RpcClient: writeCharArray is " + result);
  4. let array = data.readCharArray();
  5. console.log("RpcClient: readCharArray is " + array);

writeStringArray

writeStringArray(stringArray: string[]): boolean

將字符串?dāng)?shù)組寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

stringArray

string[]

要寫入的字符串?dāng)?shù)組,數(shù)組單個元素的長度應(yīng)小于40960字節(jié)。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeStringArray(["abc", "def"]);
  3. console.log("RpcClient: writeStringArray is " + result);

readStringArray

readStringArray(dataIn: string[]): void

從MessageParcel實例讀取字符串?dāng)?shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

string[]

要讀取的字符串?dāng)?shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeStringArray(["abc", "def"]);
  3. console.log("RpcClient: writeStringArray is " + result);
  4. let array = new Array(2);
  5. data.readStringArray(array);

readStringArray

readStringArray(): string[]

從MessageParcel實例讀取字符串?dāng)?shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string[]

返回字符串?dāng)?shù)組。

示例:

  1. let data = rpc.MessageParcel.create();
  2. let result = data.writeStringArray(["abc", "def"]);
  3. console.log("RpcClient: writeStringArray is " + result);
  4. let array = data.readStringArray();
  5. console.log("RpcClient: readStringArray is " + array);

writeNoException8+

writeNoException(): void

向MessageParcel寫入“指示未發(fā)生異常”的信息。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  11. return true;
  12. }
  13. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  14. return true;
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. onRemoteRequest(code, data, reply, option) {
  20. if (code === 1) {
  21. console.log("RpcServer: onRemoteRequest called");
  22. reply.writeNoException();
  23. return true;
  24. } else {
  25. console.log("RpcServer: unknown code: " + code);
  26. return false;
  27. }
  28. }
  29. }

readException8+

readException(): void

從MessageParcel中讀取異常。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的sendMessageRequest接口方法發(fā)送消息

  1. let option = new rpc.MessageOption();
  2. let data = rpc.MessageParcel.create();
  3. let reply = rpc.MessageParcel.create();
  4. data.writeInt(1);
  5. data.writeString("hello");
  6. proxy.sendMessageRequest(1, data, reply, option)
  7. .then(function(errCode) {
  8. if (errCode === 0) {
  9. console.log("sendMessageRequest got result");
  10. reply.readException();
  11. let msg = reply.readString();
  12. console.log("RPCTest: reply msg: " + msg);
  13. } else {
  14. console.log("RPCTest: sendMessageRequest failed, errCode: " + errCode);
  15. }
  16. }).catch(function(e) {
  17. console.log("RPCTest: sendMessageRequest got exception: " + e.message);
  18. }).finally (() => {
  19. console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
  20. data.reclaim();
  21. reply.reclaim();
  22. });

writeSequenceableArray

writeSequenceableArray(sequenceableArray: Sequenceable[]): boolean

將可序列化對象數(shù)組寫入MessageParcel實例。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

sequenceableArray

Sequenceable[]

要寫入的可序列化對象數(shù)組。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. class MySequenceable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageParcel) {
  9. messageParcel.writeInt(this.num);
  10. messageParcel.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageParcel) {
  14. this.num = messageParcel.readInt();
  15. this.str = messageParcel.readString();
  16. return true;
  17. }
  18. }
  19. let sequenceable = new MySequenceable(1, "aaa");
  20. let sequenceable2 = new MySequenceable(2, "bbb");
  21. let sequenceable3 = new MySequenceable(3, "ccc");
  22. let a = [sequenceable, sequenceable2, sequenceable3];
  23. let data = rpc.MessageParcel.create();
  24. let result = data.writeSequenceableArray(a);
  25. console.log("RpcClient: writeSequenceableArray is " + result);

readSequenceableArray8+

readSequenceableArray(sequenceableArray: Sequenceable[]): void

從MessageParcel實例讀取可序列化對象數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

sequenceableArray

Sequenceable[]

要讀取的可序列化對象數(shù)組。

示例:

  1. class MySequenceable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageParcel) {
  9. messageParcel.writeInt(this.num);
  10. messageParcel.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageParcel) {
  14. this.num = messageParcel.readInt();
  15. this.str = messageParcel.readString();
  16. return true;
  17. }
  18. }
  19. let sequenceable = new MySequenceable(1, "aaa");
  20. let sequenceable2 = new MySequenceable(2, "bbb");
  21. let sequenceable3 = new MySequenceable(3, "ccc");
  22. let a = [sequenceable, sequenceable2, sequenceable3];
  23. let data = rpc.MessageParcel.create();
  24. let result = data.writeSequenceableArray(a);
  25. console.log("RpcClient: writeSequenceableArray is " + result);
  26. let b = [new MySequenceable(0, ""), new MySequenceable(0, ""), new MySequenceable(0, "")];
  27. data.readSequenceableArray(b);

writeRemoteObjectArray8+

writeRemoteObjectArray(objectArray: IRemoteObject[]): boolean

將IRemoteObject對象數(shù)組寫入MessageParcel。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

objectArray

IRemoteObject[]

要寫入MessageParcel的IRemoteObject對象數(shù)組。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. this.attachLocalInterface(this, descriptor);
  10. }
  11. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  12. return true;
  13. }
  14. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  15. return true;
  16. }
  17. isObjectDead(): boolean {
  18. return false;
  19. }
  20. asObject(): rpc.IRemoteObject {
  21. return this;
  22. }
  23. }
  24. let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
  25. let data = rpc.MessageParcel.create();
  26. let result = data.writeRemoteObjectArray(a);
  27. console.log("RpcClient: writeRemoteObjectArray is " + result);

readRemoteObjectArray8+

readRemoteObjectArray(objects: IRemoteObject[]): void

從MessageParcel讀取IRemoteObject對象數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

objects

IRemoteObject[]

從MessageParcel讀取的IRemoteObject對象數(shù)組。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. this.attachLocalInterface(this, descriptor);
  10. }
  11. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  12. return true;
  13. }
  14. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  15. return true;
  16. }
  17. isObjectDead(): boolean {
  18. return false;
  19. }
  20. asObject(): rpc.IRemoteObject {
  21. return this;
  22. }
  23. }
  24. let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
  25. let data = rpc.MessageParcel.create();
  26. let result = data.writeRemoteObjectArray(a);
  27. let b = new Array(3);
  28. data.readRemoteObjectArray(b);

readRemoteObjectArray8+

readRemoteObjectArray(): IRemoteObject[]

從MessageParcel讀取IRemoteObject對象數(shù)組。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

IRemoteObject[]

返回IRemoteObject對象數(shù)組。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. this.attachLocalInterface(this, descriptor);
  10. }
  11. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  12. return true;
  13. }
  14. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  15. return true;
  16. }
  17. isObjectDead(): boolean {
  18. return false;
  19. }
  20. asObject(): rpc.IRemoteObject {
  21. return this;
  22. }
  23. }
  24. let a = [new TestRemoteObject("testObject1"), new TestRemoteObject("testObject2"), new TestRemoteObject("testObject3")];
  25. let data = rpc.MessageParcel.create();
  26. let result = data.writeRemoteObjectArray(a);
  27. console.log("RpcClient: readRemoteObjectArray is " + result);
  28. let b = data.readRemoteObjectArray();
  29. console.log("RpcClient: readRemoteObjectArray is " + b);

closeFileDescriptor8+

static closeFileDescriptor(fd: number): void

靜態(tài)方法,關(guān)閉給定的文件描述符。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

fd

number

要關(guān)閉的文件描述符。

示例:

  1. import fileio from '@ohos.fileio';
  2. let filePath = "path/to/file";
  3. let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  4. rpc.MessageParcel.closeFileDescriptor(fd);

dupFileDescriptor8+

static dupFileDescriptor(fd: number) :number

靜態(tài)方法,復(fù)制給定的文件描述符。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

fd

number

表示已存在的文件描述符。

返回值:

類型

說明

number

返回新的文件描述符。

示例:

  1. import fileio from '@ohos.fileio';
  2. let filePath = "path/to/file";
  3. let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  4. let newFd = rpc.MessageParcel.dupFileDescriptor(fd);

containFileDescriptors8+

containFileDescriptors(): boolean

檢查此MessageParcel對象是否包含文件描述符。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean

true:包含文件描述符,false:未包含文件描述符。

示例:

  1. import fileio from '@ohos.fileio';
  2. let parcel = new rpc.MessageParcel();
  3. let filePath = "path/to/file";
  4. let r1 = parcel.containFileDescriptors();
  5. let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  6. let writeResult = parcel.writeFileDescriptor(fd);
  7. console.log("RpcTest: parcel writeFd result is : " + writeResult);
  8. let containFD = parcel.containFileDescriptors();
  9. console.log("RpcTest: parcel after write fd containFd result is : " + containFD);

writeFileDescriptor8+

writeFileDescriptor(fd: number): boolean

寫入文件描述符到MessageParcel。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

fd

number

文件描述符。

返回值:

類型

說明

boolean

true:操作成功,false:操作失敗。

示例:

  1. import fileio from '@ohos.fileio';
  2. let parcel = new rpc.MessageParcel();
  3. let filePath = "path/to/file";
  4. let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  5. let writeResult = parcel.writeFileDescriptor(fd);
  6. console.log("RpcTest: parcel writeFd result is : " + writeResult);

readFileDescriptor8+

readFileDescriptor(): number

從MessageParcel中讀取文件描述符。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回文件描述符。

示例:

  1. import fileio from '@ohos.fileio';
  2. let parcel = new rpc.MessageParcel();
  3. let filePath = "path/to/file";
  4. let fd = fileio.openSync(filePath, 0o2| 0o100, 0o666);
  5. let writeResult = parcel.writeFileDescriptor(fd);
  6. let readFD = parcel.readFileDescriptor();
  7. console.log("RpcTest: parcel read fd is : " + readFD);

writeAshmem8+

writeAshmem(ashmem: Ashmem): boolean

將指定的匿名共享對象寫入此MessageParcel。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

ashmem

Ashmem

要寫入MessageParcel的匿名共享對象。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let parcel = new rpc.MessageParcel();
  2. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024);
  3. let isWriteSuccess = parcel.writeAshmem(ashmem);
  4. console.log("RpcTest: write ashmem to result is : " + isWriteSuccess);

readAshmem8+

readAshmem(): Ashmem

從MessageParcel讀取匿名共享對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

Ashmem

返回匿名共享對象。

示例:

  1. let parcel = new rpc.MessageParcel();
  2. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024);
  3. let isWriteSuccess = parcel.writeAshmem(ashmem);
  4. console.log("RpcTest: write ashmem to result is : " + isWriteSuccess);
  5. let readAshmem = parcel.readAshmem();
  6. console.log("RpcTest: read ashmem to result is : " + readAshmem);

getRawDataCapacity8+

getRawDataCapacity(): number

獲取MessageParcel可以容納的最大原始數(shù)據(jù)量。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回MessageParcel可以容納的最大原始數(shù)據(jù)量,即128 Mb。

示例:

  1. let parcel = new rpc.MessageParcel();
  2. let result = parcel.getRawDataCapacity();
  3. console.log("RpcTest: parcel get RawDataCapacity result is : " + result);

writeRawData8+

writeRawData(rawData: number[], size: number): boolean

將原始數(shù)據(jù)寫入MessageParcel對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

rawData

number[]

要寫入的原始數(shù)據(jù)。

size

number

發(fā)送的原始數(shù)據(jù)大小,以字節(jié)為單位。

返回值:

類型

說明

boolean

true:寫入成功,false:寫入失敗。

示例:

  1. let parcel = new rpc.MessageParcel();
  2. let arr = [1, 2, 3, 4, 5];
  3. let isWriteSuccess = parcel.writeRawData(arr, arr.length);
  4. console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess);

readRawData8+

readRawData(size: number): number[]

從MessageParcel讀取原始數(shù)據(jù)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

size

number

要讀取的原始數(shù)據(jù)的大小。

返回值:

類型

說明

number[]

返回原始數(shù)據(jù)(以字節(jié)為單位)。

示例:

  1. let parcel = new rpc.MessageParcel();
  2. let arr = [1, 2, 3, 4, 5];
  3. let isWriteSuccess = parcel.writeRawData(arr, arr.length);
  4. console.log("RpcTest: parcel write raw data result is : " + isWriteSuccess);
  5. let result = parcel.readRawData(5);
  6. console.log("RpcTest: parcel read raw data result is : " + result);

Parcelable9+

在進(jìn)程間通信(IPC)期間,將類的對象寫入MessageSequence并從MessageSequence中恢復(fù)它們。

marshalling

marshalling(dataOut: MessageSequence): boolean

將此可序列對象封送到MessageSequence中。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataOut

MessageSequence

可序列對象將被封送到的MessageSequence對象。

返回值:

類型

說明

boolean

true:封送成功,false:封送失敗。

示例:

 
  1. class MyParcelable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageSequence) {
  9. messageSequence.writeInt(this.num);
  10. messageSequence.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageSequence) {
  14. this.num = messageSequence.readInt();
  15. this.str = messageSequence.readString();
  16. return true;
  17. }
  18. }
  19. let parcelable = new MyParcelable(1, "aaa");
  20. let data = rpc.MessageSequence.create();
  21. let result = data.writeParcelable(parcelable);
  22. console.log("RpcClient: writeParcelable is " + result);
  23. let ret = new MyParcelable(0, "");
  24. let result2 = data.readParcelable(ret);
  25. console.log("RpcClient: readParcelable is " + result2);

unmarshalling

unmarshalling(dataIn: MessageSequence): boolean

從MessageSequence中解封此可序列對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

MessageSequence

已將可序列對象封送到其中的MessageSequence對象。

返回值:

類型

說明

boolean

true:反序列化成功,false:反序列化失敗。

示例:

  1. class MyParcelable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageSequence) {
  9. messageSequence.writeInt(this.num);
  10. messageSequence.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageSequence) {
  14. this.num = messageSequence.readInt();
  15. this.str = messageSequence.readString();
  16. return true;
  17. }
  18. }
  19. let parcelable = new MyParcelable(1, "aaa");
  20. let data = rpc.MessageSequence.create();
  21. let result = data.writeParcelable(parcelable);
  22. console.log("RpcClient: writeParcelable is " + result);
  23. let ret = new MyParcelable(0, "");
  24. let result2 = data.readParcelable(ret);
  25. console.log("RpcClient: readParcelable is " + result2);

Sequenceable(deprecated)

從API version 9 開始不再維護(hù),建議使用Parcelable類替代。

在進(jìn)程間通信(IPC)期間,將類的對象寫入MessageParcel并從MessageParcel中恢復(fù)它們。

marshalling

marshalling(dataOut: MessageParcel): boolean

將此可序列對象封送到MessageParcel中。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataOut

MessageParcel

可序列對象將被封送到的MessageParcel對象。

返回值:

類型

說明

boolean

true:封送成功,false:封送失敗。

示例:

 
  1. class MySequenceable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageParcel) {
  9. messageParcel.writeInt(this.num);
  10. messageParcel.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageParcel) {
  14. this.num = messageParcel.readInt();
  15. this.str = messageParcel.readString();
  16. return true;
  17. }
  18. }
  19. let sequenceable = new MySequenceable(1, "aaa");
  20. let data = rpc.MessageParcel.create();
  21. let result = data.writeSequenceable(sequenceable);
  22. console.log("RpcClient: writeSequenceable is " + result);
  23. let ret = new MySequenceable(0, "");
  24. let result2 = data.readSequenceable(ret);
  25. console.log("RpcClient: readSequenceable is " + result2);

unmarshalling

unmarshalling(dataIn: MessageParcel): boolean

從MessageParcel中解封此可序列對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

dataIn

MessageParcel

已將可序列對象封送到其中的MessageParcel對象。

返回值:

類型

說明

boolean

true:反序列化成功,false:反序列化失敗。

示例:

  1. class MySequenceable {
  2. num: number;
  3. str: string;
  4. constructor(num, str) {
  5. this.num = num;
  6. this.str = str;
  7. }
  8. marshalling(messageParcel) {
  9. messageParcel.writeInt(this.num);
  10. messageParcel.writeString(this.str);
  11. return true;
  12. }
  13. unmarshalling(messageParcel) {
  14. this.num = messageParcel.readInt();
  15. this.str = messageParcel.readString();
  16. return true;
  17. }
  18. }
  19. let sequenceable = new MySequenceable(1, "aaa");
  20. let data = rpc.MessageParcel.create();
  21. let result = data.writeSequenceable(sequenceable);
  22. console.log("RpcClient: writeSequenceable is " + result);
  23. let ret = new MySequenceable(0, "");
  24. let result2 = data.readSequenceable(ret);
  25. console.log("RpcClient: readSequenceable is " + result2);

IRemoteBroker

遠(yuǎn)端對象的代理持有者。用于獲取代理對象。

asObject

asObject(): IRemoteObject

需派生類實現(xiàn),獲取代理或遠(yuǎn)端對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

IRemoteObject

如果調(diào)用者是RemoteObject對象,則直接返回本身;如果調(diào)用者是RemoteProxy對象,則返回它的持有者IRemoteObject。

示例:

  1. class TestAbility extends rpc.RemoteObject {
  2. asObject() {
  3. return this;
  4. }
  5. }
  6. let remoteObject = new TestAbility("testObject").asObject();

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function (elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function (elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function () {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的asObject接口方法獲取代理或遠(yuǎn)端對象

  1. class TestProxy {
  2. remote: rpc.RemoteObject;
  3. constructor(remote) {
  4. this.remote = remote;
  5. }
  6. asObject() {
  7. return this.remote;
  8. }
  9. }
  10. let iRemoteObject = new TestProxy(proxy).asObject();

DeathRecipient

用于訂閱遠(yuǎn)端對象的死亡通知。當(dāng)被訂閱該通知的遠(yuǎn)端對象死亡時,本端可收到消息,調(diào)用onRemoteDied接口。遠(yuǎn)端對象死亡可以為遠(yuǎn)端對象所在進(jìn)程死亡,遠(yuǎn)端對象所在設(shè)備關(guān)機或重啟,當(dāng)遠(yuǎn)端對象與本端對象屬于不同設(shè)備時,也可為遠(yuǎn)端對象離開組網(wǎng)時。

onRemoteDied

onRemoteDied(): void

在成功添加死亡通知訂閱后,當(dāng)遠(yuǎn)端對象死亡時,將自動調(diào)用本方法。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }

RequestResult9+

發(fā)送請求的響應(yīng)結(jié)果。

系統(tǒng)能力:以下各項對應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.IPC.Core。

名稱

類型

可讀

可寫

說明

errCode

number

錯誤碼。

code

number

消息代碼。

data

MessageSequence

發(fā)送給對端進(jìn)程的MessageSequence對象。

reply

MessageSequence

對端進(jìn)程返回的MessageSequence對象。

SendRequestResult8+(deprecated)

從API version 9 開始不再維護(hù),建議使用RequestResult類替代。

發(fā)送請求的響應(yīng)結(jié)果。

系統(tǒng)能力:以下各項對應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.IPC.Core。

名稱

類型

可讀

可寫

說明

errCode

number

錯誤碼。

code

number

消息代碼。

data

MessageParcel

發(fā)送給對端進(jìn)程的MessageParcel對象。

reply

MessageParcel

對端進(jìn)程返回的MessageParcel對象。

IRemoteObject

該接口可用于查詢或獲取接口描述符、添加或刪除死亡通知、轉(zhuǎn)儲對象狀態(tài)到特定文件、發(fā)送消息。

getLocalInterface9+

getLocalInterface(descriptor: string): IRemoteBroker

查詢接口描述符的字符串。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

descriptor

string

接口描述符的字符串。

返回值:

類型

說明

IRemoteBroker

返回綁定到指定接口描述符的IRemoteBroker對象。

queryLocalInterface(deprecated)

從API version 9 開始不再維護(hù),建議使用getLocalInterface類替代。

queryLocalInterface(descriptor: string): IRemoteBroker

查詢接口描述符的字符串。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

descriptor

string

接口描述符的字符串。

返回值:

類型

說明

IRemoteBroker

返回綁定到指定接口描述符的IRemoteBroker對象。

sendRequest(deprecated)

從API version 9 開始不再維護(hù),建議使用sendMessageRequest類替代。

sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageParcel消息。如果為選項設(shè)置了異步模式,則期約立即兌現(xiàn),reply報文里沒有內(nèi)容。如果為選項設(shè)置了同步模式,則期約將在sendRequest返回時兌現(xiàn),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageParcel

保存待發(fā)送數(shù)據(jù)的 MessageParcel對象。

reply

MessageParcel

接收應(yīng)答數(shù)據(jù)的MessageParcel對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

返回值:

類型

說明

boolean

true:發(fā)送成功,false:發(fā)送失敗。

sendRequest8+(deprecated)

從API version 9 開始不再維護(hù),建議使用sendMessageRequest類替代。

sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise<SendRequestResult>

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageParcel消息。如果為選項設(shè)置了異步模式,則期約立即兌現(xiàn),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則期約將在sendRequest返回時兌現(xiàn),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageParcel

保存待發(fā)送數(shù)據(jù)的 MessageParcel對象。

reply

MessageParcel

接收應(yīng)答數(shù)據(jù)的MessageParcel對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

返回值:

類型

說明

Promise<SendRequestResult>

返回一個期約,兌現(xiàn)值是sendRequestResult實例。

sendMessageRequest9+

sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise<RequestResult>

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageSequence消息。如果為選項設(shè)置了異步模式,則期約立即兌現(xiàn),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則期約將在sendMessageRequest返回時兌現(xiàn),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageSequence

保存待發(fā)送數(shù)據(jù)的 MessageSequence對象。

reply

MessageSequence

接收應(yīng)答數(shù)據(jù)的MessageSequence對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

返回值:

類型

說明

Promise<RequestResult>

返回一個期約,兌現(xiàn)值是requestResult實例。

sendMessageRequest9+

sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback<RequestResult>): void

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageSequence消息。如果為選項設(shè)置了異步模式,則立即收到回調(diào),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則將在sendRequest返回時收到回調(diào),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageSequence

保存待發(fā)送數(shù)據(jù)的 MessageSequence對象。

reply

MessageSequence

接收應(yīng)答數(shù)據(jù)的MessageSequence對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

callback

AsyncCallback<RequestResult>

接收發(fā)送結(jié)果的回調(diào)。

sendRequest8+(deprecated)

從API version 9 開始不再維護(hù),建議使用sendMessageRequest類替代。

sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback<SendRequestResult>): void

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageParcel消息。如果為選項設(shè)置了異步模式,則立即收到回調(diào),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則將在sendRequest返回時收到回調(diào),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageParcel

保存待發(fā)送數(shù)據(jù)的 MessageParcel對象。

reply

MessageParcel

接收應(yīng)答數(shù)據(jù)的MessageParcel對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

callback

AsyncCallback<SendRequestResult>

接收發(fā)送結(jié)果的回調(diào)。

registerDeathRecipient9+

registerDeathRecipient(recipient: DeathRecipient, flags: number): void

注冊用于接收遠(yuǎn)程對象死亡通知的回調(diào)。如果與RemoteProxy對象匹配的遠(yuǎn)程對象進(jìn)程死亡,則調(diào)用此方法。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

recipient

DeathRecipient

要注冊的回調(diào)。

flags

number

死亡通知標(biāo)志。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900008

proxy or remote object is invalid

addDeathrecipient(deprecated)

從API version 9 開始不再維護(hù),建議使用registerDeathRecipient類替代。

addDeathRecipient(recipient: DeathRecipient, flags: number): boolean

注冊用于接收遠(yuǎn)程對象死亡通知的回調(diào)。如果與RemoteProxy對象匹配的遠(yuǎn)程對象進(jìn)程死亡,則調(diào)用此方法。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

recipient

DeathRecipient

要注冊的回調(diào)。

flags

number

死亡通知標(biāo)志。

返回值:

類型

說明

boolean

true:回調(diào)注冊成功,false:回調(diào)注冊失敗。

unregisterDeathRecipient9+

unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void

注銷用于接收遠(yuǎn)程對象死亡通知的回調(diào)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

recipient

DeathRecipient

要注銷的回調(diào)。

flags

number

死亡通知標(biāo)志。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900008

proxy or remote object is invalid

removeDeathRecipient(deprecated)

從API version 9 開始不再維護(hù),建議使用unregisterDeathRecipient類替代。

removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean

注銷用于接收遠(yuǎn)程對象死亡通知的回調(diào)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

recipient

DeathRecipient

要注銷的回調(diào)。

flags

number

死亡通知標(biāo)志。

返回值:

類型

說明

boolean

true:回調(diào)注銷成功,false:回調(diào)注銷失敗。

getDescriptor9+

getDescriptor(): string

獲取對象的接口描述符,接口描述符為字符串。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回接口描述符。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900008

proxy or remote object is invalid

getInterfaceDescriptor(deprecated)

從API version 9 開始不再維護(hù),建議使用getDescriptor類替代。

getInterfaceDescriptor(): string

獲取對象的接口描述符,接口描述符為字符串。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回接口描述符。

isObjectDead

isObjectDead(): boolean

檢查當(dāng)前對象是否死亡。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean

true:對象死亡,false:對象未死亡。

RemoteProxy

實現(xiàn)IRemoteObject代理對象。

系統(tǒng)能力:以下各項對應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.IPC.Core。

名稱

說明

PING_TRANSACTION

1599098439 (0x5f504e47)

內(nèi)部指令碼,用于測試IPC服務(wù)正常。

DUMP_TRANSACTION

1598311760 (0x5f444d50)

內(nèi)部指令碼,獲取Binder內(nèi)部狀態(tài)。

INTERFACE_TRANSACTION

1598968902 (0x5f4e5446)

內(nèi)部指令碼,獲取對端接口描述符。

MIN_TRANSACTION_ID

1 (0x00000001)

最小有效指令碼。

MAX_TRANSACTION_ID

16777215 (0x00FFFFFF)

最大有效指令碼。

sendRequest(deprecated)

從API version 9 開始不再維護(hù),建議使用sendMessageRequest類替代。

sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageParcel消息。如果為選項設(shè)置了異步模式,則期約立即兌現(xiàn),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則期約將在sendRequest返回時兌現(xiàn),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageParcel

保存待發(fā)送數(shù)據(jù)的 MessageParcel對象。

reply

MessageParcel

接收應(yīng)答數(shù)據(jù)的MessageParcel對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

返回值:

類型

說明

boolean

true:發(fā)送成功,false:發(fā)送失敗。

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的sendRequest接口方法發(fā)送消息

  1. let option = new rpc.MessageOption();
  2. let data = rpc.MessageParcel.create();
  3. let reply = rpc.MessageParcel.create();
  4. data.writeInt(1);
  5. data.writeString("hello");
  6. let ret: boolean = proxy.sendRequest(1, data, reply, option);
  7. if (ret) {
  8. console.log("sendRequest got result");
  9. let msg = reply.readString();
  10. console.log("RPCTest: reply msg: " + msg);
  11. } else {
  12. console.log("RPCTest: sendRequest failed");
  13. }
  14. console.log("RPCTest: sendRequest ends, reclaim parcel");
  15. data.reclaim();
  16. reply.reclaim();

sendMessageRequest9+

sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise<RequestResult>

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageSequence消息。如果為選項設(shè)置了異步模式,則期約立即兌現(xiàn),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則期約將在sendMessageRequest返回時兌現(xiàn),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageSequence

保存待發(fā)送數(shù)據(jù)的 MessageSequence對象。

reply

MessageSequence

接收應(yīng)答數(shù)據(jù)的MessageSequence對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

返回值:

類型

說明

Promise<RequestResult>

返回一個期約,兌現(xiàn)值是requestResult實例。

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的sendMessageRequest接口方法發(fā)送消息

  1. let option = new rpc.MessageOption();
  2. let data = rpc.MessageSequence.create();
  3. let reply = rpc.MessageSequence.create();
  4. data.writeInt(1);
  5. data.writeString("hello");
  6. proxy.sendMessageRequest(1, data, reply, option)
  7. .then(function(result) {
  8. if (result.errCode === 0) {
  9. console.log("sendMessageRequest got result");
  10. result.reply.readException();
  11. let msg = result.reply.readString();
  12. console.log("RPCTest: reply msg: " + msg);
  13. } else {
  14. console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode);
  15. }
  16. }).catch(function(e) {
  17. console.log("RPCTest: sendMessageRequest got exception: " + e.message);
  18. }).finally (() => {
  19. console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
  20. data.reclaim();
  21. reply.reclaim();
  22. });

sendRequest8+(deprecated)

從API version 9 開始不再維護(hù),建議使用sendMessageRequest類替代。

sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise<SendRequestResult>

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageParcel消息。如果為選項設(shè)置了異步模式,則期約立即兌現(xiàn),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則期約將在sendRequest返回時兌現(xiàn),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageParcel

保存待發(fā)送數(shù)據(jù)的 MessageParcel對象。

reply

MessageParcel

接收應(yīng)答數(shù)據(jù)的MessageParcel對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

返回值:

類型

說明

Promise<SendRequestResult>

返回一個期約,兌現(xiàn)值是sendRequestResult實例。

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的sendRequest接口方法發(fā)送消息

  1. let option = new rpc.MessageOption();
  2. let data = rpc.MessageParcel.create();
  3. let reply = rpc.MessageParcel.create();
  4. data.writeInt(1);
  5. data.writeString("hello");
  6. proxy.sendRequest(1, data, reply, option)
  7. .then(function(result) {
  8. if (result.errCode === 0) {
  9. console.log("sendRequest got result");
  10. result.reply.readException();
  11. let msg = result.reply.readString();
  12. console.log("RPCTest: reply msg: " + msg);
  13. } else {
  14. console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
  15. }
  16. }).catch(function(e) {
  17. console.log("RPCTest: sendRequest got exception: " + e.message);
  18. }).finally (() => {
  19. console.log("RPCTest: sendRequest ends, reclaim parcel");
  20. data.reclaim();
  21. reply.reclaim();
  22. });

sendMessageRequest9+

sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback<RequestResult>): void

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageSequence消息。如果為選項設(shè)置了異步模式,則立即收到回調(diào),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則將在sendMessageRequest返回后的某個時機執(zhí)行回調(diào),回復(fù)內(nèi)容在RequestResult的reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageSequence

保存待發(fā)送數(shù)據(jù)的 MessageSequence對象。

reply

MessageSequence

接收應(yīng)答數(shù)據(jù)的MessageSequence對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

callback

AsyncCallback<RequestResult>

接收發(fā)送結(jié)果的回調(diào)。

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. function sendRequestCallback(result) {
  20. if (result.errCode === 0) {
  21. console.log("sendRequest got result");
  22. result.reply.readException();
  23. let msg = result.reply.readString();
  24. console.log("RPCTest: reply msg: " + msg);
  25. } else {
  26. console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
  27. }
  28. console.log("RPCTest: sendRequest ends, reclaim parcel");
  29. result.data.reclaim();
  30. result.reply.reclaim();
  31. }
  32. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的sendMessageRequest接口方法發(fā)送消息

  1. let option = new rpc.MessageOption();
  2. let data = rpc.MessageSequence.create();
  3. let reply = rpc.MessageSequence.create();
  4. data.writeInt(1);
  5. data.writeString("hello");
  6. try {
  7. proxy.sendRequest(1, data, reply, option, sendRequestCallback);
  8. } catch(error) {
  9. console.info("rpc send sequence request fail, errorCode " + error.code);
  10. console.info("rpc send sequence request fail, errorMessage " + error.message);
  11. }

sendRequest8+(deprecated)

從API version 9 開始不再維護(hù),建議使用sendMessageRequest類替代。

sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback<SendRequestResult>): void

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageParcel消息。如果為選項設(shè)置了異步模式,則立即收到回調(diào),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則將在sendRequest返回時收到回調(diào),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageParcel

保存待發(fā)送數(shù)據(jù)的 MessageParcel對象。

reply

MessageParcel

接收應(yīng)答數(shù)據(jù)的MessageParcel對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

callback

AsyncCallback<SendRequestResult>

接收發(fā)送結(jié)果的回調(diào)。

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. function sendRequestCallback(result) {
  20. if (result.errCode === 0) {
  21. console.log("sendRequest got result");
  22. result.reply.readException();
  23. let msg = result.reply.readString();
  24. console.log("RPCTest: reply msg: " + msg);
  25. } else {
  26. console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
  27. }
  28. console.log("RPCTest: sendRequest ends, reclaim parcel");
  29. result.data.reclaim();
  30. result.reply.reclaim();
  31. }
  32. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的sendRequest接口方法發(fā)送消息

  1. let option = new rpc.MessageOption();
  2. let data = rpc.MessageParcel.create();
  3. let reply = rpc.MessageParcel.create();
  4. data.writeInt(1);
  5. data.writeString("hello");
  6. proxy.sendRequest(1, data, reply, option, sendRequestCallback);

getLocalInterface9+

getLocalInterface(interface: string): IRemoteBroker

查詢并獲取當(dāng)前接口描述符對應(yīng)的本地接口對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

interface

string

需要查詢的接口描述符。

返回值:

類型

說明

IRemoteBroker

默認(rèn)返回Null,標(biāo)識該接口是一個代理側(cè)接口。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900006

only remote object permitted

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function (elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName":"com.ohos.server",
  17. "abilityName":"com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的getLocalInterface接口方法查詢接口對象

  1. try {
  2. let broker = proxy.getLocalInterface("testObject");
  3. console.log("RpcClient: getLocalInterface is " + broker);
  4. } catch(error) {
  5. console.info("rpc get local interface fail, errorCode " + error.code);
  6. console.info("rpc get local interface fail, errorMessage " + error.message);
  7. }

queryLocalInterface(deprecated)

從API version 9 開始不再維護(hù),建議使用getLocalInterface類替代。

queryLocalInterface(interface: string): IRemoteBroker

查詢并獲取當(dāng)前接口描述符對應(yīng)的本地接口對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

interface

string

需要查詢的接口描述符。

返回值:

類型

說明

IRemoteBroker

默認(rèn)返回Null,標(biāo)識該接口是一個代理側(cè)接口。

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function (elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName":"com.ohos.server",
  17. "abilityName":"com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的queryLocalInterface接口獲取接口對象

  1. let broker = proxy.queryLocalInterface("testObject");
  2. console.log("RpcClient: queryLocalInterface is " + broker);

registerDeathRecipient9+

registerDeathRecipient(recipient: DeathRecipient, flags: number): void

注冊用于接收遠(yuǎn)程對象死亡通知的回調(diào)。如果與RemoteProxy對象匹配的遠(yuǎn)程對象進(jìn)程死亡,則調(diào)用此方法。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

recipient

DeathRecipient

要注冊的回調(diào)。

flags

number

死亡通知標(biāo)志。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900008

proxy or remote object is invalid

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的registerDeathRecipient接口注冊死亡回調(diào)

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. let deathRecipient = new MyDeathRecipient();
  7. try {
  8. proxy.registerDeathRecipient(deathRecipient, 0);
  9. } catch(error) {
  10. console.info("proxy register deathRecipient fail, errorCode " + error.code);
  11. console.info("proxy register deathRecipient fail, errorMessage " + error.message);
  12. }

addDeathRecipient(deprecated)

從API version 9 開始不再維護(hù),建議使用registerDeathRecipient類替代。

addDeathRecipient(recipient: DeathRecipient, flags: number): boolean

注冊用于接收遠(yuǎn)程對象死亡通知的回調(diào),增加proxy對象上的死亡通知。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

recipient

DeathRecipient

收件人表示要注冊的回調(diào)。

flags

number

死亡通知標(biāo)志。保留參數(shù)。設(shè)置為0。

返回值:

類型

說明

boolean

true:回調(diào)注冊成功,false:回調(diào)注冊失敗。

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的addDeathRecipient接口方法新增死亡回調(diào)

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. let deathRecipient = new MyDeathRecipient();
  7. proxy.addDeathRecipient(deathRecipient, 0);

unregisterDeathRecipient9+

unregisterDeathRecipient(recipient: DeathRecipient, flags: number): void

注銷用于接收遠(yuǎn)程對象死亡通知的回調(diào)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

recipient

DeathRecipient

要注銷的回調(diào)。

flags

number

死亡通知標(biāo)志。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900008

proxy or remote object is invalid

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的unregisterDeathRecipient接口方法注銷死亡回調(diào)

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. let deathRecipient = new MyDeathRecipient();
  7. try {
  8. proxy.registerDeathRecipient(deathRecipient, 0);
  9. proxy.unregisterDeathRecipient(deathRecipient, 0);
  10. } catch(error) {
  11. console.info("proxy register deathRecipient fail, errorCode " + error.code);
  12. console.info("proxy register deathRecipient fail, errorMessage " + error.message);
  13. }

removeDeathRecipient(deprecated)

從API version 9 開始不再維護(hù),建議使用unregisterDeathRecipient類替代。

removeDeathRecipient(recipient: DeathRecipient, flags: number): boolean

注銷用于接收遠(yuǎn)程對象死亡通知的回調(diào)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

recipient

DeathRecipient

要注銷的死亡回調(diào)。

flags

number

死亡通知標(biāo)志。保留參數(shù)。設(shè)置為0。

返回值:

類型

說明

boolean

true:回調(diào)注銷成功,false:回調(diào)注銷失敗。

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的removeDeathRecipient接口方法去注冊死亡回調(diào)

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. let deathRecipient = new MyDeathRecipient();
  7. proxy.addDeathRecipient(deathRecipient, 0);
  8. proxy.removeDeathRecipient(deathRecipient, 0);

getDescriptor9+

getDescriptor(): string

獲取對象的接口描述符,接口描述符為字符串。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回接口描述符。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900008

proxy or remote object is invalid

1900007

communication failed

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的getDescriptor接口方法獲取對象的接口描述符

  1. try {
  2. let descriptor = proxy.getDescriptor();
  3. console.log("RpcClient: descriptor is " + descriptor);
  4. } catch(error) {
  5. console.info("rpc get interface descriptor fail, errorCode " + error.code);
  6. console.info("rpc get interface descriptor fail, errorMessage " + error.message);
  7. }

getInterfaceDescriptor(deprecated)

從API version 9 開始不再維護(hù),建議使用getDescriptor類替代。

getInterfaceDescriptor(): string

查詢當(dāng)前代理對象接口的描述符。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

當(dāng)前的接口描述符。

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);
  20. ```
  21. 上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的isObjectDead接口方法判斷當(dāng)前對象是否已經(jīng)死亡
  22. ```ts
  23. let descriptor = proxy.getInterfaceDescriptor();
  24. console.log("RpcClient: descriptor is " + descriptor);

isObjectDead

isObjectDead(): boolean

指示對應(yīng)的RemoteObject是否死亡。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean

true:對應(yīng)的對象已經(jīng)死亡,false:對應(yīng)的對象未死亡

示例:

獲取服務(wù)

  1. import FA from "@ohos.ability.featureAbility";
  2. let proxy;
  3. let connect = {
  4. onConnect: function(elementName, remoteProxy) {
  5. console.log("RpcClient: js onConnect called.");
  6. proxy = remoteProxy;
  7. },
  8. onDisconnect: function(elementName) {
  9. console.log("RpcClient: onDisconnect");
  10. },
  11. onFailed: function() {
  12. console.log("RpcClient: onFailed");
  13. }
  14. };
  15. let want = {
  16. "bundleName": "com.ohos.server",
  17. "abilityName": "com.ohos.server.MainAbility",
  18. };
  19. FA.connectAbility(want, connect);

上述onConnect回調(diào)函數(shù)中的proxy對象需要等ability異步連接成功后才會被賦值,然后才可調(diào)用proxy對象的isObjectDead接口方法判斷當(dāng)前對象是否已經(jīng)死亡

  1. let isDead = proxy.isObjectDead();
  2. console.log("RpcClient: isObjectDead is " + isDead);

MessageOption

公共消息選項(int標(biāo)志,int等待時間),使用標(biāo)志中指定的標(biāo)志構(gòu)造指定的MessageOption對象。

系統(tǒng)能力:以下各項對應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.IPC.Core。

名稱

說明

TF_SYNC

0

同步調(diào)用標(biāo)識。

TF_ASYNC

1

異步調(diào)用標(biāo)識。

TF_ACCEPT_FDS

0x10

指示sendMessageRequest9+接口可以返回文件描述符。

TF_WAIT_TIME

8

默認(rèn)等待時間(單位/秒)。

constructor9+

constructor(async?: boolean);

MessageOption構(gòu)造函數(shù)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

syncFlags

number

同步調(diào)用或異步調(diào)用標(biāo)志。默認(rèn)同步調(diào)用。

示例:

  1. class TestRemoteObject extends rpc.MessageOption {
  2. constructor(async) {
  3. super(async);
  4. }
  5. }

constructor

constructor(syncFlags?: number, waitTime?: number)

MessageOption構(gòu)造函數(shù)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

syncFlags

number

同步調(diào)用或異步調(diào)用標(biāo)志。默認(rèn)同步調(diào)用。

waitTime

number

調(diào)用rpc最長等待時間。默認(rèn) TF_WAIT_TIME。

示例:

  1. class TestRemoteObject extends rpc.MessageOption {
  2. constructor(syncFlags,waitTime) {
  3. super(syncFlags,waitTime);
  4. }
  5. }

isAsync9+

isAsync(): boolean;

獲取SendMessageRequest調(diào)用中確定同步或是異步的標(biāo)志。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean

true:同步調(diào)用成功,false:異步調(diào)用成功。

示例:

  1. let option = new rpc.MessageOption();
  2. let isAsync = option.isAsync();

setAsync9+

setAsync(async: boolean): void;

設(shè)置SendMessageRequest調(diào)用中確定同步或是異步的標(biāo)志。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

示例:

  1. let option = new rpc.MessageOption();
  2. let setAsync = option.setAsync(true);
  3. console.log("Set synchronization flag");

getFlags

getFlags(): number

獲取同步調(diào)用或異步調(diào)用標(biāo)志。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

調(diào)用成功返回同步調(diào)用或異步調(diào)用標(biāo)志。

示例:

  1. try {
  2. let option = new rpc.MessageOption();
  3. console.info("create object successfully.");
  4. let flog = option.getFlags();
  5. console.info("run getFlags success, flog is " + flog);
  6. option.setFlags(1)
  7. console.info("run setFlags success");
  8. let flog2 = option.getFlags();
  9. console.info("run getFlags success, flog2 is " + flog2);
  10. } catch (error) {
  11. console.info("error " + error);
  12. }

setFlags

setFlags(flags: number): void

設(shè)置同步調(diào)用或異步調(diào)用標(biāo)志。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

flags

number

同步調(diào)用或異步調(diào)用標(biāo)志。

示例:

  1. try {
  2. let option = new rpc.MessageOption();
  3. option.setFlags(1)
  4. console.info("run setFlags success");
  5. let flog = option.getFlags();
  6. console.info("run getFlags success, flog is " + flog);
  7. } catch (error) {
  8. console.info("error " + error);
  9. }

getWaitTime

getWaitTime(): number

獲取rpc調(diào)用的最長等待時間。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

rpc最長等待時間。

示例:

  1. try {
  2. let option = new rpc.MessageOption();
  3. let time = option.getWaitTime();
  4. console.info("run getWaitTime success");
  5. option.setWaitTime(16);
  6. let time2 = option.getWaitTime();
  7. console.info("run getWaitTime success, time is " + time);
  8. } catch (error) {
  9. console.info("error " + error);
  10. }

setWaitTime

setWaitTime(waitTime: number): void

設(shè)置rpc調(diào)用最長等待時間。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

waitTime

number

rpc調(diào)用最長等待時間。

示例:

  1. try {
  2. let option = new rpc.MessageOption();
  3. option.setWaitTime(16);
  4. let time = option.getWaitTime();
  5. console.info("run getWaitTime success, time is " + time);
  6. } catch (error) {
  7. console.info("error " + error);
  8. }

IPCSkeleton

用于獲取IPC上下文信息,包括獲取UID和PID、獲取本端和對端設(shè)備ID、檢查接口調(diào)用是否在同一設(shè)備上。

getContextObject

static getContextObject(): IRemoteObject

靜態(tài)方法,獲取系統(tǒng)能力的管理者。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

IRemoteObject

返回系統(tǒng)能力管理者。

示例:

  1. let samgr = rpc.IPCSkeleton.getContextObject();
  2. console.log("RpcServer: getContextObject result: " + samgr);

getCallingPid

static getCallingPid(): number

靜態(tài)方法,獲取調(diào)用者的PID。此方法由RemoteObject對象在onRemoteRequest方法中調(diào)用,不在IPC上下文環(huán)境(onRemoteRequest)中調(diào)用則返回本進(jìn)程的PID。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回調(diào)用者的PID。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let callerPid = rpc.IPCSkeleton.getCallingPid();
  4. console.log("RpcServer: getCallingPid result: " + callerPid);
  5. return true;
  6. }
  7. }

getCallingUid

static getCallingUid(): number

靜態(tài)方法,獲取調(diào)用者的UID。此方法由RemoteObject對象在onRemoteRequest方法中調(diào)用,不在IPC上下文環(huán)境(onRemoteRequest)中調(diào)用則返回本進(jìn)程的UID。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回調(diào)用者的UID。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let callerUid = rpc.IPCSkeleton.getCallingUid();
  4. console.log("RpcServer: getCallingUid result: " + callerUid);
  5. return true;
  6. }
  7. }

getCallingTokenId8+

static getCallingTokenId(): number;

靜態(tài)方法,獲取調(diào)用者的TokenId,用于被調(diào)用方對調(diào)用方的身份校驗。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回調(diào)用者的TokenId。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let callerTokenId = rpc.IPCSkeleton.getCallingTokenId();
  4. console.log("RpcServer: getCallingTokenId result: " + callerTokenId);
  5. return true;
  6. }
  7. }

getCallingDeviceID

static getCallingDeviceID(): string

靜態(tài)方法,獲取調(diào)用者進(jìn)程所在的設(shè)備ID。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回調(diào)用者進(jìn)程所在的設(shè)備ID。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let callerDeviceID = rpc.IPCSkeleton.getCallingDeviceID();
  4. console.log("RpcServer: callerDeviceID is: " + callerDeviceID);
  5. return true;
  6. }
  7. }

getLocalDeviceID

static getLocalDeviceID(): string

靜態(tài)方法,獲取本端設(shè)備ID。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回本地設(shè)備的ID。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let localDeviceID = rpc.IPCSkeleton.getLocalDeviceID();
  4. console.log("RpcServer: localDeviceID is: " + localDeviceID);
  5. return true;
  6. }
  7. }

isLocalCalling

static isLocalCalling(): boolean

靜態(tài)方法,檢查當(dāng)前通信對端是否是本設(shè)備的進(jìn)程。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean

true:調(diào)用在同一臺設(shè)備,false:調(diào)用未在同一臺設(shè)備。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let isLocalCalling = rpc.IPCSkeleton.isLocalCalling();
  4. console.log("RpcServer: isLocalCalling is: " + isLocalCalling);
  5. return true;
  6. }
  7. }

flushCmdBuffer9+

static flushCmdBuffer(object: IRemoteObject): void

靜態(tài)方法,將所有掛起的命令從指定的RemoteProxy刷新到相應(yīng)的RemoteObject。建議在執(zhí)行任何時間敏感操作之前調(diào)用此方法。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

object

IRemoteObject

指定的RemoteProxy。

示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. }
  6. let remoteObject = new TestRemoteObject("aaa");
  7. try {
  8. rpc.IPCSkeleton.flushCmdBuffer(remoteObject);
  9. } catch(error) {
  10. console.info("proxy set calling identity fail, errorCode " + error.code);
  11. console.info("proxy set calling identity fail, errorMessage " + error.message);
  12. }

flushCommands(deprecated)

從API version 9 開始不再維護(hù),建議使用flushCmdBuffer類替代。

static flushCommands(object: IRemoteObject): number

靜態(tài)方法,將所有掛起的命令從指定的RemoteProxy刷新到相應(yīng)的RemoteObject。建議在執(zhí)行任何時間敏感操作之前調(diào)用此方法。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

object

IRemoteObject

指定的RemoteProxy。

返回值:

類型

說明

number

如果操作成功,返回0;如果輸入對象為空或RemoteObject,或者操作失敗,返回錯誤代碼。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  11. return true;
  12. }
  13. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  14. return true;
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. }
  20. let remoteObject = new TestRemoteObject("aaa");
  21. let ret = rpc.IPCSkeleton.flushCommands(remoteObject);
  22. console.log("RpcServer: flushCommands result: " + ret);

resetCallingIdentity

static resetCallingIdentity(): string

靜態(tài)方法,將遠(yuǎn)程用戶的UID和PID替換為本地用戶的UID和PID。它可以用于身份驗證等場景。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回包含遠(yuǎn)程用戶的UID和PID的字符串。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
  4. console.log("RpcServer: callingIdentity is: " + callingIdentity);
  5. return true;
  6. }
  7. }

restoreCallingIdentity9+

static restoreCallingIdentity(identity: string): void

靜態(tài)方法,將遠(yuǎn)程用戶的UID和PID替換為本地用戶的UID和PID。它可以用于身份驗證等場景。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

identity

string

標(biāo)識表示包含遠(yuǎn)程用戶UID和PID的字符串。由resetCallingIdentity返回。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let callingIdentity = null;
  4. try {
  5. callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
  6. console.log("RpcServer: callingIdentity is: " + callingIdentity);
  7. } finally {
  8. rpc.IPCSkeleton.restoreCallingIdentity("callingIdentity ");
  9. }
  10. return true;
  11. }
  12. }

setCallingIdentity(deprecated)

從API version 9 開始不再維護(hù),建議使用restoreCallingIdentity類替代。

static setCallingIdentity(identity: string): boolean

靜態(tài)方法,將UID和PID恢復(fù)為遠(yuǎn)程用戶的UID和PID。它通常在使用resetCallingIdentity后調(diào)用,需要resetCallingIdentity返回的遠(yuǎn)程用戶的UID和PID。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

identity

string

標(biāo)識表示包含遠(yuǎn)程用戶UID和PID的字符串。由resetCallingIdentity返回。

返回值:

類型

說明

boolean

true:設(shè)置成功,false:設(shè)置失敗。

示例:

  1. class Stub extends rpc.RemoteObject {
  2. onRemoteMessageRequest(code, data, reply, option) {
  3. let callingIdentity = null;
  4. try {
  5. callingIdentity = rpc.IPCSkeleton.resetCallingIdentity();
  6. console.log("RpcServer: callingIdentity is: " + callingIdentity);
  7. } finally {
  8. let ret = rpc.IPCSkeleton.setCallingIdentity("callingIdentity ");
  9. console.log("RpcServer: setCallingIdentity is: " + ret);
  10. }
  11. return true;
  12. }
  13. }

RemoteObject

實現(xiàn)遠(yuǎn)程對象。服務(wù)提供者必須繼承此類。

constructor

constructor(descriptor: string)

RemoteObject構(gòu)造函數(shù)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

descriptor

string

接口描述符。

sendRequest(deprecated)

從API version 9 開始不再維護(hù),建議使用sendMessageRequest類替代。

sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageParcel消息。如果為選項設(shè)置了異步模式,則期約立即兌現(xiàn),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則期約將在sendRequest返回時兌現(xiàn),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageParcel

保存待發(fā)送數(shù)據(jù)的 MessageParcel對象。

reply

MessageParcel

接收應(yīng)答數(shù)據(jù)的MessageParcel對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

返回值:

類型

說明

boolean

true:發(fā)送成功,false:發(fā)送失敗。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  11. return true;
  12. }
  13. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  14. return true;
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. }
  20. let testRemoteObject = new TestRemoteObject("testObject");
  21. let option = new rpc.MessageOption();
  22. let data = rpc.MessageParcel.create();
  23. let reply = rpc.MessageParcel.create();
  24. data.writeInt(1);
  25. data.writeString("hello");
  26. let ret: boolean = testRemoteObject.sendRequest(1, data, reply, option);
  27. if (ret) {
  28. console.log("sendRequest got result");
  29. let msg = reply.readString();
  30. console.log("RPCTest: reply msg: " + msg);
  31. } else {
  32. console.log("RPCTest: sendRequest failed");
  33. }
  34. console.log("RPCTest: sendRequest ends, reclaim parcel");
  35. data.reclaim();
  36. reply.reclaim();

sendRequest8+(deprecated)

從API version 9 開始不再維護(hù),建議使用sendMessageRequest類替代。

sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): Promise<SendRequestResult>

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageParcel消息。如果為選項設(shè)置了異步模式,則期約立即兌現(xiàn),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則期約將在sendRequest返回時兌現(xiàn),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageParcel

保存待發(fā)送數(shù)據(jù)的 MessageParcel對象。

reply

MessageParcel

接收應(yīng)答數(shù)據(jù)的MessageParcel對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

返回值:

類型

說明

Promise<SendRequestResult>

返回一個期約,兌現(xiàn)值是sendRequestResult實例。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  11. return true;
  12. }
  13. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  14. return true;
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. }
  20. let testRemoteObject = new TestRemoteObject("testObject");
  21. let option = new rpc.MessageOption();
  22. let data = rpc.MessageParcel.create();
  23. let reply = rpc.MessageParcel.create();
  24. data.writeInt(1);
  25. data.writeString("hello");
  26. testRemoteObject.sendRequest(1, data, reply, option)
  27. .then(function(result) {
  28. if (result.errCode === 0) {
  29. console.log("sendRequest got result");
  30. result.reply.readException();
  31. let msg = result.reply.readString();
  32. console.log("RPCTest: reply msg: " + msg);
  33. } else {
  34. console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
  35. }
  36. }).catch(function(e) {
  37. console.log("RPCTest: sendRequest got exception: " + e.message);
  38. }).finally (() => {
  39. console.log("RPCTest: sendRequest ends, reclaim parcel");
  40. data.reclaim();
  41. reply.reclaim();
  42. });

sendMessageRequest9+

sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): Promise<RequestResult>

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageSequence消息。如果為選項設(shè)置了異步模式,則期約立即兌現(xiàn),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則期約將在sendMessageRequest返回時兌現(xiàn),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageSequence

保存待發(fā)送數(shù)據(jù)的 MessageSequence對象。

reply

MessageSequence

接收應(yīng)答數(shù)據(jù)的MessageSequence對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

返回值:

類型

說明

Promise<RequestResult>

返回一個期約,兌現(xiàn)值是sendRequestResult實例。

示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. }
  6. let testRemoteObject = new TestRemoteObject("testObject");
  7. let option = new rpc.MessageOption();
  8. let data = rpc.MessageSequence.create();
  9. let reply = rpc.MessageSequence.create();
  10. data.writeInt(1);
  11. data.writeString("hello");
  12. testRemoteObject.sendMessageRequest(1, data, reply, option)
  13. .then(function(result) {
  14. if (result.errCode === 0) {
  15. console.log("sendMessageRequest got result");
  16. result.reply.readException();
  17. let msg = result.reply.readString();
  18. console.log("RPCTest: reply msg: " + msg);
  19. } else {
  20. console.log("RPCTest: sendMessageRequest failed, errCode: " + result.errCode);
  21. }
  22. }).catch(function(e) {
  23. console.log("RPCTest: sendMessageRequest got exception: " + e.message);
  24. }).finally (() => {
  25. console.log("RPCTest: sendMessageRequest ends, reclaim parcel");
  26. data.reclaim();
  27. reply.reclaim();
  28. });

sendMessageRequest9+

sendMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption, callback: AsyncCallback<RequestResult>): void

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageSequence消息。如果為選項設(shè)置了異步模式,則立即收到回調(diào),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則將在sendMessageRequest返回時收到回調(diào),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageSequence

保存待發(fā)送數(shù)據(jù)的 MessageSequence對象。

reply

MessageSequence

接收應(yīng)答數(shù)據(jù)的MessageSequence對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

AsyncCallback

AsyncCallback<RequestResult>

接收發(fā)送結(jié)果的回調(diào)。

示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. }
  6. function sendRequestCallback(result) {
  7. if (result.errCode === 0) {
  8. console.log("sendRequest got result");
  9. result.reply.readException();
  10. let msg = result.reply.readString();
  11. console.log("RPCTest: reply msg: " + msg);
  12. } else {
  13. console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
  14. }
  15. console.log("RPCTest: sendRequest ends, reclaim parcel");
  16. result.data.reclaim();
  17. result.reply.reclaim();
  18. }
  19. let testRemoteObject = new TestRemoteObject("testObject");
  20. let option = new rpc.MessageOption();
  21. let data = rpc.MessageSequence.create();
  22. let reply = rpc.MessageSequence.create();
  23. data.writeInt(1);
  24. data.writeString("hello");
  25. testRemoteObject.sendMessageRequest(1, data, reply, option, sendRequestCallback);

sendRequest8+(deprecated)

從API version 9 開始不再維護(hù),建議使用sendMessageRequest類替代。

sendRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption, callback: AsyncCallback<SendRequestResult>): void

以同步或異步方式向?qū)Χ诉M(jìn)程發(fā)送MessageParcel消息。如果為選項設(shè)置了異步模式,則立即收到回調(diào),reply報文里沒有內(nèi)容,具體回復(fù)需要在業(yè)務(wù)側(cè)的回調(diào)中獲取。如果為選項設(shè)置了同步模式,則將在sendRequest返回時收到回調(diào),回復(fù)內(nèi)容在reply報文里。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

本次請求調(diào)用的消息碼,由通信雙方確定。如果接口由IDL工具生成,則消息代碼由IDL自動生成。

data

MessageParcel

保存待發(fā)送數(shù)據(jù)的 MessageParcel對象。

reply

MessageParcel

接收應(yīng)答數(shù)據(jù)的MessageParcel對象。

options

MessageOption

本次請求的同異步模式,默認(rèn)同步調(diào)用。

AsyncCallback

AsyncCallback<SendRequestResult>

接收發(fā)送結(jié)果的回調(diào)。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  11. return true;
  12. }
  13. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  14. return true;
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. }
  20. function sendRequestCallback(result) {
  21. if (result.errCode === 0) {
  22. console.log("sendRequest got result");
  23. result.reply.readException();
  24. let msg = result.reply.readString();
  25. console.log("RPCTest: reply msg: " + msg);
  26. } else {
  27. console.log("RPCTest: sendRequest failed, errCode: " + result.errCode);
  28. }
  29. console.log("RPCTest: sendRequest ends, reclaim parcel");
  30. result.data.reclaim();
  31. result.reply.reclaim();
  32. }
  33. let testRemoteObject = new TestRemoteObject("testObject");
  34. let option = new rpc.MessageOption();
  35. let data = rpc.MessageParcel.create();
  36. let reply = rpc.MessageParcel.create();
  37. data.writeInt(1);
  38. data.writeString("hello");
  39. testRemoteObject.sendRequest(1, data, reply, option, sendRequestCallback);

onRemoteRequest8+(deprecated)

從API version 9 開始不再維護(hù),建議使用onRemoteMessageRequest類替代。

onRemoteRequest(code: number, data: MessageParcel, reply: MessageParcel, options: MessageOption): boolean

sendMessageRequest請求的響應(yīng)處理函數(shù),服務(wù)端在該函數(shù)里處理請求,回復(fù)結(jié)果。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

對端發(fā)送的服務(wù)請求碼。

data

MessageParcel

攜帶客戶端調(diào)用參數(shù)的MessageParcel對象。

reply

MessageParcel

寫入結(jié)果的MessageParcel對象。

option

MessageOption

指示操作是同步還是異步。

返回值:

類型

說明

boolean

true:操作成功,false:操作失敗。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  11. return true;
  12. }
  13. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  14. return true;
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. onRemoteRequest(code, data, reply, option) {
  20. if (code === 1) {
  21. console.log("RpcServer: onRemoteRequest called");
  22. return true;
  23. } else {
  24. console.log("RpcServer: unknown code: " + code);
  25. return false;
  26. }
  27. }
  28. }

onRemoteMessageRequest9+

onRemoteMessageRequest(code: number, data: MessageSequence, reply: MessageSequence, options: MessageOption): boolean | Promise<boolean>

說明
  • 開發(fā)者應(yīng)優(yōu)先選擇重載onRemoteMessageRequest方法,其中可以自由實現(xiàn)同步和異步的消息處理。
  • 開發(fā)者同時重載onRemoteRequest和onRemoteMessageRequest方法時,僅onRemoteMessageRequest方法生效。

sendMessageRequest請求的響應(yīng)處理函數(shù),服務(wù)端在該函數(shù)里同步或異步地處理請求,回復(fù)結(jié)果。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

code

number

對端發(fā)送的服務(wù)請求碼。

data

MessageSequence

攜帶客戶端調(diào)用參數(shù)的MessageSequence對象。

reply

MessageSequence

寫入結(jié)果的MessageSequence對象。

option

MessageOption

指示操作是同步還是異步。

返回值:

類型

說明

boolean

若在onRemoteMessageRequest中同步地處理請求,則返回一個布爾值:true:操作成功,false:操作失敗。

Promise<boolean>

若在onRemoteMessageRequest中異步地處理請求,則返回一個Promise對象。

重載onRemoteMessageRequest方法同步處理請求示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. onRemoteMessageRequest(code, data, reply, option) {
  6. if (code === 1) {
  7. console.log("RpcServer: sync onRemoteMessageRequest is called");
  8. return true;
  9. } else {
  10. console.log("RpcServer: unknown code: " + code);
  11. return false;
  12. }
  13. }
  14. }

重載onRemoteMessageRequest方法異步處理請求示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. async onRemoteMessageRequest(code, data, reply, option) {
  6. if (code === 1) {
  7. console.log("RpcServer: async onRemoteMessageRequest is called");
  8. } else {
  9. console.log("RpcServer: unknown code: " + code);
  10. return false;
  11. }
  12. await new Promise((resolve) => {
  13. setTimeout(resolve, 100);
  14. })
  15. return true;
  16. }
  17. }

同時重載onRemoteMessageRequest和onRemoteRequest方法同步處理請求示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. onRemoteRequest(code, data, reply, option) {
  6. if (code === 1) {
  7. console.log("RpcServer: sync onRemoteMessageRequest is called");
  8. return true;
  9. } else {
  10. console.log("RpcServer: unknown code: " + code);
  11. return false;
  12. }
  13. }
  14. // 同時調(diào)用僅會執(zhí)行onRemoteMessageRequest
  15. onRemoteMessageRequest(code, data, reply, option) {
  16. if (code === 1) {
  17. console.log("RpcServer: async onRemoteMessageRequest is called");
  18. } else {
  19. console.log("RpcServer: unknown code: " + code);
  20. return false;
  21. }
  22. return true;
  23. }
  24. }

同時重載onRemoteMessageRequest和onRemoteRequest方法異步處理請求示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. onRemoteRequest(code, data, reply, option) {
  6. if (code === 1) {
  7. console.log("RpcServer: sync onRemoteRequest is called");
  8. return true;
  9. } else {
  10. console.log("RpcServer: unknown code: " + code);
  11. return false;
  12. }
  13. }
  14. // 同時調(diào)用僅會執(zhí)行onRemoteMessageRequest
  15. async onRemoteMessageRequest(code, data, reply, option) {
  16. if (code === 1) {
  17. console.log("RpcServer: async onRemoteMessageRequest is called");
  18. } else {
  19. console.log("RpcServer: unknown code: " + code);
  20. return false;
  21. }
  22. await new Promise((resolve) => {
  23. setTimeout(resolve, 100);
  24. })
  25. return true;
  26. }
  27. }

getCallingUid

getCallingUid(): number

獲取通信對端的進(jìn)程Uid。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回通信對端的進(jìn)程Uid。

示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. }
  6. let testRemoteObject = new TestRemoteObject("testObject");
  7. console.log("RpcServer: getCallingUid: " + testRemoteObject.getCallingUid());

getCallingPid

getCallingPid(): number

獲取通信對端的進(jìn)程Pid。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回通信對端的進(jìn)程Pid。

示例:

  1. class TestRemoteObject extends rpc.RemoteObject {
  2. constructor(descriptor) {
  3. super(descriptor);
  4. }
  5. }
  6. let testRemoteObject = new TestRemoteObject("testObject");
  7. console.log("RpcServer: getCallingPid: " + testRemoteObject.getCallingPid());

getLocalInterface9+

getLocalInterface(descriptor: string): IRemoteBroker

查詢接口描述符的字符串。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

descriptor

string

接口描述符的字符串。

返回值:

類型

說明

IRemoteBroker

返回綁定到指定接口描述符的IRemoteBroker對象。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
  11. // 方法邏輯需開發(fā)者根據(jù)業(yè)務(wù)需要實現(xiàn)
  12. }
  13. unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
  14. // 方法邏輯需開發(fā)者根據(jù)業(yè)務(wù)需要實現(xiàn)
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. }
  20. let testRemoteObject = new TestRemoteObject("testObject");
  21. try {
  22. let broker = testRemoteObject.getLocalInterface("testObject");
  23. } catch(error) {
  24. console.info("rpc get local interface fail, errorCode " + error.code);
  25. console.info("rpc get local interface fail, errorMessage " + error.message);
  26. }

queryLocalInterface(deprecated)

從API version 9 開始不再維護(hù),建議使用getLocalInterface類替代。

queryLocalInterface(descriptor: string): IRemoteBroker

查詢并獲取當(dāng)前接口描述符對應(yīng)的遠(yuǎn)端對象是否已經(jīng)存在。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

descriptor

string

需要查詢的接口描述符。

返回值:

類型

說明

IRemoteBroker

如果接口描述符對應(yīng)的遠(yuǎn)端對象存在,則返回該遠(yuǎn)端對象,否則返回Null。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  11. return true;
  12. }
  13. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  14. return true;
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. }
  20. let testRemoteObject = new TestRemoteObject("testObject");
  21. let broker = testRemoteObject.queryLocalInterface("testObject");

getDescriptor9+

getDescriptor(): string

獲取對象的接口描述符。接口描述符為字符串。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回接口描述符。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900008

proxy or remote object is invalid

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
  11. // 方法邏輯需開發(fā)者根據(jù)業(yè)務(wù)需要實現(xiàn)
  12. }
  13. unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
  14. // 方法邏輯需開發(fā)者根據(jù)業(yè)務(wù)需要實現(xiàn)
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. }
  20. let testRemoteObject = new TestRemoteObject("testObject");
  21. console.log("RpcServer: descriptor is: " + descriptor);
  22. try {
  23. let descriptor = testRemoteObject.getDescriptor();
  24. } catch(error) {
  25. console.info("rpc get local interface fail, errorCode " + error.code);
  26. console.info("rpc get local interface fail, errorMessage " + error.message);
  27. }

getInterfaceDescriptor(deprecated)

從API version 9 開始不再維護(hù),建議使用getDescriptor類替代。

getInterfaceDescriptor(): string

查詢接口描述符。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

string

返回接口描述符。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. }
  10. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  11. return true;
  12. }
  13. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  14. return true;
  15. }
  16. isObjectDead(): boolean {
  17. return false;
  18. }
  19. }
  20. let testRemoteObject = new TestRemoteObject("testObject");
  21. let descriptor = testRemoteObject.getInterfaceDescriptor();
  22. console.log("RpcServer: descriptor is: " + descriptor);

modifyLocalInterface9+

modifyLocalInterface(localInterface: IRemoteBroker, descriptor: string): void

此接口用于把接口描述符和IRemoteBroker對象綁定。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

localInterface

IRemoteBroker

將與描述符綁定的IRemoteBroker對象。

descriptor

string

用于與IRemoteBroker對象綁定的描述符。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. try {
  10. this.modifyLocalInterface(this, descriptor);
  11. } catch(error) {
  12. console.info(" rpc attach local interface fail, errorCode " + error.code);
  13. console.info(" rpc attach local interface fail, errorMessage " + error.message);
  14. }
  15. }
  16. registerDeathRecipient(recipient: MyDeathRecipient, flags: number) {
  17. // 方法邏輯需開發(fā)者根據(jù)業(yè)務(wù)需要實現(xiàn)
  18. }
  19. unregisterDeathRecipient(recipient: MyDeathRecipient, flags: number) {
  20. // 方法邏輯需開發(fā)者根據(jù)業(yè)務(wù)需要實現(xiàn)
  21. }
  22. isObjectDead(): boolean {
  23. return false;
  24. }
  25. asObject(): rpc.IRemoteObject {
  26. return this;
  27. }
  28. }
  29. let testRemoteObject = new TestRemoteObject("testObject");

attachLocalInterface(deprecated)

從API version 9 開始不再維護(hù),建議使用modifyLocalInterface類替代。

attachLocalInterface(localInterface: IRemoteBroker, descriptor: string): void

此接口用于把接口描述符和IRemoteBroker對象綁定。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

localInterface

IRemoteBroker

將與描述符綁定的IRemoteBroker對象。

descriptor

string

用于與IRemoteBroker對象綁定的描述符。

示例:

  1. class MyDeathRecipient {
  2. onRemoteDied() {
  3. console.log("server died");
  4. }
  5. }
  6. class TestRemoteObject extends rpc.RemoteObject {
  7. constructor(descriptor) {
  8. super(descriptor);
  9. this.attachLocalInterface(this, descriptor);
  10. }
  11. addDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  12. return true;
  13. }
  14. removeDeathRecipient(recipient: MyDeathRecipient, flags: number): boolean {
  15. return true;
  16. }
  17. isObjectDead(): boolean {
  18. return false;
  19. }
  20. asObject(): rpc.IRemoteObject {
  21. return this;
  22. }
  23. }
  24. let testRemoteObject = new TestRemoteObject("testObject");

Ashmem8+

提供與匿名共享內(nèi)存對象相關(guān)的方法,包括創(chuàng)建、關(guān)閉、映射和取消映射Ashmem、從Ashmem讀取數(shù)據(jù)和寫入數(shù)據(jù)、獲取Ashmem大小、設(shè)置Ashmem保護(hù)。

系統(tǒng)能力:以下各項對應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.IPC.Core。

映射內(nèi)存保護(hù)類型:

名稱

說明

PROT_EXEC

4

映射的內(nèi)存可執(zhí)行

PROT_NONE

0

映射的內(nèi)存不可訪問

PROT_READ

1

映射的內(nèi)存可讀

PROT_WRITE

2

映射的內(nèi)存可寫

create9+

static create(name: string, size: number): Ashmem

靜態(tài)方法,根據(jù)指定的名稱和大小創(chuàng)建Ashmem對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

name

string

名稱,用于查詢Ashmem信息。

size

number

Ashmem的大小,以字節(jié)為單位。

返回值:

類型

說明

Ashmem

返回創(chuàng)建的Ashmem對象;如果創(chuàng)建失敗,返回null。

示例:

  1. let ashmem;
  2. try {
  3. ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  4. } catch(error) {
  5. console.info("Rpc creat ashmem fail, errorCode " + error.code);
  6. console.info("Rpc creat ashmem fail, errorMessage " + error.message);
  7. }
  8. let size = ashmem.getAshmemSize();
  9. console.log("RpcTest: get ashemm by create : " + ashmem + " size is : " + size);

createAshmem8+(deprecated)

從API version 9 開始不再維護(hù),建議使用create類替代。

static createAshmem(name: string, size: number): Ashmem

靜態(tài)方法,根據(jù)指定的名稱和大小創(chuàng)建Ashmem對象。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

name

string

名稱,用于查詢Ashmem信息。

size

number

Ashmem的大小,以字節(jié)為單位。

返回值:

類型

說明

Ashmem

返回創(chuàng)建的Ashmem對象;如果創(chuàng)建失敗,返回null。

示例:

  1. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  2. let size = ashmem.getAshmemSize();
  3. console.log("RpcTest: get ashemm by createAshmem : " + ashmem + " size is : " + size);

create9+

static create(ashmem: Ashmem): Ashmem

靜態(tài)方法,通過復(fù)制現(xiàn)有Ashmem對象的文件描述符(fd)來創(chuàng)建Ashmem對象。兩個Ashmem對象指向同一個共享內(nèi)存區(qū)域。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

ashmem

Ashmem

已存在的Ashmem對象。

返回值:

類型

說明

Ashmem

返回創(chuàng)建的Ashmem對象。

示例:

  1. let ashmem2;
  2. try {
  3. let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  4. let ashmem2 = rpc.Ashmem.create(ashmem);
  5. } catch(error) {
  6. console.info("Rpc creat ashmem from existing fail, errorCode " + error.code);
  7. console.info("Rpc creat ashmem from existing fail, errorMessage " + error.message);
  8. }
  9. let size = ashmem2.getAshmemSize();
  10. console.log("RpcTest: get ashemm by create : " + ashmem2 + " size is : " + size);

createAshmemFromExisting8+(deprecated)

從API version 9 開始不再維護(hù),建議使用create類替代。

static createAshmemFromExisting(ashmem: Ashmem): Ashmem

靜態(tài)方法,通過復(fù)制現(xiàn)有Ashmem對象的文件描述符(fd)來創(chuàng)建Ashmem對象。兩個Ashmem對象指向同一個共享內(nèi)存區(qū)域。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

ashmem

Ashmem

已存在的Ashmem對象。

返回值:

類型

說明

Ashmem

返回創(chuàng)建的Ashmem對象。

示例:

  1. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  2. let ashmem2 = rpc.Ashmem.createAshmemFromExisting(ashmem);
  3. let size = ashmem2.getAshmemSize();
  4. console.log("RpcTest: get ashemm by createAshmemFromExisting : " + ashmem2 + " size is : " + size);

closeAshmem8+

closeAshmem(): void

關(guān)閉這個Ashmem。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

示例:

  1. let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  2. ashmem.closeAshmem();

unmapAshmem8+

unmapAshmem(): void

刪除該Ashmem對象的地址映射。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

示例:

  1. let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  2. ashmem.unmapAshmem();

getAshmemSize8+

getAshmemSize(): number

獲取Ashmem對象的內(nèi)存大小。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

number

返回Ashmem對象的內(nèi)存大小。

示例:

  1. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  2. let size = ashmem.getAshmemSize();
  3. console.log("RpcTest: get ashmem is " + ashmem + " size is : " + size);

mapTypedAshmem9+

mapTypedAshmem(mapType: number): void

在此進(jìn)程的虛擬地址空間上創(chuàng)建共享文件映射,映射區(qū)域大小由此Ashmem對象指定。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

mapType

number

指定映射的內(nèi)存區(qū)域的保護(hù)等級。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900001

call mmap function failed

示例:

  1. let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  2. try {
  3. ashmem.mapTypedAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
  4. } catch(error) {
  5. console.info("Rpc map ashmem fail, errorCode " + error.code);
  6. console.info("Rpc map ashmem fail, errorMessage " + error.message);
  7. }

mapAshmem8+(deprecated)

從API version 9 開始不再維護(hù),建議使用mapTypedAshmem類替代。

mapAshmem(mapType: number): boolean

在此進(jìn)程的虛擬地址空間上創(chuàng)建共享文件映射,映射區(qū)域大小由此Ashmem對象指定。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

mapType

number

指定映射的內(nèi)存區(qū)域的保護(hù)等級。

返回值:

類型

說明

boolean

true:映射成功,false:映射失敗。

示例:

  1. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  2. let mapReadAndWrite = ashmem.mapAshmem(ashmem.PROT_READ | ashmem.PROT_WRITE);
  3. console.log("RpcTest: map ashmem result is : " + mapReadAndWrite);

mapReadWriteAshmem9+

mapReadWriteAshmem(): void

在此進(jìn)程虛擬地址空間上創(chuàng)建可讀寫的共享文件映射。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900001

call mmap function failed

示例:

  1. let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  2. try {
  3. ashmem.mapReadWriteAshmem();
  4. } catch(error) {
  5. console.info("Rpc map read and write ashmem fail, errorCode " + error.code);
  6. console.info("Rpc map read and write ashmem fail, errorMessage " + error.message);
  7. }

mapReadAndWriteAshmem8+(deprecated)

從API version 9 開始不再維護(hù),建議使用mapReadWriteAshmem類替代。

mapReadAndWriteAshmem(): boolean

在此進(jìn)程虛擬地址空間上創(chuàng)建可讀寫的共享文件映射。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean

true:映射成功,false:映射失敗。

示例:

  1. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  2. let mapResult = ashmem.mapReadAndWriteAshmem();
  3. console.log("RpcTest: map ashmem result is : " + mapResult);

mapReadonlyAshmem9+

mapReadonlyAshmem(): void

在此進(jìn)程虛擬地址空間上創(chuàng)建只讀的共享文件映射。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900001

call mmap function failed

示例:

  1. let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  2. try {
  3. ashmem.mapReadonlyAshmem();
  4. } catch(error) {
  5. console.info("Rpc map read and write ashmem fail, errorCode " + error.code);
  6. console.info("Rpc map read and write ashmem fail, errorMessage " + error.message);
  7. }

mapReadOnlyAshmem8+(deprecated)

從API version 9 開始不再維護(hù),建議使用mapReadonlyAshmem類替代。

mapReadOnlyAshmem(): boolean

在此進(jìn)程虛擬地址空間上創(chuàng)建只讀的共享文件映射。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

返回值:

類型

說明

boolean

true:映射成功,false:映射失敗。

示例:

  1. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  2. let mapResult = ashmem.mapReadOnlyAshmem();
  3. console.log("RpcTest: Ashmem mapReadOnlyAshmem result is : " + mapResult);

setProtectionType9+

setProtectionType(protectionType: number): void

設(shè)置映射內(nèi)存區(qū)域的保護(hù)等級。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

protectionType

number

要設(shè)置的保護(hù)類型。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900002

call os ioctl function failed

示例:

  1. let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  2. try {
  3. ashmem.setProtection(ashmem.PROT_READ);
  4. } catch(error) {
  5. console.info("Rpc set protection type fail, errorCode " + error.code);
  6. console.info("Rpc set protection type fail, errorMessage " + error.message);
  7. }

setProtection8+(deprecated)

從API version 9 開始不再維護(hù),建議使用setProtectionType類替代。

setProtection(protectionType: number): boolean

設(shè)置映射內(nèi)存區(qū)域的保護(hù)等級。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

protectionType

number

要設(shè)置的保護(hù)類型。

返回值:

類型

說明

boolean

true:設(shè)置成功,false:設(shè)置失敗。

示例:

  1. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  2. let result = ashmem.setProtection(ashmem.PROT_READ);
  3. console.log("RpcTest: Ashmem setProtection result is : " + result);

writeAshmem9+

writeAshmem(buf: number[], size: number, offset: number): void

將數(shù)據(jù)寫入此Ashmem對象關(guān)聯(lián)的共享文件。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

buf

number[]

寫入Ashmem對象的數(shù)據(jù)。

size

number

要寫入的數(shù)據(jù)大小。

offset

number

要寫入的數(shù)據(jù)在此Ashmem對象關(guān)聯(lián)的內(nèi)存區(qū)間的起始位置

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900003

write to ashmem failed

示例:

  1. let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  2. ashmem.mapReadWriteAshmem();
  3. var ByteArrayVar = [1, 2, 3, 4, 5];
  4. try {
  5. ashmem.writeAshmem(ByteArrayVar, 5, 0);
  6. } catch(error) {
  7. console.info("Rpc write to ashmem fail, errorCode " + error.code);
  8. console.info("Rpc write to ashmem fail, errorMessage " + error.message);
  9. }

writeToAshmem8+(deprecated)

從API version 9 開始不再維護(hù),建議使用writeAshmem類替代。

writeToAshmem(buf: number[], size: number, offset: number): boolean

將數(shù)據(jù)寫入此Ashmem對象關(guān)聯(lián)的共享文件。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

buf

number[]

寫入Ashmem對象的數(shù)據(jù)。

size

number

要寫入的數(shù)據(jù)大小。

offset

number

要寫入的數(shù)據(jù)在此Ashmem對象關(guān)聯(lián)的內(nèi)存區(qū)間的起始位置

返回值:

類型

說明

boolean

true:如果數(shù)據(jù)寫入成功,false:在其他情況下,如數(shù)據(jù)寫入越界或未獲得寫入權(quán)限。

示例:

  1. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  2. let mapResult = ashmem.mapReadAndWriteAshmem();
  3. console.info("RpcTest map ashmem result is " + mapResult);
  4. var ByteArrayVar = [1, 2, 3, 4, 5];
  5. let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
  6. console.log("RpcTest: write to Ashmem result is : " + writeResult);

readAshmem9+

readAshmem(size: number, offset: number): number[]

從此Ashmem對象關(guān)聯(lián)的共享文件中讀取數(shù)據(jù)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

size

number

要讀取的數(shù)據(jù)的大小。

offset

number

要讀取的數(shù)據(jù)在此Ashmem對象關(guān)聯(lián)的內(nèi)存區(qū)間的起始位置

返回值:

類型

說明

number[]

返回讀取的數(shù)據(jù)。

錯誤碼:

以下錯誤碼的詳細(xì)介紹請參見ohos.rpc錯誤碼

錯誤碼ID

錯誤信息

1900004

read from ashmem failed

示例:

  1. let ashmem = rpc.Ashmem.create("ashmem", 1024*1024);
  2. ashmem.mapReadWriteAshmem();
  3. var ByteArrayVar = [1, 2, 3, 4, 5];
  4. ashmem.writeAshmem(ByteArrayVar, 5, 0);
  5. try {
  6. let readResult = ashmem.readAshmem(5, 0);
  7. console.log("RpcTest: read from Ashmem result is : " + readResult);
  8. } catch(error) {
  9. console.info("Rpc read from ashmem fail, errorCode " + error.code);
  10. console.info("Rpc read from ashmem fail, errorMessage " + error.message);
  11. }

readFromAshmem8+(deprecated)

從API version 9 開始不再維護(hù),建議使用readAshmem類替代。

readFromAshmem(size: number, offset: number): number[]

從此Ashmem對象關(guān)聯(lián)的共享文件中讀取數(shù)據(jù)。

系統(tǒng)能力:SystemCapability.Communication.IPC.Core

參數(shù):

參數(shù)名

類型

必填

說明

size

number

要讀取的數(shù)據(jù)的大小。

offset

number

要讀取的數(shù)據(jù)在此Ashmem對象關(guān)聯(lián)的內(nèi)存區(qū)間的起始位置

返回值:

類型

說明

number[]

返回讀取的數(shù)據(jù)。

示例:

  1. let ashmem = rpc.Ashmem.createAshmem("ashmem", 1024*1024);
  2. let mapResult = ashmem.mapReadAndWriteAshmem();
  3. console.info("RpcTest map ashmem result is " + mapResult);
  4. var ByteArrayVar = [1, 2, 3, 4, 5];
  5. let writeResult = ashmem.writeToAshmem(ByteArrayVar, 5, 0);
  6. console.log("RpcTest: write to Ashmem result is : " + writeResult);
  7. let readResult = ashmem.readFromAshmem(5, 0);
  8. console.log("RpcTest: read to Ashmem result is : " + readResult);
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號