我跟着this将数据写入NFC标签。
这是我的MainActivity和我的NFCManager。
我成功地将数据写入NFC标签。
但它仅将数据放在Record 0
中。标签上没有创建其他记录。
但是,我想将数据放入多个记录中,例如Record 0
,Record 1
,Record 2
,Record 3
。
所以我像这样修改了MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nfcMger = new NFCManager(this);
v = findViewById(R.id.mainLyt);
final EditText et0 = (EditText) findViewById(R.id.cnt0);
final EditText et1 = (EditText) findViewById(R.id.cnt1);
final EditText et2 = (EditText) findViewById(R.id.cnt2);
final EditText et3 = (EditText) findViewById(R.id.cnt3);
FloatingActionButton btn = (FloatingActionButton) findViewById(R.id.fab);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String ct0 = et0.getText().toString();
String ct1 = et1.getText().toString();
String ct2 = et2.getText().toString();
String ct3 = et3.getText().toString();
message = nfcMger.createUriMessage(ct0, "id");
message = nfcMger.createUriMessage(ct1, "name");
message = nfcMger.createUriMessage(ct2, "role");
message = nfcMger.createUriMessage(ct3, "level");
if (message != null) {
dialog = new ProgressDialog(MainActivity.this);
dialog.setMessage("Tag NFC Tag please");
dialog.show();
}
}
});
}
但是当我使用它并将数据写入标记时,它只在标记上存储Record 0
。没有其他记录。
我只收到Record 0
中最后保存的数据:
我的期望是将数据写入多个记录,如下所示:
有人可以建议我如何将数据插入多个记录(Record 0
,Record 1
,Record 2
,Record 3
)吗?
更新
参考用户@ Michael Roland我已更新我的代码我收到此错误
我遵循Method NdefRecord.createTextRecord(“en” , “string”) not working below API level 21并且我已经提供了NdefRecord
方法,但是当我为message = new NdefMessage(new NdefRecord[] {
所以消息旁边不是错误,但我希望它在消息中
感谢@Michael Roland的支持
答案 0 :(得分:2)
您只能在标记上找到一条包含一条记录的消息,因为这是您在代码中执行的操作。在这里,您可以创建一条包含一条URI记录的NDEF消息:
message = nfcMger.createUriMessage(ct0, "id");
在下一行右侧,用另一条只包含一条URI记录的NDEF消息覆盖以前存储的消息(在message
中引用):
message = nfcMger.createUriMessage(ct1, "name");
在接下来的两行中你再次做同样的事情:
message = nfcMger.createUriMessage(ct2, "role");
message = nfcMger.createUriMessage(ct3, "level");
因此,只有最后一行才能在message
中有效地存储NDEF消息。
然后,您可能会将该消息存储到标签 1 。
但是,根据上面的屏幕截图,您可能更愿意创建一条包含4条文本记录的NDEF消息。例如。像这样:
message = new NdefMessage(new NdefRecord[] {
NdefRecord.createTextRecord("en", "Text 1"),
NdefRecord.createTextRecord("en", "Text 2"),
NdefRecord.createTextRecord("en", "Text 3"),
NdefRecord.createTextRecord("en", "Text 4"),
});
顺便说一下。由于createTextRecord()
仅从API级别21开始提供,因此您可能需要查看Method NdefRecord.createTextRecord("en" , "string") not working below API level 21以获得较低的API级别。
另请注意,文本记录用于存储人类可读的文本数据。为了存储机器可读信息,其他记录(例如NFC论坛外部类型)将更合适。
1 )尽管如此,你似乎不愿意提出MCVE,但相信你的问题的读者会想要浏览GitHub上大量不必要的代码来理解你的问题。请注意,该问题的整个生命周期内甚至可能不存在该代码,一旦该源代码消失,您的问题对其他人来说将毫无用处。
最后请注意,如果你真的在标签上观察到一个text / plain类型的文本值为“junior”的记录,你肯定没有使用GitHub中的代码而没有进一步修改,因为你公开的代码会创建一个(格式错误的?)URI记录。