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

如何从检测到的NFC标签(NDEF消息)中读取。Android NFC

松雅昶
2023-03-14

类似的问题 - 如何在Android中读取检测到的NFC标签(NDEF内容)详细信息?

我希望我的android应用程序能够读取和解析检测到的NDEF消息。

我已经编辑了AndroidManifest.xml来检测nfc标签,并添加了意图过滤器,如下所示

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

我相信这很好,因为当我使用SDK附带的NFCDemo示例应用程序创建MockNDEF标签时,当我可以选择处理这些生成的标签的应用程序列表出现时,我的应用程序就会出现。然后我单击我的应用程序,它会毫无问题地打开,我只需要一种方法来读取在NDEF消息中传递给它的数据。代码:

 Tag myTag = (Tag) nfcintent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

 // get NDEF tag details
 Ndef ndefTag = Ndef.get(myTag);
 ...
 NdefMessage ndefMesg = ndefTag.getCachedNdefMessage();

在一个类似的问题中,我发现了很多类似的答案。我的问题是代码行

"Tag myTag = (Tag) nfcintent.getParcelableExtra(NfcAdapter.EXTRA_TAG);"

我得到错误“NFC内容无法解析”,我意识到代码的作者可能将NFC内容作为一个占位符,用于特定于我的应用程序的意图,但是我不确定我应该在它的位置放什么。

我启动应用程序的主要活动如下所示

public class TabsActivity extends TabActivity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TabHost tabHost = getTabHost();

    // Tab for Graph
    TabSpec graphspec = tabHost.newTabSpec("Graph");
    // setting Title and Icon for the Tab
    graphspec.setIndicator("Graph");
    Intent graphIntent = new Intent(this, GraphActivity.class);
    graphspec.setContent(graphIntent);

    // Tab for Intro
    TabSpec introspec = tabHost.newTabSpec("Intro");
    introspec.setIndicator("Intro");
    Intent introIntent = new Intent(this, IntroActivity.class);
    introspec.setContent(introIntent);


    // Adding all TabSpec to TabHost
    tabHost.addTab(introspec); // Adding intro tab
    tabHost.addTab(graphspec); // Adding graph tab

}

}

我认为当这启动应用程序时,必须处理NFC标签。如果我可以从标签访问NDEFMessage,我已经能够使用android示例应用程序中的NdefMessageParser解析它。我想解析NDEF消息中的信息,并最终让应用程序中的每个选项卡都可以访问这些信息。

共有2个答案

鞠泰平
2023-03-14

要获得传递NFC标签来启动活动的意图(在我的例子中是“nfcintent ”),只需使用

Intent nfcintent = getIntent();
蓬意致
2023-03-14

尝试此代码段从标记中提取消息

Parcelable[] rawMsgs = intent
            .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    NdefMessage msg = (NdefMessage) rawMsgs[0];
    extractMessage(msg);

private void extractMessage(NdefMessage msg) {
        byte[] array = null;
        array = msg.getRecords()[0].getPayload();
}

也可以看看这个NFC读写器的例子

 类似资料:
  • 我有一个应用程序可以读取一个NDEF标签,没什么大不了的:-) 我找到了这个链接:如何发现NFC标签是否还在Android的范围内?什么是一个开始,但我不知道如何更新标签。 我很挣扎,我甚至不知道我尝试做的事情在技术上是否可行。 有没有人知道怎么做的?干杯 对不起,我试着看了一些教程和例子,但我还是不明白。 这是我的全部密码。读取标签需要长得多的时间,有时并不需要。我不知道如何和在哪里更新标签,以

  • 我正在使用以下命令从Mifare超轻型标签读取二进制块: 但是现在我想使用ACR1252 NFC阅读器精确地执行存储在Mifare Ultralight标签中的NDEF消息。我必须使用哪个命令来获取完整的 NDEF 消息?NDEF 消息存储在标签中的哪个位置?

  • 我正在尝试创建一个 NFC 标签,该标签将触发两个单独的操作: 打开蓝牙连接 启动应用程序(或前往游戏商店) 我使用 nfc-eclipse-plugin 创建了一个包含两个合适记录的消息,但是,当写入标签时,它总是只触发第一个操作。两者都单独工作,但第二个总是被忽略。 我知道一个NFC标签上的2个NDEF消息/记录的答案-Android说你不能在一个标签上有两条独立的消息,只有一条消息中的多条记

  • 有人知道为什么会这样吗? //TimerTask类

  • 我有一台LG D320nAndroid手机,elechouse的PN532 nfc模块和斯托尔曼的NFCPlayer,我可以用它正确阅读NFC标签。 我在这里测试了一个样本:https://github.com/grundid/host-card-emulation-sample 当我把一台Android设备读作标签,另一台Android设备读作阅读器时,它工作得很好。但我无法通过NFCPlaye