- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将 NDEF 消息写入 NFC 标签?
我必须更改 list 文件吗?
到目前为止,我有生成 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;
}
如何发现 TAG?
最佳答案
我会忽略谷歌文档所说的阅读 https://developer.android.com/guide/topics/connectivity/nfc/nfc并在 https://developer.android.com/guide/topics/connectivity/nfc/advanced-nfc#read-write 进行读/写因为这为写入标签提供了非常糟糕的用户体验,并且由于用户行为导致许多失败的写入。
要使用 Android 可靠地写入 NFC,您应该使用更新更好的 enableReaderMode
API https://developer.android.com/reference/android/nfc/NfcAdapter
使用这个较新的 API 可以减少失败的写入和损坏的卡,因为您可以控制通知声音何时发生。与老Intent
基于系统的系统应用程序暂停您的应用程序,然后读取卡片并发出通知声音,然后用户在您的应用程序恢复之前采取卡片方式并有机会处理卡片数据并写入卡片。
使用较新的 enableReaderMode
API你关闭系统通知声音,你的应用程序永远不会暂停读取NFC卡,然后你可以读取和写入卡,然后当你成功写入卡时,你可以自己发出通知声音。
因为任何错误都是无声的,所以用户将继续尝试出示卡片,直到成功通知。不需要在每次出示单张卡片或出示不同卡片时都写入相同消息的附加逻辑。
一些示例代码(改编自我的应用程序进行 NFC 低级读写(不是 Ndef Tag 技术))
public class NFCActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback{
private NfcAdapter mNfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nfc);
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
// Rest of Activity setup
}
@Override
protected void onResume() {
super.onResume();
if(mNfcAdapter!= null) {
Bundle options = new Bundle();
// Work around for some broken Nfc firmware implementations that poll the card too fast
options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, 250);
// Enable ReaderMode for all types of card and disable platform sounds
mNfcAdapter.enableReaderMode(this,
this,
NfcAdapter.FLAG_READER_NFC_A |
NfcAdapter.FLAG_READER_NFC_B |
NfcAdapter.FLAG_READER_NFC_F |
NfcAdapter.FLAG_READER_NFC_V |
NfcAdapter.FLAG_READER_NFC_BARCODE |
NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS,
options);
}
}
@Override
protected void onPause() {
super.onPause();
if(mNfcAdapter!= null)
mNfcAdapter.disableReaderMode(this);
}
// This method is run in another thread when a card is discovered
// !!!! This method cannot cannot direct interact with the UI Thread
// Use `runOnUiThread` method to change the UI from this method
public void onTagDiscovered(Tag tag) {
// Read and or write to Tag here to the appropriate Tag Technology type class
// in this example the card should be an Ndef Technology Type
Ndef mNdef = Ndef.get(tag);
// Check that it is an Ndef capable card
if (mNdef!= null) {
// If we want to read
// As we did not turn on the NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK
// We can get the cached Ndef message the system read for us.
NdefMessage mNdefMessage = mNdef.getCachedNdefMessage();
// Or if we want to write a Ndef message
// Create a Ndef Record
NdefRecord mRecord = NdefRecord.createTextRecord("en","English String");
// Add to a NdefMessage
NdefMessage mMsg = new NdefMessage(mRecord);
// Catch errors
try {
mNdef.connect();
mNdef.writeNdefMessage(mMsg);
// Success if got to here
runOnUiThread(() -> {
Toast.makeText(getApplicationContext(),
"Write to NFC Success",
Toast.LENGTH_SHORT).show();
});
// Make a Sound
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(),
notification);
r.play();
} catch (Exception e) {
// Some error playing sound
}
} catch (FormatException e) {
// if the NDEF Message to write is malformed
} catch (TagLostException e) {
// Tag went out of range before operations were complete
} catch (IOException e){
// if there is an I/O failure, or the operation is cancelled
} finally {
// Be nice and try and close the tag to
// Disable I/O operations to the tag from this TagTechnology object, and release resources.
try {
mNdef.close();
} catch (IOException e) {
// if there is an I/O failure, or the operation is cancelled
}
}
}
}
关于java - 如何将 NDEF 记录写入 NFC 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64920307/
有没有办法再次将 NDEF 格式的 NFC 标签转换为 Raw 格式,即使其成为非 NDEF。 提前致谢 最佳答案 在某些情况下这是可能的。 NFC 论坛有 4 种标准化 NFC 标签,它们可以包含
已经阅读了一些与我类似的问题 - 如果我错过了解决我的困境的方法,我只能道歉,但我真的无法解决这个问题! 我已经设法让我的 nfc Activity 正常工作 - 点击标签会启动我的应用程序的正确 A
我编写了一个小函数,将原始数据格式化为 NDEF,然后将其写入标签。 该函数的主要部分工作没有任何问题,唯一不工作的是,如果扇区为空,它会不断将 0xFF 而不是 0x00 写入扇区末尾。 代码: i
我有一个带有 ndef 文本记录的 nfc 标签。正文为 Paris/London 任何拥有 nfc 标签读取应用程序的人都可以像这样读取它。 我应该如何加密/编码该文本,以便人类无法阅读?我希望我的
我正在使用 Raspberry Pi 和 RFID-RC522 板开发一个 Python 项目。我使用 NXP NTAG213 作为 NFC 标签。我现在的计划是在标签上存储链接。我可以毫无问题地读取
我已经将 NDEF 文本记录 - “poo”(只是测试)写入了 NFC 论坛 2 类标签,我需要一些帮助来了解具体写入的内容以及格式。发送到标签的命令包含四个数组: new Uint8Array([1
我正在为 NFC 设备实现一个 Android 应用程序。我在两个不同的 Android 设备上使用 Ndef、NfcV 和 NdefFormatable 标签:Samsung Galaxy SII
这是我第一次使用基于 NFC 的功能。我遇到了有关编码 NDEF 消息的问题。 我们尝试了 2 个应用程序将数据写入 NFC 标签,名称是 NDEF 和 TagWriter。我正在将我的数据写入文本格
我正在编写基于 NFC 的应用程序,该应用程序将使用 Url 扫描 NFC 标签。扫描标签后,应用程序应从数据库中检索信息并将其显示在 ListView 中。 当我扫描 NFC 标签时出现错误。 E
我想在 while() 循环中写入不同的 NDEF 消息。 最后编辑:似乎微 Controller 不能处理数据那么快,所以我的问题无法解决。 //ndef.connect(); ndef.write
在 Android 上,一旦 NFC 标签靠近手机,系统就会向我的应用程序发送一个 Intent ,其中包含一个允许我读取和写入该标签的 NDEF 消息的对象。具体来说,我可以随时写入这个标签,而它仍
我刚开始使用 Android NFC 进行编码,我已经成功地将 NDEF 数据读写到 mifare classic 标签中。问题是当应用程序从 ndef 记录读取有效负载时,它总是在文本的开头包含字符
我一直在寻找 NDEF 格式和普通 NFC 标签之间的差异。 让我们考虑 1k Mifare 经典标签。 它们有 16 个扇区和 4 个块。 将标签格式化为 NDEF 后, 标签上发生了什么“内部”变
我正在寻找与 NDEF 兼容并为大多数运行 Android 4.x 的设备所支持的 NFC 芯片,不知何故我只能找到很少的相关信息。谁能说出制造商/芯片型号或提供一些有用的链接? 最佳答案 参见 ht
我多次阅读 Android 开发者网站上关于 NFC 标签分发器 (http://developer.android.com/guide/topics/connectivity/nfc/index.h
我正在使用 setNdefPushMessageCallback 通过 Android Beam (TM) 从一台 Android 设备向另一台设备发送 NDEF 消息(文本/纯文本)。在 onRes
我正在尝试写入和读取 NDEFMessage 中的多个记录。我的代码在这里对吗?此外,当我读取标签时,我的进程会自行终止。我不确定我哪里出错了.. 写作部分: private NdefMessage
我正在使用 AS3953 来模拟 NFC 标签,并且已经能够使用三星 S4 或带有 Broadcom 芯片组的 Fame 读出简单的 NDEF 消息,现在我正在尝试让它与使用 NXP PN544 Co
我正在使用 NXP 提供的 NDEF 标签和 NFC 标签编写器应用程序,但在索尼手机应用程序中显示内存为 524 字节,但在 MOTO 手机中显示为 52 字节内存。我花了很多时间寻找解决方案,但没
我正在尝试通过扫描 NFC 标签来启动我的应用程序。我有两个标签要测试, 一个(让我们称之为“标签 A”)具有一种 URI 数据类型“http://panasonic.net”和 另一个(我们称之为“
我是一名优秀的程序员,十分优秀!