如何将ndef消息写入nfc标记?我必须更改清单文件吗?到目前为止,我有代码生成ndef消息:
public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) {
byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));
Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16");
byte[] textBytes = payload.getBytes(utfEncoding);
int utfBit = encodeInUtf8 ? 0 : (1 << 7);
char status = (char) (utfBit + langBytes.length);
byte[] data = new byte[1 + langBytes.length + textBytes.length];
data[0] = (byte) status;
System.arraycopy(langBytes, 0, data, 1, langBytes.length);
System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length);
NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
NdefRecord.RTD_TEXT, new byte[0], data);
return record;
}
如何发现标签?有人能帮我吗?
1条答案
按热度按时间qacovj5a1#
所以我会忽略什么谷歌文件阅读https://developer.android.com/guide/topics/connectivity/nfc/nfc 对于读/写https://developer.android.com/guide/topics/connectivity/nfc/advanced-nfc#read-写,因为这提供了一个非常糟糕的用户体验,写标签,并导致许多失败的写,因为用户的行为。
为了使用android可靠地编写nfc,你应该使用更新的更好的
enableReaderMode
应用程序编程接口https://developer.android.com/reference/android/nfc/nfcadapter#enablereadermode(android.app.activity、%20android.nfc.nfcadapter.readercallback、%20int、%20android.os.bundle)使用这个新的api可以减少很多失败的写入和损坏的卡,因为您可以控制何时发出通知声音。和老人在一起
Intent
基于系统的系统应用程序暂停你的应用程序,然后读取卡片并发出通知声音,然后用户在你的应用程序恢复之前使用卡片方式,并有机会处理卡片数据并写入卡片。用新的
enableReaderMode
如果您打开系统通知声音,并且您的应用程序从未暂停以读取nfc卡,则您可以读取和写入该卡,然后当您成功写入该卡时,您可以自己发出通知声音。因为错误是无声的,所以用户会一直尝试出示卡片,直到成功通知。附加的逻辑是不需要每次显示一张卡或显示不同的卡时都向其写入相同的消息。
一些示例代码(改编自我的应用程序,用于nfc低级读写(而非ndef标记技术))