我想,在应用程序的某一点上,请求用户扫描NFC标记。enableReaderMode
似乎是一个合理的解决方案。但是,它不起作用--考虑一下在一个新的Android项目中(添加了NFC权限)活动中的onCreate
中的以下代码。
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
Toast.makeText(this, "No NFC", Toast.LENGTH_LONG).show();
return;
}
System.out.println("NFC enable reader mode");
nfcAdapter.enableReaderMode(this, tag -> {
System.out.println("NFC tag found");
Toast.makeText(this, "Tag found", Toast.LENGTH_LONG).show();
}, NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK, null);
我在日志中看到了"NFC启用读取器模式“,并且(在一个版本的Android上)当应用程序启动时,标签不会导致其他应用程序打开,这表明阅读器模式确实是活动的( FLAG_READER_SKIP_NDEF_CHECK
阻止ndef检查),但是回调没有被调用。我把标签贴在应用程序的后面,什么也没看到,退出了应用程序,标签立即扫描--所以标签很好,它们的位置也很好,只是出于某种原因,enableReaderMode
不会在标签靠近时导致回调被调用。
我在氧气操作系统10和Android 11上试过。在10上,它显示了上面给出的行为。在11,标签打开其他应用程序,作为正常(即错误地),而不是被抑制的ndef标志。也没叫回电话。
这似乎是一个非常基本的用例,如果它坏了,我会找到几十个关于它的线程,但是我只找到了两种相关的东西:on some device not call callback (NfcAdapter.ReaderCallback) method in nfcAdapter.enableReaderMode和NFCAdpater.enableReaderMode(...) doesn't work consistently if booting in Kiosk mode activity。前者看上去相当相关,后者则不那么相关,但两者都没有得到回答。我想我一定是做错了什么--但是这是一个简单的代码块,我不知道我做错了什么。另外,设备之间存在着不同的行为。有人知道怎么回事吗?
发布于 2022-03-29 06:45:39
您已将enableReaderMode
配置为跳过Ndef检测,但尚未将其配置为读取任何其他标记技术类型
您的标记选项应该如下所示,而不是NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK
,这样才能有效地读取标记
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_SKIP_NDEF_CHECK |
NfcAdapter.FLAG_READER_NO_PLATFORM_SOUND
https://stackoverflow.com/questions/71657452
复制相似问题