目前,我们正在为Android开发NFC应用程序。 我们的经验
>
使用恩智浦PN5xx芯片开发POS NFC控制系统,用于控制Mifare Classic(1K)和CEPAS标准
为Galaxy Nexus中的MiFareClassic和Ultralight C开发了Android NFC控制系统(使用NXP NFC芯片组)
在Nexus 4中为Ultralight C开发Android NFC控制系统
我们的挑战:我们希望在我们的POS机(使用恩智浦芯片)和新的Android平板电脑(使用Broadcom芯片)中控制MiFareClassic 1K卡,我们已经安装了卡基,无法更换它们。
-我们知道Nexus 4已经改变了NFC芯片,现在除了UID,它不能读写任何Mifare classic卡块。
- 我们的代码将Mifare经典卡检测为NfcA类型。NfcA有一个名为收发(byte[]数据)的方法,用于将原始NFC-A命令发送到标签并接收响应。
- 我们的问题是,我们需要知道向设备发送什么代码来读取UID,其他在线html" target="_blank">用户说他们可以做到,但找不到方法
目前我们总是得到一个错误:android.nfc.TagLostException:标签丢失。
谢谢你的回答。
好了,已经设置了调度程序,您可以在您的活动中使用它:
private String serialId = "";
@Override
public void onNewIntent(Intent intent) {
String action = intent.getAction();
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {
try {
byte[] tagId = tag.getId();
serialId = bytesToHex(tagId);
Log.d("[ReadCardTools]", "Serial Number: " + result);
} catch (NullPointerException ex) {
ex.printStackTrace();
serialId = "ERROR";
}
} else {
Toast.makeText(this, "This tag is not supported. Action: " + action, Toast.LENGTH_LONG).show();
}
}
private String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
int v;
for (int j = 0; j < bytes.length; j++) {
v = bytes[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[(j * 2) + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
您可以在Intent中的Tag对象上调用getId()
。这将返回标签的ID(在MIFARE经典的情况下,可能是4或7字节的唯一ID、随机ID或固定的非唯一4字节ID;具体取决于MIFARE经典产品)。不需要在NfcA
上调用连接()
(也不可能做任何有意义的事情)。
请注意,这不适用于三星Galaxy S4。当点击MIFARE标签时,该手机不会调度NFC意图。相反,它将在屏幕上显示一条错误消息,指出手机与此标签不兼容,然后忽略该标签。
更新:在运行Android 4.4 KitKat的S4上,您可以使用NFC阅读器模式访问卡UID等详细信息,也可以访问MIFARE Classic标签。
您无法使用Nexus 4中的Broadcom芯片与Mifare Classic芯片通话。
您可以读取UID。这是与NfcA兼容的Mifare Classic协议的一部分。
除此之外,还需要实现博通芯片(以及许多其他即将推出的NFC控制器)所缺乏的米菲经典加密1算法。
在软件中运行Crypto1(源代码在维基百科上)也不是一种选择,因为Mifare Classic的身份验证请求需要芯片发送与NfcA不兼容的帧。
我正在开发一个只读取MIFARE经典卡的UID的应用程序。但是,每次我扫描Galaxy Note 5上的卡片时,我都会收到一条祝酒词“不支持NFC标签类型”,并且UID没有显示。 我知道这一点,因为我手机的NFC芯片与米菲经典不兼容,但有什么方法可以修复它吗? 提前谢谢。
我正在尝试使用NFC读卡器库读取Mifare超轻型卡的内容。 我对NFC完全陌生,我正在使用这个github存储库开始。 此存储库中的代码允许检测检测到哪种类型的卡(Mifare,Mifare超轻量级......)并读取卡的UID。我添加了以下代码以读取Mifare超轻型卡的内容: 我有一张卡片,上面写着“Hello world”,当我读到它时,上面的代码会打印以下字节: 所以我从我的卡片上读了一
我正在使用NFC读取Mifare Classic 1K卡。 该代码适用于所有Android5.0及以下版本的Android设备,但当我在Android5.1设备上测试代码时,它不起作用。 我的代码, 当我在Android5.1中扫描卡片时,返回,否则在5.1以下的版本中,它可以正常工作。
我编写了一些代码,用于在Android上验证和读取Mifare Classic卡。它在第一代Nexus 7(2012年)和三星Galaxy Nexus i9250上都能完美地工作。然而,它在三星S3 mini上失败了。设备将卡正确检测为MifareClassic并且我可以使用对象的方法连接到标记,但它无法使用两种可用方法或中的任何一种进行身份验证。然而,使用相同的代码,如果使用上面提到的任何其他设
更新:从本文NFC论坛类型标签中,您可以发现Mifare Ultralight与NDEF兼容。Android设备可以轻松读取这种类型的标签。
我对Android的NFC很陌生。我需要大量Java代码示例或好的教程,以了解如何使用Nexus 5读取Mifare Ultralight 16位UID 我只知道如何从这里读取Mifare classic卡的标签UID,获得MifareClassic的7位数UID,但没有Mifare Ultralight的示例。 这是获取Mifare Classic UID的另一个示例。Mifare Ultral