【发布时间】:2011-10-27 14:36:34
【问题描述】:
我刚开始使用 Android NFC 进行编码,我已经成功地将 NDEF 数据读写到 mifare 经典标签中。问题是当应用程序从 ndef 记录读取有效负载时,它总是在文本的开头包含字符 '*en'。我认为是语言字符,但是没有该字符如何获得真正的短信?
这是应用程序从标签中读取的屏幕截图,实际文本是“Hello World”
这是要阅读的代码
@Override
public void onNewIntent(Intent intent) {
Log.i("Foreground dispatch", "Discovered tag with intent: " + intent);
// mText.setText("Discovered tag NDEF " + ++mCount + " with intent: " + intent);
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
NdefMessage[] msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
NdefMessage msg = msgs[0];
try {
mText.setText(new String(msg.getRecords()[0].getPayload(), "UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
【问题讨论】:
-
我认为“en”来自“English”。我几乎可以肯定你不小心添加了语言代码。如果您更改 xml 中的语言标记,您可能会得到另一个字符序列。请尝试一下,因为这样至少你会知道 en 来自哪里,并且可以在 google 上搜索解决方案。
-
如果您可以发布编写标签的代码,那将会很有帮助。您是否尝试过使用其他人的应用程序来阅读您的标签,以查看它是您编写标签的方式,还是您阅读它的方式? (如果显示的信息与 Ndef 消息中的信息相同,则为写入问题,如果仅显示“Hello World...”,则为读取问题。)
-
Lajos,Ben...感谢您的 cmets,我尝试使用其他应用程序,NFC 标签信息,应用程序显示“Hello World”。顺便说一句,我发现了问题,正如 Nils Pipenbrik下面解释。此链接code.google.com/p/openmobster/wiki/NFC 展示了如何正确读取有效负载数据。
-
尝试使用code.google.com/p/ndef-tools-for-android解析NdefMessage