当前位置: 首页 > 知识库问答 >
问题:

读取Android NfcV标签时出现连接错误

慕河
2023-03-14

我有一个Android应用程序可以读取NFC标签。在LG Nexus4上一切正常,但在三星Galaxy S5上,我只得到I/O异常(在多部手机上测试)。

因此,标记是NfcV类型的,当在NfcV上调用connect()时,我会得到I/O异常(再往下是错误代码-5ERROR_CONNECT)。

恩智浦的NFC TagInfo可以读取SG5S上标签的内存内容-除了连接()收发()之外,还有其他方式读取NfcV标签吗?

NFC芯片之间的什么差异会导致我的应用程序在一部手机上的连接失败,而在另一部手机上却没有(而其他应用程序读取它很好)?我需要调整一下时间吗?

代码段:

NfcV nfcvTag = NfcV.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
if(nfcvTag!=null){
    try {
        nfcvTag.connect();
        //{flags:0x00, read multiple blocks command: 0x23, start at block 0: 0x00, read 9 blocks (0 to 8): 0x08}
        response = nfcvTag.transceive(new byte[] {(byte)0x00,(byte)0x23,(byte)0x00,byte)0x08});
    } catch (IOException e) {
        Log.d("NFCService", nfcvTag.toString());
    } finally {
        try {
            nfcvTag.close();
        } catch (IOException e) {
        }
    }
}

共有1个答案

柯琛
2023-03-14

那么,总结一下我们在上面评论中讨论时发现的:

您似乎不能在单独的线程中使用intentservice来处理对NFC标记的访问(通过接收到的NFC发现意图)。在这种情况下,标记技术对象的connect()方法将失败。

这并不意味着您不能在单独的(工作者)线程中处理对标记的访问。实际上,您不应该访问主(UI)线程上的标记,因为这将在标记访问期间阻塞应用程序(及其UI),并可能导致应用程序因无响应而被系统杀死。手动生成一个工作线程来处理对标记的访问非常正常。

    null

Galaxy S5中使用的NFC控制器似乎只支持寻址的ISO/IEC 15693读命令。使用未寻址命令(即未设置寻址标志且不包含标记的UID的命令)会导致{0x02}transceive()方法返回。

很难说S5中的NFC控制器(PN547?来自恩智浦)是否普遍存在这种情况,或者这是标签处理已寻址命令和响应与未寻址命令和响应的特定方式。

 类似资料:
  • 工作的设备: Moto X Play(Android 6.0.1) Moto G Play(Android 6.0.1) 三星Galaxy S7(Android 7.0) 三星Galaxy S8-英国型号(Android 7.0) Pixel 2(Android 8.1) 发生故障的设备: null 最后,对于不工作的器件,Logcat中会出现以下条目: 随着更现代的Android设备所提供的扩展

  • 我返回了一个代码,使用jsoup-1.7.3.jar读取网页,它对一些网站有效,但对一些URL显示读取超时错误。 线程“main”java.net.SocketTimeoutException中的异常:java.net.SocketInputStream.socketRead0(本机方法)处java.net.SocketInputStream.Read(SocketInputStream.java

  • 问题内容: 我正在运行使用使用自签名CA证书创建的证书的https服务器。 现在,我想将Socket.io客户端连接到连接到https服务器的Socket.io服务器。不幸的是,我得到一个错误,告诉我: 基本上,此错误告诉我无法成功验证证书。这是由于相应的CA证书是自签名的。使用https请求时,我可以指定我信任的CA。 在这种情况下,如何使Socket.io连接? PS:我正在运行Node.js

  • 问题内容: 当我尝试将SVN连接到Eclipse时,出现以下错误:知道如何解决吗? 问题答案: 选择SVN接口: 客户端:SVNKit(纯Java) 应用并重试。

  • 我正在尝试运行以下Sqoop命令: 然而,我得到了这个错误: 17/02/04 00:04:53 警告安全。用户组信息: 特权行动例外作为:avinash (身份验证:简单) 原因:java.io.文件不发现异常: 文件不存在: hdfs://localhost:9000/home/avinash/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/slf4j-api-

  • 问题内容: 我正在使用Fabric作为构建脚本。我只是克隆了一个虚拟机并创建了一个新服务器。Fabric脚本(在下面使用paramiko)可以在一台服务器上正常运行,但不能在另一台服务器上正常运行。由于它是一个克隆,所以我不知道会有什么不同,但是每次我运行Fabric脚本时,都会收到错误消息。该脚本与两个服务器上的同一用户连接。该脚本在所有其他服务器上都可以正常工作,除了我刚刚克隆的这一新服务器。