相关疑难解决方法(0)

阅读Android NFC IsoDep标签时出现连接错误

我有一个应用程序,可以读取各种类型的NFC标签.多年来它一直运行良好,但是对于较新的Android设备,java.io.IOException在扫描特定类型的标签时会一直抛出.有问题的标签支持Mifare Classic和ISO-DEP,但我们IsoDep专门使用该技术进行连接.

恩智浦应用程序的NFC TagInfoNFC TagInfo都无法正确读取标签.


有效的设备:

  • Moto X Play(Android 6.0.1)
  • Moto G Play(Android 6.0.1)
  • 三星Galaxy S7(Android 7.0)
  • 三星Galaxy S8 - 英国型号(Android 7.0)
  • 像素2(Android 8.1)

失败的设备:

  • Moto G5S(Android 7.1.1)
  • Moto Z2 Play(Android 7.1.1)
  • Moto E4 Plus(Android 7.1.1)
  • 华为荣耀8(Android 7.0)
  • LG K8(Android 7.0)
  • LG K10(Android 7.0)
  • 三星Galaxy S8 - 美国型号(Android 7.0)

重现问题所需的代码很简单.

通过前台调度接收NFC意图,然后在其自己的线程中运行(没有其他线程或其间的NFC相关处理):

IsoDep isoDep = IsoDep.get(tag);

try {
    isoDep.connect();
}
catch (IOException e) {
    Log.e("NFC", ":(");
}
Run Code Online (Sandbox Code Playgroud)

当该方法IOException被抛出时,为-5(ERROR_CONNECT).connect()android.nfc.tech.BasicTagTechnology …

java android nfc

7
推荐指数
1
解决办法
775
查看次数

与Mifare DESFire EV1进行Android NFC通信

使用Nexus 4和最新的Android API级别18与Mifare DESFire EV1 AES标签进行通信让我头疼.遵循NXP本机协议以编写和读取此类型的标记,必须遵循以下步骤:

  1. 选择申请
  2. 认证
  3. 写或读

为此,我使用Android的IsoDep类,它提供对ISO 14443-4属性和I/O操作的访问.关于它的一个非常奇怪的事情是,一旦我发送选择应用程序本机命令,我得到一个意外的响应.想象一下,我有AID F4013D所以我发送:

-> 5AF4013D
<- 6E00
Run Code Online (Sandbox Code Playgroud)

所有可能的响应必须是一个字节长度(成功0x00或error_code),而不是两个或更多.因此,0x6E在成功响应之前是绝对意外的.它并不总是发生,当它没有并且工作正常时,选择的应用程序和身份验证过程可以正常工作.但是,一旦经过身份验证,写入命令就没有正确的行为,所有写入命令都会0xAF从PICC 完成,而不是成功0x00.似乎PICC不应该期待一些额外的数据(我发送正确长度的有效载荷).如果我发送任何其他命令,我会得到一个0xCA(命令中止)错误代码.

-> 5AF4013D
<- 00 /*Success*/
-> AA01
<- AFA8394ED57A5E83106B4EE72FD2BB0CC4
-> AF148F525E1DDE0AD6AB60B4B615552475C91F2E8D89B8523E4465113DD5BD19C6 
<- 0066D255C93F2F492AFE3715C88964F1BD /*Authentication success*/
-> 3D02000000030000222222 /*Write 3 bytes to file nº2*/
<- AF /*Unexpected, 0x00 was expected*/
Run Code Online (Sandbox Code Playgroud)

正常情况下,如果我使用个人阅读器(非Android NFC)发送这些类型的命令,它总能正常工作.似乎Android NFC API中的某些内容很奇怪,它应该只是一个从不解释或修改数据的原始数据传输器.

我也尝试过使用ISO 7816-4 APDU结构,结果相同.作为一个好奇心,Galaxy Nexus不会发生选择应用程序奇怪的响应,但是一直是写命令.

android apdu nfc mifare contactless-smartcard

4
推荐指数
1
解决办法
9255
查看次数

标签 统计

android ×2

nfc ×2

apdu ×1

contactless-smartcard ×1

java ×1

mifare ×1