android - 如何读取检测到的 NFC 标签(NDEF 消息)。安卓NFC

标签 android android-intent nfc ndef

类似的问题 - How to read detected NFC tag (NDEF content) details in android?

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

我已经编辑了 AndroidManifest.xml 来检测 nfc 标签,并且添加了 intent 过滤器,它看起来像这样

            <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 作为我的应用程序特定 Intent 的占位符,但我不确定我应该放什么。

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

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 消息的信息,并最终让应用中的每个选项卡都可以访问该信息。

最佳答案

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

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 Reader/Writer 的示例

关于android - 如何读取检测到的 NFC 标签(NDEF 消息)。安卓NFC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11698100/

相关文章:

android - Android 2.3.6 和 4.x 的 NFC 检测不同

Android 向进度条或其他内容报告媒体播放器当前位置

android - 如何在不崩溃的情况下使用 Android NDK 在线程上插入断点?

android - 如何直接从我的 Android 应用程序打开 Google Play 商店?

python - 如何使用 nfcpy 进行 MiFare 1k classic

android - 哪些带 NFC 的手机完全支持 Mifare Classic(1K 和 4K)卡?

android - 如何使用数据绑定(bind)请求或删除对 edittext 的关注

android - 如何在android中使用内置麦克风录制声音

android - 从另一个页面获取值

android - 我如何在不向 android 中的特定号码显示拨号器 Activity 的情况下调用电话?