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

Nexus 4读取Mifare经典卡UID

罗金林
2023-03-14

目前,我们正在为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:标签丢失。

    谢谢你的回答。

  • 共有3个答案

    郭翰墨
    2023-03-14

    好了,已经设置了调度程序,您可以在您的活动中使用它:

        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);
    }
    
    微生翼
    2023-03-14

    您可以在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标签。

    朱阳晖
    2023-03-14

    您无法使用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