新聞中心
這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS卡模擬功能
場(chǎng)景介紹

你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、企業(yè)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站制作設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、成都品牌網(wǎng)站建設(shè)、網(wǎng)頁(yè)制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺(jué)設(shè)計(jì)專(zhuān)才。
應(yīng)用或者其他模塊可以通過(guò)接口完成以下功能:
- 查詢(xún)是否支持指定安全單元的卡模擬功能,安全單元包括 HCE(Host Card Emulation)、ESE(Embedded Secure Element)和SIM(Subscriber Identity Module)卡。
- 開(kāi)關(guān)卡模擬以及查詢(xún)卡模擬狀態(tài),可以打開(kāi)或關(guān)閉指定技術(shù)類(lèi)型的卡模擬。
- 獲取 NFC 信息,信息包括當(dāng)前激活的安全單元、 Hisee 上電狀態(tài)、是否支持 RSSI 查詢(xún)等信息。
- 根據(jù) NFC 服務(wù)的類(lèi)型獲取刷卡時(shí)選擇服務(wù)的方式,應(yīng)用或者其它模塊可以查詢(xún)支付(Payment)類(lèi)型和非支付(Other)類(lèi)型業(yè)務(wù)選擇服務(wù)的方式。
- 動(dòng)態(tài)設(shè)置和注銷(xiāo)前臺(tái)優(yōu)先應(yīng)用。
- NFC 應(yīng)用的 AID 相關(guān)操作,包括注冊(cè)和刪除應(yīng)用的 AID、查詢(xún)應(yīng)用是否是指定 AID 的默認(rèn)應(yīng)用、獲取應(yīng)用的 AID 等。
- 定義 Host 和 OffHost 服務(wù)的抽象類(lèi),三方應(yīng)用通過(guò)繼承抽象類(lèi)來(lái)實(shí)現(xiàn) NFC 卡模擬功能。
接口說(shuō)明
| 類(lèi)名 | 接口名 | 功能描述 |
|---|---|---|
| CardEmulation | getInstance(NfcController controller) | 創(chuàng)建一個(gè)卡模擬類(lèi)的實(shí)例。 |
| isSupported(int feature) | 查詢(xún)是否支持卡模擬功能。 | |
| setListenMode(int mode) | 設(shè)置卡模擬模式。 | |
| isListenModeEnabled() | 查詢(xún)卡模擬功能是否打開(kāi)。 | |
| getNfcInfo(String key) | 獲取 NFC 的信息。 | |
| getSelectionType(String category) | 根據(jù) NFC 服務(wù)的類(lèi)型獲取刷卡時(shí)選擇服務(wù)的方式。 | |
| registerForegroundPreferred(Ability appAbility, ElementName appName) | 動(dòng)態(tài)設(shè)置前臺(tái)優(yōu)先應(yīng)用。 | |
| unregisterForegroundPreferred(Ability appAbility) | 取消設(shè)置前臺(tái)優(yōu)先應(yīng)用。 | |
| isDefaultForAid(ElementName appName, String aid) | 判斷應(yīng)用是否是指定 AID 的默認(rèn)處理應(yīng)用。 | |
| registerAids(ElementName appName, String type, List |
給應(yīng)用注冊(cè)指定類(lèi)型的AID。 | |
| removeAids(ElementName appName, String type) | 刪除應(yīng)用的指定類(lèi)型的 AID。 | |
| getAids(ElementName appName, String type) | 獲取應(yīng)用中指定類(lèi)型的 AID 列表。 | |
| HostService | sendResponse(byte[] response) | 發(fā)送響應(yīng)的數(shù)據(jù)到對(duì)端設(shè)備。 |
| handleRemoteCommand(byte[] cmd, IntentParams params) | 處理對(duì)端設(shè)備發(fā)送的命令。 | |
| disabledCallback(int errCode) | 連接異常的回調(diào)。 | |
| OffHostService | onConnect(Intent intent) | 連接服務(wù)并獲取遠(yuǎn)程服務(wù)對(duì)象。 |
查詢(xún)是否支持卡模擬功能
- 調(diào)用 NfcController 類(lèi)的 getInstance(Context context) 接口,獲取 NfcController 實(shí)例。
- 調(diào)用 CardEmulation 類(lèi)的 getInstance(NfcController controller) 接口,獲取 CardEmulation 實(shí)例,去管理本機(jī)卡模擬模塊操作。
- 調(diào)用 isSupported(int feature) 接口去查詢(xún)是否 HCE、UICC、ESE 卡模擬。
// 獲取NFC控制對(duì)象
NfcController nfcController = NfcController.getInstance(context);
// 獲取卡模擬控制對(duì)象
CardEmulation cardEmulation = CardEmulation.getInstance(nfcController);
// 查詢(xún)是否支持HCE、UICC、ESE卡模擬,返回值表示是否支持對(duì)應(yīng)安全單元的卡模擬
boolean isSupportedHce = cardEmulation.isSupported(CardEmulation.FEATURE_HCE);
boolean isSupportedUicc = cardEmulation.isSupported(CardEmulation.FEATURE_UICC);
boolean isSupportedEse = cardEmulation.isSupported(CardEmulation.FEATURE_ESE);
開(kāi)關(guān)卡模擬及查詢(xún)卡模擬狀態(tài)
- 調(diào)用 NfcController 類(lèi)的 getInstance(Context context) 接口,獲取 NfcController 實(shí)例。
- 調(diào)用 CardEmulation 類(lèi)的 getInstance(NfcController controller) 接口,獲取 CardEmulation 實(shí)例,去管理本機(jī)卡模擬模塊操作。
- 調(diào)用 setListenMode(int mode) 接口去打開(kāi)或者關(guān)閉卡模擬。
- 調(diào)用 isListenModeEnabled() 接口去查詢(xún)卡模擬是否打開(kāi)。
// 獲取 NFC 控制對(duì)象
NfcController nfcController = NfcController.getInstance(context);
// 獲取卡模擬控制對(duì)象
CardEmulation cardEmulation = CardEmulation.getInstance(nfcController);
// 打開(kāi)卡模擬
cardEmulation.setListenMode(CardEmulation.ENABLE_MODE_ALL);
// 調(diào)用查詢(xún)卡模擬開(kāi)關(guān)狀態(tài)的接口,返回值為卡模擬是否是打開(kāi)的狀態(tài)
boolean isEnabled = cardEmulation.isListenModeEnabled(); // true
// 關(guān)閉卡模擬
cardEmulation.setListenMode(CardEmulation.DISABLE_MODE_A_B);
// 調(diào)用查詢(xún)卡模擬開(kāi)關(guān)狀態(tài)的接口,返回值為卡模擬是否是打開(kāi)的狀態(tài)
isEnabled = cardEmulation.isListenModeEnabled(); // false
獲取 NFC 信息
- 調(diào)用 NfcController 類(lèi)的 getInstance(Context context) 接口,獲取 NfcController 實(shí)例。
- 調(diào)用 CardEmulation 類(lèi)的getInstance(NfcController controller)接口,獲取 CardEmulation 實(shí)例,去管理本機(jī)卡模擬模塊操作。
- 調(diào)用 getNfcInfo(String key)接口去獲取 NFC 信息。
// 獲取NFC控制對(duì)象
NfcController nfcController = NfcController.getInstance(context);
// 獲取卡模擬控制對(duì)象
CardEmulation cardEmulation = CardEmulation.getInstance(nfcController);
// 查詢(xún)本機(jī)當(dāng)前使能的安全單元類(lèi)型
String seType = cardEmulation.getNfcInfo(CardEmulation.KEY_ENABLED_SE_TYPE); // ENABLED_SE_TYPE_ESE
// 查詢(xún)Hisee上電狀態(tài)
String hiseeState = cardEmulation.getNfcInfo(CardEmulation.KEY_HISEE_READY);
// 查詢(xún)是否支持rssi的查詢(xún)
String rssiAbility = cardEmulation.getNfcInfo(CardEmulation.KEY_RSSI_SUPPORTED);
根據(jù)NFC服務(wù)的類(lèi)型獲取刷卡時(shí)選擇服務(wù)的方式
- 調(diào)用 NfcController 類(lèi)的 getInstance(Context context) 接口,獲取 NfcController 實(shí)例。
- 調(diào)用 CardEmulation 類(lèi)的 getInstance(NfcController controller) 接口,獲取 CardEmulation 實(shí)例,去管理本機(jī)卡模擬模塊操作。
- 調(diào)用 getSelectionType(Sring category) 接口去獲取選擇服務(wù)的方式。
// 獲取NFC控制對(duì)象
NfcController nfcController = NfcController.getInstance(context);
// 獲取卡模擬控制對(duì)象
CardEmulation cardEmulation = CardEmulation.getInstance(nfcController);
// 獲取選擇服務(wù)的方式
int result = cardEmulation.getSelectionType(CardEmulation.CATEGORY_PAYMENT); // SELECTION_TYPE_PREFER_DEFAULT
result = cardEmulation.getSelectionType(CardEmulation.CATEGORY_OTHER); // SELECTION_TYPE_ASK_IF_CONFLICT
動(dòng)態(tài)設(shè)置和注銷(xiāo)前臺(tái)優(yōu)先應(yīng)用
- 調(diào)用 NfcController 類(lèi)的 getInstance(Context context)接口,獲取 NfcController 實(shí)例。
- 調(diào)用 CardEmulation 類(lèi)的 getInstance(NfcController controller) 接口,獲取 CardEmulation 實(shí)例,去管理本機(jī)卡模擬模塊操作。
- 調(diào)用 registerForegroundPreferred(Ability appAbility, ElementName appName)接口去動(dòng)態(tài)設(shè)置前臺(tái)優(yōu)先應(yīng)用。
- 調(diào)用 unregisterForegroundPreferred(Ability appAbility)接口去取消設(shè)置前臺(tái)優(yōu)先應(yīng)用。
// 獲取NFC控制對(duì)象
NfcController nfcController = NfcController.getInstance(context);
// 獲取卡模擬控制對(duì)象
CardEmulation cardEmulation = CardEmulation.getInstance(nfcController);
// 動(dòng)態(tài)設(shè)置前臺(tái)優(yōu)先應(yīng)用
cardEmulation.registerForegroundPreferred(new Ability(), new ElementName());
// 注銷(xiāo)前臺(tái)優(yōu)先應(yīng)用
cardEmulation.unregisterForegroundPreferred(new Ability());
NFC 應(yīng)用的 AID 相關(guān)操作
- 調(diào)用 NfcController 類(lèi)的 getInstance(Context context) 接口,獲取 NfcController 實(shí)例。
- 調(diào)用 CardEmulation 類(lèi)的 getInstance(NfcController controller)接口,獲取 CardEmulation 實(shí)例,去管理本機(jī)卡模擬模塊操作。
- 調(diào)用 registerAids(ElementName appName, String type, List
aids) 接口去給應(yīng)用注冊(cè)指定類(lèi)型的 AID。
- 調(diào)用 removeAids(ElementName appName, String type) 接口去刪除應(yīng)用的指定類(lèi)型的 AID。
- 調(diào)用 isDefaultForAid(ElementName appName, String aid) 接口去判斷應(yīng)用是否是指定 AID 的默認(rèn)處理應(yīng)用。
- 調(diào)用 getAids(ElementName appName, String type) 接口去獲取應(yīng)用中指定類(lèi)型的 AID 列表。
// 獲取NFC控制對(duì)象
NfcController nfcController = NfcController.getInstance(context);
// 獲取卡模擬控制對(duì)象
CardEmulation cardEmulation = CardEmulation.getInstance(nfcController);
// 給應(yīng)用注冊(cè)指定類(lèi)型的AID
List aids = new ArrayList();
aids.add(0, "A0028321901280");
aids.add(1, "A0028321901281");
try { cardEmulation.registerAids(new ElementName(), CardEmulation.CATEGORY_PAYMENT, aids);
} catch (IllegalArgumentException e) {
HiLog.error(LABEL, "IllegalArgumentException when registerAids");
}
// 刪除應(yīng)用的指定類(lèi)型的AID
cardEmulation.removeAids(new ElementName(), CardEmulation.CATEGORY_PAYMENT);
cardEmulation.removeAids(new ElementName(), CardEmulation.CATEGORY_OTHER);
// 判斷應(yīng)用是否是指定AID的默認(rèn)處理應(yīng)用
String aid = "A0028321901280";
cardEmulation.isDefaultForAid(new ElementName(), aid);
// 獲取應(yīng)用中指定類(lèi)型的AID列表
try {
cardEmulation.getAids(new ElementName(), CardEmulation.CATEGORY_PAYMENT);
} catch (NullPointerException e) {
HiLog.error(LABEL, "NullPointerException when getAids");
} catch (IllegalArgumentException e) {
HiLog.error(LABEL, "IllegalArgumentException when getAids");
}
Host服務(wù)的抽象類(lèi)
- 三方應(yīng)用的服務(wù)繼承 HostService,實(shí)現(xiàn) HCE 卡模擬功能。
- 三方應(yīng)用自定義實(shí)現(xiàn)抽象方法handleRemoteCommand(byte[] cmd, IntentParams params)和disabledCallback()。
- 三方應(yīng)用自定義功能。
// 三方HCE應(yīng)用的服務(wù)繼承HostService,實(shí)現(xiàn)HCE卡模擬功能
public class AppService extends HostService {
@Override
public byte[] handleRemoteCommand(byte[] cmd, IntentParams params) {
// 三方應(yīng)用自定義接口實(shí)現(xiàn)。
}
@Override
public void disabledCallback(int errCode) {
// 三方應(yīng)用自定義接口實(shí)現(xiàn)。
}
// 三方應(yīng)用自定義功能
} 本文名稱(chēng):創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS卡模擬功能
分享URL:http://fisionsoft.com.cn/article/dpedcgo.html


咨詢(xún)
建站咨詢(xún)
