Android 保存多个NFC标记-发布修改教程以保存多个NDef记录
我遵循一个教程,它允许用户将数据保存到NFC标签。我试图修改教程源代码,以包含第二个EditText字段并保存第二个标记,但是,如果注释掉以下行,我只能保存第二个NDef记录: //写入(message.getText().toString(),mytag) 我需要能够写入两个标记:Android 保存多个NFC标记-发布修改教程以保存多个NDef记录,android,nfc,Android,Nfc,我遵循一个教程,它允许用户将数据保存到NFC标签。我试图修改教程源代码,以包含第二个EditText字段并保存第二个标记,但是,如果注释掉以下行,我只能保存第二个NDef记录: //写入(message.getText().toString(),mytag) 我需要能够写入两个标记: write(message.getText().toString(),mytag); 及 …但我需要帮助将它们连接在一起 这里有一个示例显示如何添加多个标记: 但是我需要帮助格式化我的当前源以反映此方法。(每次
write(message.getText().toString(),mytag);
及
…但我需要帮助将它们连接在一起
这里有一个示例显示如何添加多个标记:
但是我需要帮助格式化我的当前源以反映此方法。(每次尝试时,我的日志中都会出现其他问题或强制关闭问题。)
提前谢谢
爪哇:
XML:
教程源代码(显示上面只保存一条NDef记录的源代码的实现-我已将其修改为保存两条NDef记录)
注释掉这一行:
write(message.getText().toString(),mytag);
我认为它会起作用
我认为问题在于write()
方法被设计为只写入一个标记,并且在调用第二个write()方法时,标记仍然被第一个write()方法锁定。如果我是你,我会尝试在写()定义中添加第二个字段,或者如果这是不可能的,我会尝试把这两个字段的文本和中间的一个标记串在一起。p>
另外,为了编写正确的代码,我会在自己的线程中使用AsyncTask执行nfc部分,以确保它不会阻塞UI线程。我理解为什么写教程的家伙没有这么做,这会使他的教程比他想要的复杂得多,但是做nfc是你应该避免在UI线程中做的事情
关于第二个问题:
这或许可以做到:
private void write(String text, String text2, Tag tag) throws IOException, FormatException {
NdefRecord[] records = { createRecord(text), createRecord(text2) };
NdefMessage message = new NdefMessage(records);
// Get an instance of Ndef for the tag.
Ndef ndef = Ndef.get(tag);
// Enable I/O
ndef.connect();
// Write the message
ndef.writeNdefMessage(message);
// Close the connection
ndef.close();
}
当然,这意味着您必须这样称呼它(因为它现在还有一个参数):
mytag=intent.getParcelableExtra(NfcAdapter.EXTRA_标记);Toast.makeText(this,this.getString(R.string.ok_detection)+mytag.toString(),Toast.LENGTH_LONG.show();Toast是否显示来自意图的内容?否-单击写入按钮时不会显示Toast(唯一显示的Toast是当您将NFC标记靠近设备时),我已注释掉写入(message.getText().toString(),mytag2);应用程序停止强制关闭(谢谢),但我想知道在write()定义中添加第二个字段的正确方法!(提前感谢!-John)编写(message.getText().toString(),mytag,mytag2);在您对onNewIntent(Intent-Intent)的定义中似乎不起作用,您已将其硬编码为使用mytag。这可能就是问题所在。注释掉建议的行可以保存第二条记录,但是我在将建议的示例实现到源代码中时遇到了严重的问题。非常感谢您的帮助。。。(而且非常宝贵!)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Please Enter Your Password: ">
</TextView>
<EditText
android:id="@+id/edit_message2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:hint="SSID" />
<EditText
android:id="@+id/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:hint="WiFi Password" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Write!!" />
</LinearLayout>
write(message.getText().toString(),mytag);
private void write(String text, String text2, Tag tag) throws IOException, FormatException {
NdefRecord[] records = { createRecord(text), createRecord(text2) };
NdefMessage message = new NdefMessage(records);
// Get an instance of Ndef for the tag.
Ndef ndef = Ndef.get(tag);
// Enable I/O
ndef.connect();
// Write the message
ndef.writeNdefMessage(message);
// Close the connection
ndef.close();
}
write(message.getText().toString(), message2.getText().toString(), mytag2);