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

3

类似的问题-如何在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示例应用程序创建MockNDEFtags时,在可以选择处理这些生成的标签的应用程序列表中,我的应用程序会出现。 然后我点击我的应用程序,它会顺利打开,我只需要一种方法来读取传递给它的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);"

我遇到了“nfcintent无法解析”的错误。我认识到代码作者很可能是把nfcintent作为特定于我的应用程序的意图的占位符,但我不确定该放什么来代替它。

我的主要活动启动我的应用程序看起来像这样

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解析它。我想解析NDEFmessage中的信息,并最终使每个选项卡都可以访问该信息。


我的问题是关于代码片段,例如“Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);”,无法解析intent。我实际上应该使用哪个intent? - curtisq
2个回答

2
要获取将NFC标签传递给启动该活动的意图,在我的情况下为“nfcintent”,只需使用:
Intent nfcintent = getIntent();

2

尝试使用此代码段从标签中提取消息:

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读写器


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接