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

为什么我不能用Android NFC读取ST M24LR64作为NDEF消息

房泉
2023-03-14

意法半导体的M24LR64 IC支持ISO 15693协议,在Android NFC中也称为NfcV。当我把我的Nexus S手机(Android4.0.4)放在我的原型标签板附近时,我能听到嘟嘟的一声,并看到一条由logcat发出的消息

no tag fallback activity found for Intent { act = android.nfc.action.TAG_DISCOVERED}

我想知道为什么android发送的是ACTION_TAG_DISCOVERED意图,而不是ACTION_NDEF_DISCOVERED,因为我在ST应用笔记之后构造了ndef格式的消息。而且我可以用自己的阅读器软件NFCV-Reader阅读NDEF消息。

然后我在android中编写了一个演示程序来验证这个问题。当我用这个AndroidManifest.xml注册意向时

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

我接收不到NFC信息。当我用这个修改的时候

Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
protected Void doInBackground(Void... params)
{
    DataDevice dataDevice = (DataDevice)getApplication();
    fullNdefMessage = null;
    byte[] resultBlock0 = new byte[4];
    byte[] resultBlock1 = new byte[8];
    cpt = 0;

    resultBlock0 = null;
    while ((resultBlock0 == null || resultBlock0[0] == 1)&& cpt<1500)
    {
        resultBlock0 = NFCCommand.SendReadSingleBlockCommand(dataDevice.getCurrentTag(), new byte[]{0x00,0x00}, dataDevice);
        cpt ++;
        Log.v("CPT ", " CPT Read Block 0 ===> " + String.valueOf(cpt));
    }

    //if CC0 = E1h & CC1 = right version
    if(resultBlock0[0]==(byte)0x00 && resultBlock0[1]==(byte)0xE1 && resultBlock0[2]==(byte)0x40)
    {
        //NDEF TAG Format valid
        cpt = 0;
        resultBlock1 = null;

        while ((resultBlock1 == null || resultBlock1[0] == 1) && cpt < 10)
        {
            resultBlock1 = NFCCommand.SendReadMultipleBlockCommand(dataDevice.getCurrentTag(),new byte[]{0x00,0x01}, (byte)0x02, dataDevice);
        }
        if(resultBlock1[1]==(byte)0x03 && resultBlock1[6]==(byte)0x54) // Text message
        {
            if(resultBlock1[5]<0)
                numberOfBlockToRead = ((resultBlock1[5] + 256 + 14)/4);
            else
                numberOfBlockToRead = ((resultBlock1[5] + 14)/4);
        }
        else if(resultBlock1[1]==(byte)0x03 && resultBlock1[6]==(byte)0x55) // URL message
        {
            if(resultBlock1[1]<0)
                numberOfBlockToRead = ((resultBlock1[2] + 256 + 12)/4);
            else
                numberOfBlockToRead = ((resultBlock1[2] + 12)/4);
        }
    }
    else
    {
        //Not NDEF TAG Format
        numberOfBlockToRead = 0;
    }

    bNumberOfBlock = Helper.ConvertIntTo2bytesHexaFormat(numberOfBlockToRead);

    cpt = 0;
    if(numberOfBlockToRead <32)
    {
        while ((fullNdefMessage == null || fullNdefMessage[0] == 1) && cpt < 10 && numberOfBlockToRead != 0)
        {
            fullNdefMessage = NFCCommand.SendReadMultipleBlockCommandCustom(dataDevice.getCurrentTag(),new byte[]{0x00,0x00}, bNumberOfBlock[1], dataDevice);
            cpt++;
        }
    }
    else
    {
        while ((fullNdefMessage == null || fullNdefMessage[0] == 1) && cpt < 10 && numberOfBlockToRead != 0)
        {
            fullNdefMessage = NFCCommand.SendReadMultipleBlockCommandCustom2(dataDevice.getCurrentTag(),new byte[]{0x00,0x00}, bNumberOfBlock, dataDevice);
            cpt++;
            Log.i("CPT ", "***** " + String.valueOf(cpt));
        }
    }

    return null;
}

我的问题是,我是否可以使用android NDEF工具,而不是原始块读写来处理我的NFC标签与ISO15693?如何在M24LR64 EEPROM中格式化数据?

共有1个答案

钮誉
2023-03-14

更新:

除了恩智浦ICODE之外,Nexus 4现在还支持其他NFCV标签上的NDEF存储。现在在TI Tag-it、HF-I标签和ST标签(如LRI2K)上支持NDEF存储。

 类似资料:
  • 我是完全新的Web API的,并试图建立一个Android应用程序观看谷歌联系人。我被Oauth的第一步卡住了。我已经完成了登录按钮和授权。按钮工作正常,我可以登录我的谷歌账户,但当我试图从这个账户获得一些东西时,日志猫打印了这个按摩“I/System_Server:oneway函数结果将被删除,但以状态OK和包裹大小结束”。为什么会这样?因为auth令牌不再有效?如何恢复权限?我应该如何从帐户获

  • 我无法向Kafka主题发布消息,无法得到Kafka制作人的任何回应,它完全卡住了应用程序 Kafka生产者服务代码 2021-05-30 13:29:13.209[0;39M[32M信息[0;39M[35M2472[0;39M[2M---[0;39M[2M[nio-8084-exec-2][0;39M[36MO.apache.coyote.http11.HTTP11Processor[0;39M[

  • 我正在使用Reverfit2,我试图从我用Python制作的Web服务中请求一些数据。 实际上,它抛出了一个“java.lang.IllegalStateException”,但是当我调用GET方法时,API返回代码200,而且我还可以看到用于调试响应JSON的打印版本。问题是Call方法,因为它总是在failure时执行。 求求你,救命! 这是我的(简单的)Python Web服务,API-Pr

  • 问题内容: 如果html文件是本地文件(在我的C驱动器上),则可以使用,但是如果html文件在服务器上并且图像文件是本地文件,则无法使用。这是为什么? 任何可能的解决方法? 问题答案: 如果客户端可以请求本地文件系统文件,然后使用JavaScript找出其中的内容,则将是一个安全漏洞。 解决此问题的唯一方法是在浏览器中构建扩展。Firefox扩展和IE扩展可以访问本地资源。Chrome的限制更为严

  • 问题内容: 我正在使用go-hdf5将hdf5文件读取到golang中。我在Windows7上使用的是mingw和hdf5 1.8.14_x86的最新副本,似乎尝试使用任何预定义的类型都行不通,让我们集中关注例如T_NATIVE_UINT64。我已将问题简化为以下内容,基本上将go- hdf5排除在了问题之外,而指出了一些根本性的错误: 您显然需要hdf5,并将编译器指向标头/ dll,然后运行g

  • 我一直在尝试打印和HTTP post使用Swift的一个移动应用程序,我可以用javascript和express登录它。js。但当使用Go创建的服务器时,它会给我: 下面你可以看到所有3种语言的代码: 斯威夫特: 在另一个文件的@obj func中调用: 戈朗代码: 可以阅读文章的Javascript服务器: 谢谢你抽出时间