• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.nfc.cardEmulation (标准NFC-cardEmulation)
2
3<!--Kit: Connectivity Kit-->
4<!--Subsystem: Communication-->
5<!--Owner: @amunra03-->
6<!--Designer: @wenxiaolin-->
7<!--Tester: @zs_111-->
8<!--Adviser: @zhang_yixin13-->
9
10本模块主要提供NFC卡模拟业务,包括判断支持哪种卡模拟类型,HCE卡模拟的业务实现等。<br>
11HCE(Host Card Emulation),称为基于主机的卡模拟,表示不依赖安全单元芯片,应用程序模拟NFC卡片,可以通过NFC服务和NFC读卡器通信。
12
13> **说明:**
14>
15> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
16
17## HCE卡模拟和AID列表的声明定义
18
19开发HCE卡模拟相关应用时,需要在应用的属性配置文件中,声明与NFC相关的属性值,比如,在module.json5文件中,声明下面属性值:
20```json
21// 适用于除轻量级智能穿戴产品之外其它设备
22{
23  "module": {
24    // 其他已声明的属性
25    "abilities": [
26      {
27        // 其他已声明的属性
28        "skills": [
29          {
30            "actions": [
31              "ohos.nfc.cardemulation.action.HOST_APDU_SERVICE"
32            ]
33          }
34        ],
35        "metadata": [
36          {
37            "name": "payment-aid",
38            "value": "your payment aid"
39          },
40          {
41            "name": "other-aid",
42            "value": "your other aid"
43          }
44        ]
45      }
46    ],
47    "requestPermissions": [
48      {
49        "name": "ohos.permission.NFC_CARD_EMULATION",
50        // 必须要添加reason: card_emulation_reason
51        "reason": "$string:card_emulation_reason"
52      }
53    ]
54  }
55}
56```
57```json
58// 轻量级智能穿戴设备
59{
60  "module": {
61    // 其他已声明的属性
62    "abilities": [
63      {
64        // 其他已声明的属性
65        "metaData": {
66          "customizeData": [
67            {
68              "name": "paymentAid",
69              "value": "A0000000041012"
70            },
71            {
72              "name": "otherAid",
73              "value": "A0000000041010"
74            }
75          ]
76        },
77        "skills": [
78          {
79            "entities": [
80              "ohos.nfc.cardemulation.action.HOST_APDU_SERVICE"
81            ],
82            "actions": [
83              "ohos.nfc.cardemulation.action.HOST_APDU_SERVICE"
84            ]
85          }
86        ]
87      }
88    ],
89    "reqPermissions": [
90      {
91        "name": "ohos.permission.NFC_CARD_EMULATION",
92        // 必须要添加reason: card_emulation_reason
93        "reason": "$string:card_emulation_reason",
94        "usedScene":{
95          "ability":[
96            "FormAbility"
97          ],
98          "when":"always"
99        }
100      },
101      {
102        "name": "ohos.permission.NFC_TAG",
103        // 必须要添加reason: card_emulation_reason
104        "reason": "$string:card_emulation_reason",
105        "usedScene":{
106          "ability":[
107            "FormAbility"
108          ],
109          "when":"always"
110        }
111      }
112    ]
113  }
114}
115```
116> **注意:**
117>1. 声明"actions"字段的内容填写,必须包含"ohos.nfc.cardemulation.action.HOST_APDU_SERVICE",不能更改。
118>2. 声明aid(参考ISO/IEC 7816-4规范)时,name必须为payment-aid或者other-aid。填写错误会造成解析失败。
119>3. 声明权限时"requestPermissions"中的"name"字段的内容填写,必须是"ohos.permission.NFC_CARD_EMULATION",不能更改。
120>4. 轻量级智能穿戴产品不同于其他设备,仅支持FA模型,属性配置和接口调用方式与其它设备有所区别,详见示例。
121
122## 导入模块
123
124```
125// 适用于除轻量级智能穿戴产品之外其它设备
126import { cardEmulation } from '@kit.ConnectivityKit';
127```
128
129<!--code_no_check_fa-->
130```
131// 轻量级智能穿戴设备
132import cardEmulation from '@ohos.nfc.cardEmulation';
133```
134
135## FeatureType<sup>(deprecated)</sup>
136
137定义不同的NFC卡模拟类型。
138
139> **说明:**
140>
141> 从 API version 6 开始支持,从 API version 9 开始废弃,建议使用[hasHceCapability](#cardemulationhashcecapability9)替代。
142
143**系统能力:** SystemCapability.Communication.NFC.CardEmulation
144
145| 名称   | 值    | 说明       |
146| ---- | ---- | -------- |
147| HCE  | 0    | HCE 卡模拟。 |
148| UICC | 1    | SIM 卡模拟。 |
149| ESE  | 2    | ESE 卡模拟。  |
150
151## CardType<sup>9+</sup>
152
153定义卡模拟应用所使用的业务类型,是支付类型,还是其他类型。
154
155**系统能力:** SystemCapability.Communication.NFC.CardEmulation
156
157**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
158
159| 名称      | 值         | 说明                |
160| ------- | --------- | ----------------- |
161| PAYMENT | "payment" | 卡模拟应用所使用的业务是支付类型。 |
162| OTHER   | "other"   | 卡模拟应用所使用的业务是其他类型。 |
163
164## cardEmulation.isSupported<sup>(deprecated)</sup>
165
166isSupported(feature: number): boolean
167
168是否支持某种类型的卡模拟。
169
170> **说明:**
171>
172> 从 API version 6 开始支持,从 API version 9 开始废弃,建议使用[hasHceCapability](#cardemulationhashcecapability9)替代。
173
174**系统能力:** SystemCapability.Communication.NFC.CardEmulation
175
176**参数:**
177
178| 参数名     | 类型     | 必填   | 说明                                       |
179| ------- | ------ | ---- | ---------------------------------------- |
180| feature | number | 是    | 卡模拟类型值,详细请见[FeatureType](#featuretypedeprecated)枚举值。 |
181
182**返回值:**
183
184| **类型**  | **说明**                                 |
185| ------- | -------------------------------------- |
186| boolean | true: 支持该类型卡模拟,&nbsp;false: 不支持该类型卡模拟。 |
187
188**示例:**
189
190```js
191// 适用于除轻量级智能穿戴产品之外其它设备
192import { cardEmulation } from '@kit.ConnectivityKit';
193
194let isHceSupported: boolean = cardEmulation.isSupported(cardEmulation.FeatureType.HCE);
195if (!isHceSupported) {
196    console.log('this device is not supported for HCE, ignore it.');
197}
198```
199<!--code_no_check_fa-->
200```js
201// 适用于轻量化智能穿戴设备
202import cardEmulation from '@ohos.nfc.cardEmulation';
203
204let isHceSupported = cardEmulation.isSupported(cardEmulation.FeatureType.HCE);
205if (!isHceSupported) {
206    console.log('this device is not supported for HCE, ignore it.');
207}
208```
209
210## cardEmulation.hasHceCapability<sup>9+</sup>
211
212hasHceCapability(): boolean
213
214判断设备是否支持HCE卡模拟功能。
215
216**系统能力:** SystemCapability.Communication.NFC.CardEmulation
217
218**需要权限:** ohos.permission.NFC_CARD_EMULATION
219
220**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
221
222**返回值:**
223
224| **类型**  | **说明**                           |
225| ------- | -------------------------------- |
226| boolean | true: 支持HCE,&nbsp;false: 不支持HCE。 |
227
228**错误码**:
229
230以下错误码的详细介绍请参见[NFC错误码](errorcode-nfc.md)。
231
232| 错误码ID | 错误信息 |
233| -------- | ---------------------------- |
234|201 | Permission denied.                 |
235|801 | Capability not supported.          |
236
237**示例:**
238
239```js
240// 适用于除轻量级智能穿戴产品之外其它设备
241import { cardEmulation } from '@kit.ConnectivityKit';
242
243let hasHceCap: boolean = cardEmulation.hasHceCapability();
244if (!hasHceCap) {
245    console.log('this device hasHceCapability false, ignore it.');
246}
247```
248
249<!--code_no_check_fa-->
250```js
251// 适用于轻量化智能穿戴设备
252import cardEmulation from '@ohos.nfc.cardEmulation';
253
254let hasHceCap = cardEmulation.hasHceCapability();
255if (!hasHceCap) {
256    console.log('this device hasHceCapability false, ignore it.');
257}
258```
259
260## cardEmulation.isDefaultService<sup>9+</sup>
261
262isDefaultService(elementName: ElementName, type: CardType): boolean
263
264判断指定的应用是否为指定业务类型的默认应用。
265
266**系统能力:** SystemCapability.Communication.NFC.CardEmulation
267
268**需要权限:** ohos.permission.NFC_CARD_EMULATION
269
270**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
271
272**参数:**
273
274| 参数名         | 类型                                       | 必填   | 说明                      |
275| ----------- | ---------------------------------------- | ---- |-------------------------|
276| elementName | [ElementName](../apis-ability-kit/js-apis-bundleManager-elementName.md) | 是    | 所属应用声明NFC卡模拟能力的页面信息(至少包含bundleName、abilityName这两项的赋值),不可以为空。 |
277| type        | [CardType](#cardtype9)                   | 是    | 卡模拟业务类型。目前只支持默认支付应用查询。   |
278
279**错误码:**
280
281以下错误码的详细介绍请参见[NFC错误码](errorcode-nfc.md)。
282
283| 错误码ID | 错误信息 |
284| -------- | ---------------------------- |
285|201 | Permission denied.                 |
286|401 | The parameter check failed. Possible causes: <br>1. Mandatory parameters are left unspecified.<br>2. Incorrect parameters types.<br>3. Parameter verification failed. |
287|801 | Capability not supported.          |
288
289**返回值:**
290
291| **类型**  | **说明**                               |
292| ------- | ------------------------------------ |
293| boolean | true: 是默认支付应用,&nbsp;false: 不是默认支付应用。 |
294
295
296**示例:**
297```js
298// 适用于除轻量级智能穿戴产品之外其它设备
299import { cardEmulation } from '@kit.ConnectivityKit';
300import { bundleManager, Want } from '@kit.AbilityKit';
301
302// 需要初始化 elementName、bundleName、abilityName,根据实际应用信息更改为正确的值
303let elementName: bundleManager.ElementName = {
304  bundleName: "com.example.myapplication",
305  moduleName: "entry",
306  abilityName: "EntryAbility"
307};
308
309let isDefaultService: boolean = cardEmulation.isDefaultService(elementName, cardEmulation.CardType.PAYMENT);
310```
311
312<!--code_no_check_fa-->
313```js
314// 适用于轻量化智能穿戴设备
315import cardEmulation from '@ohos.nfc.cardEmulation';
316
317let appName = "com.example.testquestionlite";
318let isDefaultService = cardEmulation.isDefaultService(appName, cardEmulation.CardType.PAYMENT);
319```
320
321## HceService<sup>8+</sup>
322
323提供HCE卡模拟的实现,主要包括接收对端读卡设备的APDU数据,并响应APDU数据到对端读卡设备。使用HCE相关接口前,必须先判断设备是否支持HCE卡模拟能力。
324
325### startHCE<sup>(deprecated)</sup>
326
327startHCE(aidList: string[]): boolean
328
329启动HCE业务功能。包括设置当前应用为前台优先,动态注册AID列表。
330
331> **说明:**
332> 从 API version 8 开始支持,从 API version 9 开始废弃,建议使用[start](#start9)替代。
333
334**需要权限:** ohos.permission.NFC_CARD_EMULATION
335
336**系统能力:** SystemCapability.Communication.NFC.CardEmulation
337
338**参数:**
339
340| 参数名  | 类型     | 必填 | 说明                    |
341| ------- | -------- | ---- | ----------------------- |
342| aidList | string[] | 是   | 动态注册卡模拟的AID列表。 |
343
344**返回值:**
345
346| **类型**  | **说明**                                 |
347| ------- | -------------------------------------- |
348| boolean | true: 启动HCE功能或HCE已启动,&nbsp;false: 启动失败。 |
349
350### start<sup>9+</sup>
351
352start(elementName: [ElementName](../apis-ability-kit/js-apis-bundleManager-elementName.md), aidList: string[]): void
353
354启动HCE业务功能。包括设置当前应用为前台优先,动态注册AID列表。
355
356**需要权限:** ohos.permission.NFC_CARD_EMULATION
357
358**系统能力:** SystemCapability.Communication.NFC.CardEmulation
359
360**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
361
362**参数:**
363
364| 参数名  | 类型     | 必填 | 说明                    |
365| ------- | -------- | ---- | ----------------------- |
366| elementName | [ElementName](../apis-ability-kit/js-apis-bundleManager-elementName.md) | 是   | 所属应用声明NFC卡模拟能力的页面信息(至少包含bundleName、abilityName这两项的赋值),不可以为空。 |
367| aidList | string[] | 是   | 动态注册卡模拟的AID列表,允许为空。 |
368
369**错误码:**
370
371以下错误码的详细介绍请参见[NFC错误码](errorcode-nfc.md)。
372
373| 错误码ID | 错误信息|
374| ------- | -------|
375|201 | Permission denied.                 |
376|401 | The parameter check failed. Possible causes: <br>1. Mandatory parameters are left unspecified.<br>2. Incorrect parameters types.<br>3. Parameter verification failed. |
377|801 | Capability not supported.          |
378| 3100301 | Card emulation running state is abnormal in service. |
379
380### stopHCE<sup>(deprecated)</sup>
381
382stopHCE(): boolean
383
384停止HCE业务功能。包括退出当前应用前台优先,释放动态注册的AID列表,释放hceCmd的订阅。
385
386> **说明:**
387> 从 API version 8 开始支持,从 API version 9 开始废弃,建议使用[stop](#stop9)替代。
388
389**需要权限:** ohos.permission.NFC_CARD_EMULATION
390
391**系统能力:** SystemCapability.Communication.NFC.CardEmulation
392
393**返回值:**
394
395| **类型**  | **说明**                                 |
396| ------- | -------------------------------------- |
397| boolean | true: 禁用HCE功能或HCE已禁用,false: 禁用失败。 |
398
399**示例:**
400
401示例请参见[on](#on8)接口的示例。
402
403### stop<sup>9+</sup>
404
405stop(elementName: [ElementName](../apis-ability-kit/js-apis-bundleManager-elementName.md)): void
406
407停止HCE业务功能。包括取消APDU数据接收的订阅,退出当前应用前台优先,释放动态注册的AID列表。应用程序需要在HCE卡模拟页面的onDestroy函数里调用该接口。
408
409**需要权限:** ohos.permission.NFC_CARD_EMULATION
410
411**系统能力:** SystemCapability.Communication.NFC.CardEmulation
412
413**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
414
415**参数:**
416
417| 参数名  | 类型     | 必填 | 说明                    |
418| ------- | -------- | ---- | ----------------------- |
419| elementName | [ElementName](../apis-ability-kit/js-apis-bundleManager-elementName.md) | 是   | 所属应用声明NFC卡模拟能力的页面信息(至少包含bundleName、abilityName这两项的赋值),不可以为空。 |
420
421**错误码:**
422
423以下错误码的详细介绍请参见[NFC错误码](errorcode-nfc.md)。
424
425| 错误码ID | 错误信息|
426| ------- | -------|
427|201 | Permission denied.                 |
428|401 | The parameter check failed. Possible causes: <br>1. Mandatory parameters are left unspecified.<br>2. Incorrect parameters types.<br>3. Parameter verification failed. |
429|801 | Capability not supported.          |
430| 3100301 | Card emulation running state is abnormal in service. |
431
432### on<sup>8+</sup>
433
434on(type: 'hceCmd', callback: AsyncCallback\<number[]>): void
435
436订阅回调,用于接收对端读卡设备发送的APDU数据。应用程序需要在HCE卡模拟页面的onCreate函数里面调用该订阅函数。
437
438**需要权限:** ohos.permission.NFC_CARD_EMULATION
439
440**系统能力:** SystemCapability.Communication.NFC.CardEmulation
441
442**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
443
444**参数:**
445
446| 参数名   | 类型                    | 必填 | 说明                                         |
447| -------- | ----------------------- | ---- | -------------------------------------------- |
448| type     | string                  | 是   | 要订阅的回调类型,固定填"hceCmd"字符串。                         |
449| callback | AsyncCallback\<number[]> | 是   | 订阅的事件回调,入参是符合APDU协议的数据,每个number十六进制表示,范围是0x00~0xFF。 |
450
451**错误码:**
452
453以下错误码的详细介绍请参见[NFC错误码](errorcode-nfc.md)。
454
455| 错误码ID | 错误信息|
456| ------- | -------|
457|201 | Permission denied.                 |
458|401 | Invalid parameter.                 |
459|801 | Capability not supported.          |
460
461**示例:**
462```js
463// 适用于除轻量级智能穿戴产品之外其它设备
464import { hilog } from '@kit.PerformanceAnalysisKit';
465import { cardEmulation } from '@kit.ConnectivityKit';
466import { AsyncCallback } from '@kit.BasicServicesKit';
467import { ElementName } from './bundleManager/ElementName'
468import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
469
470let hceService: cardEmulation.HceService = new cardEmulation.HceService();
471let element: ElementName;
472
473export default class EntryAbility extends UIAbility {
474  onCreate(want: Want, param: AbilityConstant.LaunchParam) {
475    hilog.info(0x0000, 'testHce', '%{public}s', 'Ability onCreate');
476    element = {
477      bundleName: want.bundleName ?? '',
478      abilityName: want.abilityName ?? '',
479      moduleName: want.moduleName
480    }
481    const apduCallback: AsyncCallback<number[]> = (err, data) => {
482      //处理数据和异常
483      console.log("got apdu data");
484    };
485    hceService.on('hceCmd', apduCallback);
486  }
487  onDestroy() {
488    hilog.info(0x0000, 'testHce', '%{public}s', 'Ability onDestroy');
489    hceService.stop(element);
490  }
491  // 生命周期内的其它功能
492}
493```
494
495**示例:**
496<!--code_no_check_fa-->
497```js
498// 适用于轻量级智能穿戴设备
499import cardEmulation from '@ohos.nfc.cardEmulation';
500
501let appName = "com.example.testquestionlite";
502
503export default {
504  data:{
505    fontSize: '30px',
506    fontColor: '#50609f',
507    hide: 'show',
508    headCon: appName,
509    paymentAid: ["A0000000041010", "A0000000041012"]
510  },
511  onCreate() {
512    console.info('onCreate');
513  },
514  onReady() {
515    cardEmulation.hasHceCapability();
516    cardEmulation.isDefaultService(appName, cardEmulation.CardType.PAYMENT);
517    cardEmulation.isDefaultService(appName, cardEmulation.CardType.OTHER);
518    let HceService = new cardEmulation.HceService();
519
520    HceService.start(appName, this.paymentAid);
521    HceService.on("hceCmd", (data) => {
522      console.log('data:' + data);
523      // 应用程序实际想要发送的数据, 此处仅作为示例
524      let responseData = [0x1, 0x2];
525      HceService.transmit(responseData, () => {
526        console.log('sendResponse start');
527      });
528      console.log('sendResponse end');
529    });
530  },
531  onDestroy() {
532  }
533  // 生命周期内的其它功能
534}
535```
536
537### off<sup>18+</sup>
538
539off(type: 'hceCmd', callback?: AsyncCallback\<number[]>): void
540
541取消APDU数据接收的订阅。
542
543**需要权限:** ohos.permission.NFC_CARD_EMULATION
544
545**系统能力:** SystemCapability.Communication.NFC.CardEmulation
546
547**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
548
549**参数:**
550
551| 参数名   | 类型                    | 必填 | 说明                                         |
552| -------- | ----------------------- | ---- | -------------------------------------------- |
553| type     | string                  | 是   | 要取消订阅的事件类型,固定填"hceCmd"字符串。                         |
554| callback | AsyncCallback\<number[]> | 否   | 订阅的事件回调,每个number十六进制表示,范围是0x00~0xFF。 |
555
556**错误码:**
557
558以下错误码的详细介绍请参见[NFC错误码](errorcode-nfc.md)。
559
560| 错误码ID | 错误信息|
561| ------- | -------|
562|201 | Permission denied.                 |
563|801 | Capability not supported.          |
564
565**示例:**
566```js
567// 适用于除轻量级智能穿戴产品之外其它设备
568import { hilog } from '@kit.PerformanceAnalysisKit';
569import { cardEmulation } from '@kit.ConnectivityKit';
570import { AsyncCallback } from '@kit.BasicServicesKit';
571import { ElementName } from './bundleManager/ElementName'
572import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
573
574let hceService: cardEmulation.HceService = new cardEmulation.HceService();
575let element: ElementName;
576const apduCallback: AsyncCallback<number[]> = (err, data) => {
577  // 处理数据和异常
578  console.log("AsyncCallback got apdu data");
579};
580
581export default class EntryAbility extends UIAbility {
582  onCreate(want: Want, param: AbilityConstant.LaunchParam) {
583    hilog.info(0x0000, 'testHce', '%{public}s', 'Ability onCreate');
584    element = {
585      bundleName: want.bundleName ?? '',
586      abilityName: want.abilityName ?? '',
587      moduleName: want.moduleName
588    }
589    hceService.on('hceCmd', apduCallback);
590  }
591  onDestroy() {
592    hilog.info(0x0000, 'testHce', '%{public}s', 'Ability onDestroy');
593    hceService.off('hceCmd', apduCallback);
594    hceService.stop(element);
595  }
596  // 生命周期内的其它功能
597}
598```
599
600### sendResponse<sup>(deprecated)</sup>
601
602sendResponse(responseApdu: number[]): void
603
604发送APDU数据到对端读卡设备。
605
606> **说明:**
607> 从 API version 8 开始支持,从 API version 9 开始废弃,建议使用[transmit](#transmit9)替代。
608
609**需要权限:** ohos.permission.NFC_CARD_EMULATION
610
611**系统能力:** SystemCapability.Communication.NFC.CardEmulation
612
613**参数:**
614
615| 参数名       | 类型     | 必填 | 说明                                               |
616| ------------ | -------- | ---- | -------------------------------------------------- |
617| responseApdu | number[] | 是   | 发送到对端读卡设备的符合APDU协议的数据,每个number十六进制表示,范围是0x00~0xFF。 |
618
619### transmit<sup>9+</sup>
620
621transmit(response: number[]): Promise\<void>
622
623发送APDU数据到对端读卡设备,使用Promise异步回调。应用程序必须在[on](#on8)收到读卡设备发送的APDU数据后,才调用该接口响应数据。
624
625**需要权限:** ohos.permission.NFC_CARD_EMULATION
626
627**系统能力:** SystemCapability.Communication.NFC.CardEmulation
628
629**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
630
631**参数:**
632
633| 参数名       | 类型     | 必填 | 说明                                               |
634| ------------ | -------- | ---- | -------------------------------------------------- |
635| response | number[] | 是   | 发送到对端读卡设备的符合APDU协议的数据,每个number十六进制表示,范围是0x00~0xFF。 |
636
637**返回值:**
638
639| **类型**  | **说明**                                 |
640| ------- | -------------------------------------- |
641| Promise\<void> | 以Promise形式异步返回发送APDU数据的结果。 |
642
643**错误码:**
644
645以下错误码的详细介绍请参见[NFC错误码](errorcode-nfc.md)。
646
647| 错误码ID | 错误信息|
648| ------- | -------|
649|201 | Permission denied.                 |
650|401 | The parameter check failed. Possible causes: <br>1. Mandatory parameters are left unspecified.<br>2. Incorrect parameters types.<br>3. Parameter verification failed. |
651|801 | Capability not supported.          |
652| 3100301 | Card emulation running state is abnormal in service. |
653
654**示例:**
655```js
656// 适用于除轻量级智能穿戴产品之外其它设备
657import { cardEmulation } from '@kit.ConnectivityKit';
658import { BusinessError } from '@kit.BasicServicesKit';
659
660let hceService: cardEmulation.HceService = new cardEmulation.HceService();
661
662// 应用程序实际想要发送的数据, 此处仅作为示例
663const responseData = [0x1, 0x2];
664hceService.transmit(responseData).then(() => {
665  // 处理 promise 的回调
666  console.log("transmit Promise success.");
667}).catch((err: BusinessError) => {
668  console.error("transmit Promise error:", err);
669});
670```
671
672<!--code_no_check_fa-->
673```js
674// 适用于轻量级智能穿戴设备
675import cardEmulation from '@ohos.nfc.cardEmulation';
676
677let hceService = new cardEmulation.HceService();
678
679// 应用程序实际想要发送的数据, 此处仅作为示例
680let responseData = [0x1, 0x2];
681hceService.transmit(responseData).then(() => {
682  // 处理 promise 的回调
683  console.log("transmit Promise success.");
684});
685console.log("transmit Promise end.");
686```
687
688### transmit<sup>9+</sup>
689
690transmit(response: number[], callback: AsyncCallback\<void>): void
691
692发送APDU数据到对端读卡设备,使用Callback异步回调。应用程序必须在[on](#on8)收到读卡设备发送的APDU数据后,才调用该接口响应数据。
693
694**需要权限:** ohos.permission.NFC_CARD_EMULATION
695
696**系统能力:** SystemCapability.Communication.NFC.CardEmulation
697
698**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
699
700**参数:**
701
702| 参数名  | 类型     | 必填 | 说明                    |
703| ------- | -------- | ---- | ----------------------- |
704| response | number[] | 是   | 发送到对端读卡设备的符合APDU协议的数据,每个number十六进制表示,范围是0x00~0xFF。 |
705| callback | AsyncCallback\<void> | 是   | 回调函数。当发送APDU数据成功时,err为undefined,否则为错误对象。 |
706
707**错误码:**
708
709以下错误码的详细介绍请参见[NFC错误码](errorcode-nfc.md)。
710
711| 错误码ID | 错误信息|
712| ------- | -------|
713|201 | Permission denied.                 |
714|401 | The parameter check failed. Possible causes: <br>1. Mandatory parameters are left unspecified.<br>2. Incorrect parameters types.<br>3. Parameter verification failed. |
715|801 | Capability not supported.          |
716| 3100301 | Card emulation running state is abnormal in service. |
717
718**示例:**
719```js
720// 适用于除轻量级智能穿戴产品之外其它设备
721import { cardEmulation } from '@kit.ConnectivityKit';
722import { BusinessError } from '@kit.BasicServicesKit';
723
724let hceService: cardEmulation.HceService = new cardEmulation.HceService();
725
726// 应用程序实际想要发送的数据, 此处仅作为示例
727try {
728  const responseData = [0x1, 0x2];
729
730  hceService.transmit(responseData, (err : BusinessError)=> {
731    if (err) {
732      console.error(`transmit AsyncCallback err Code: ${err.code}, message: ${err.message}`);
733    } else {
734      console.log("transmit AsyncCallback success.");
735    }
736  });
737} catch (error) {
738  console.error(`transmit AsyncCallback catch Code: ${(error as BusinessError).code}, ` +
739    `message: ${(error as BusinessError).message}`);
740}
741```
742
743<!--code_no_check_fa-->
744```js
745// 适用于轻量级智能穿戴设备
746import cardEmulation from '@ohos.nfc.cardEmulation';
747
748let hceService = new cardEmulation.HceService();
749
750// 应用程序实际想要发送的数据, 此处仅作为示例
751let responseData = [0x1, 0x2];
752hceService.transmit(responseData, () => {
753  console.log("transmit Promise success.");
754});
755console.log("transmit Promise end.");
756```
757
758