智能客服
你问我答,随时在线为你解决问题
NFC标签读写是实用工具类应用的高频使用场景之一,如用户记录网址、文本或应用信息等,以便NFC标签再次贴近手机时自动读取存储的信息并执行相应操作。
本示例基于标准NFC-Tag实现了NFC标签读取与写入。

// NfcUtil.ets
public nfcTagOn(callback: AsyncCallback<tag.TagInfo, void>) {
if (this.nfcTagElementName !== undefined) {
// 调用tag模块中前台优先的接口,使能前台应用程序优先处理所发现的NFC标签功能
tag.on('readerMode', this.nfcTagElementName, TECH_LIST, callback);
this.foregroundRegister = true;
}
// ...
}
// 读卡方法
public async readerModeCb(error: BusinessError, tagInfo: tag.TagInfo) {}
// 写卡方法
public async writeModeCb(error: BusinessError, tagInfo: tag.TagInfo) {} // NdefTagModel.ets
getTagRecords(ndefTag: tag.NdefTag) {
let ndefMessage: tag.NdefMessage = ndefTag.getNdefMessage();
let ndefRecords: tag.NdefRecord[] = ndefMessage.getNdefRecords();
return ndefRecords;
}
// uri解析,通过标识符,匹配协议头
static getUriContent(payload: number[]) {
let res: string = '';
// 解析前缀协议
let prefix = UriPrefixUtil.URI_PREFIX_MAP.get(payload[0]); // 通过标识符,匹配协议头
res = prefix;
// 解析内容
let content = payload.slice(1, payload.length + 1);
res = res + buffer.from(content).toString('utf-8'); // 解析uri主体部分
return res;
}
// 解析文本记录
static getTextContent(payload: number[]) {}
// 解析External记录
static getExternalContent(payload: number[]) {} // WriteCardPage.ets
Button($r('app.string.write_input_button_add_record'), { stateEffect: false }) // 添加记录
.onClick(() => {
if (getRecord !== undefined) {
let record = getRecord(this.inputContent);
if (record) {
this.records.push(record);
this.recordsInfo.push(NdefTagModel.getRecordContent(record));
// ...
this.showSheetNum = -1;
}
}
})
// NdefTagModel.ets
// 创建uri类型的record
static getWriteUriRecord(uri: string): tag.NdefRecord | undefined {}
// 创建文本类型的record
static getWriteTextRecord(text: string) {}
// 创建external的record
static getWriteExternalRecord(bundleName: string) {}
// 写入记录
async writeNdefToTag(ndefRecords: tag.NdefRecord[]): Promise<boolean> {
ndefMessage = tag.ndef.createNdefMessage(records);
// ...
if (this.ndefTag.isConnected() && ndefMessage) {
await this.ndefTag.writeNdef(ndefMessage);
return true;
}
// ...
} ├──entry/src/main/ets // 代码区 │ ├──constants │ │ ├──CommonConstant.ets // 通用常量 │ │ └──Constant.ets // 常量 │ ├──entryability │ │ └──EntryAbility.ets │ ├──model │ │ ├──NdefTagModel.ets // NdefTag模型 │ │ └──NfcATagModel.ets // NfcATag模型 │ ├──pages │ │ ├──HomePage.ets // 主页 │ │ ├──ReadCardPage.ets // 读卡界面 │ │ └──WriteCardPage.ets // 写卡界面 │ └──utils │ ├──NfcUtil.ets // Nfc工具类 │ └──UriPrefixUtil.ets // uri前缀解析类 └──entry/src/main/resources // 应用资源目录