Android 13 上的 ndef.connect() 时出现 SecurityException

2023-12-01

我有这个代码(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(使用前将#替换为@)

Android 13 上的 ndef.connect() 时出现 SecurityException 的相关文章

随机推荐

  • BigQuery - 将通用 JSON 转换为 STRUCT

    我的 BigQuery 中有一个列 其中包含简单的单深度 JSON 格式的各种不同消息 我想将其提取到 STRUCT 中 输入表看起来像 并应转化为 我知道 BigQuery json 函数 例如JSON EXTRACT例如发布的here
  • 如何查找 Windows 中哪个程序正在使用端口 80? [复制]

    这个问题在这里已经有答案了 如何查找 Windows 中哪个程序正在使用端口 80 我找不到它 输入命令 netstat aon findstr 80 它将显示所有使用端口 80 的进程 注意pid 进程 ID 在右栏中 如果您想释放端口
  • doctrine2 queryBuilder 必须仅返回与数组值 (ids) 匹配的结果:0/Null 和/或 1 和/或 许多 id 必须返回 1 个结果

    我有一个名为的集合数组 configurations 该数组与我的实体匹配Configuration php连接到Product php as a ManyToMany 现在我有另一个名为WorkType php这也连接到Configura
  • 是否可以在空手道中的 read() 调用中评估变量? [复制]

    这个问题在这里已经有答案了 demoType是一个变量 我希望该变量的内容是在以下表达式中计算的内容 def call read demoType 相反 它尝试评估变量的名称而不是其内容 不存在这样的事情def call 也许你正在尝试 c
  • Request.IsAjaxRequest 在 MVC3 中永远不会返回 true

    我正在使用 Asp net MVC3 并尝试向服务器执行一个简单的 Ajax 发布 该服务器返回部分视图并在搜索期间更新我的项目列表 using Ajax BeginForm PartialUpdate Listing new AjaxOp
  • 将图像转换为字节数组,反之亦然

    我正在尝试通过 android 将图像作为字节数组发送 然后在服务器端将其转换回 png 文件 我得到IllegalArgumentException在服务器端 这是我的 android 代码 它将图像转换为字节数组并将其作为请求发送到服务
  • pdfpages 在最新版本上生成错误

    我今天尝试用 Latex 重新编译我的学士论文 但遇到了 pdfpages 包的问题 虽然当我最初编译论文时它工作得很好 但现在它会抛出 未定义的控制序列 错误 新的 pdfpages 包 打包于 24 09 2019 Miktex 控制台
  • 在 onPause() 或 onStop() 中保存持久数据?

    确实 当您的应用程序需要保存一些持久数据时 您应该始终在onPause 方法除了onStop 方法 因为如果 android 操作系统杀死了你的进程 那么onStop and onDestroy 方法从未被调用 您应该将所有关键数据保存在o
  • Java:以格式化字符串的形式返回条目长度变化很大的二维数组

    我想写一个toStringMatrix 类的方法 我需要返回包含矩阵的格式化字符串 矩阵中的条目长度差异很大 因此只需用TAB这不是窍门 现在我有以下内容 public String toString String str for int
  • 本地调试 Nuget 包

    我有一个 Visual Studio net core api 它在我的解决方案中引用基于神器的 nuget 包 nuget包是一个 net core类库 在我的本地 我有两个解决方案 主要 API 解决方案和类库解决方案 我想要实现的是
  • 访问模型/控制器中的视图

    我有一个像这样的 MyData php 类 class myData function render view new Zend View view gt str This is string echo view gt render myv
  • 如何检查sql中表中的任何列中是否存在某个值

    假设我的表中有 100 列 我不知道特定值可能存在于哪些列中 所以 我想检查所有列 如果它存在于 100 列中的任何一列中 我想选择它 我搜索了一下 在大多数地方 解决方案似乎类似于以下内容 select from tablename wh
  • 如何使用 Rselenium 在网页中查找 元素?

    我在网页中有以下标签 a target self href View Data Set a 如何在 Rselenium 中查找该元素 例如 如果我当前的会话保存在 remDr 中 我应该搜索什么 webElem lt remDr findE
  • interdiff 能做什么而 diff 不能做什么?

    如果我想找到两个差异之间的差异 为什么我不能diff两个差异 我已经测试过diff diff1 diff2 and interdiff diff1 diff2并且没有发现输出有任何差异 在什么情况下它们会有所不同 我完全知道 interdi
  • 响应式 Adsense 广告大小随屏幕方向变化而调整(同时使用 Bootstrap 进行布局)

    在我的网站上 我使用 Bootstrap 3 2 进行响应式设计 并尝试在其中嵌入 Adsense 响应式添加 我在方向更改方面遇到问题 我希望添加会在此类事件中调整大小 但它不会发生 Adsense 准备好这样的功能了吗 一些old po
  • 集合接口与数组

    我们正在学习集合接口 我想知道你们对于它的一般用途是否有什么好的建议 有哪些用 Collection 可以做但用数组做不到的事情 你可以用数组做哪些你不能用集合做的事情 除了允许重复 最简单的思考方式是 集合基本上在每一个方面都击败了对象数
  • 按值排序字典 python [重复]

    这个问题在这里已经有答案了 假设我有一个字典 data 1 b 2 a 我想按 b 和 a 对数据进行排序 这样我就得到了结果 a b 我怎么做 有任何想法吗 要获取值 请使用 sorted data values 要获取匹配的密钥 请使用
  • 应用程序启动时的种子数据库 - ASP MVC 3 和 EF

    由于某种原因 我无法让我的应用程序在应用程序启动时使用一些测试数据为数据库播种 执行顺序 1 Application Start in Global asax Database SetInitializer
  • Windows 8 上的文件历史记录

    我有一个相关问题使用 C 获取 设置 文件历史记录 Windows 8 设置 Windows提供了API文件历史API that 允许应用程序读取和修改文件历史记录配置 该 API 有 C 版本吗 它需要 NET 4 5 吗 有没有关于如何
  • Android 13 上的 ndef.connect() 时出现 SecurityException

    我有这个代码 Java 来编写nfc标签 private Tag tag Override protected void onNewIntent Intent intent if NfcAdapter ACTION TAG DISCOVER