You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 13中NFC写入时ndef.connect()触发SecurityException的问题及解决

Android 13 NFC写入抛出SecurityException问题解决

问题场景

我有一段用于写入NFC标签的Java代码,在适配Android最新版本前可正常工作,但在Android 13上运行时抛出权限拒绝异常,提示Tag过期。

原代码

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();
}

抛出的异常

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)

问题原因及解决方案

Android 13对NFC操作的安全校验逻辑做了更新:onNewIntent中获取的Tag对象存在时效性限制,直接在此生命周期内触发写入操作,系统会判定Tag对象已过期,从而抛出权限拒绝异常。

解决方法是将NFC写入操作的触发逻辑从onNewIntent迁移至onResume方法中,确保在Tag对象处于有效状态时执行写入流程,即可解决该异常。

内容的提问来源于stack exchange,提问作者autoimovil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:52:10