我有这个代码(Java)来编写nfc标签:
private Tag tag;
@Override
protected void onNewIntent(Intent intent) {
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
}
}
private boolean write(String message, Tag tag) throws IOException, FormatException {
Ndef ndef = Ndef.get(tag);
ndef.connect();
if (ndef.isWritable()) {
ndef.writeNdefMessage(message);
}
ndef.close();
}
在我更新我的应用程序以与最新版本的 Android 兼容之前,上述代码一直有效。
现在在 Android 13 上运行此代码会出现以下异常:
java.lang.SecurityException: Permission Denial: Tag ( ID: XX XX XX XX XX XX XX ) is out of date
at android.nfc.Tag.getTagService(Tag.java:388)
at android.nfc.tech.BasicTagTechnology.connect(BasicTagTechnology.java:73)
at android.nfc.tech.Ndef.connect(Ndef.java:71)
我知道存在一些兼容性问题,但我不知道到底是什么。
我感谢任何形式的帮助。
更新:感谢您的反馈和一些额外的研究,我找到了解决方案。
我从 onNewIntent 函数触发此 NFC 写入。由于某些安全问题,似乎不再可能了。我通过从 onResume 函数触发 NFC 写入来解决这个问题。
感谢大家的帮助。
这是设计的目的。这里的问题是您存储了一个标签句柄并尝试稍后使用它(甚至可能在让用户按下按钮之后?)。您一开始就不应该这样做,NFC 是用户交互,您应该在扫描标签后立即采取行动,并使交易尽可能短(毕竟用户不擅长将两个设备长时间保持在一起) 。 Android 最终减少了这方面不良编程习惯的表面(参见here),方法是在您尝试访问标签时确保您的标签句柄是最新的。一旦标签断开连接或发现新标签,此更改将阻止访问无效的标签句柄。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)