我跟随this将数据写入nfc标记。
这是我的MainActivity和我的NFCManager。
我成功地将数据写入nfc标记。
但它只在Record 0
中放置数据。标记上没有创建其他记录。
但是,我想将数据放入多个记录中,如Record 0
,Record 1
,Record 2
,Record 3
。
所以我修改了
@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();
}
}
});
}
但当我使用它并将数据写入标记时,它只在标记上存储一个
MainActivity
。没有其他记录。我只在
Record 0
中获取上次保存的数据:我的期望是将数据写入多个记录,如:
有谁能建议我如何将数据插入多个记录(
Record 0
,Record 0
,Record 1
,Record 2
)?更新
参考用户@michael roland,我已经更新了我的代码,我得到了这个错误
在这里,我遵循了Method NdefRecord.createTextRecord(“en” , “string”) not working below API level 21并给出了
Record 3
方法,但是当我对NdefRecord
给出相同的方法时,它的显示错误是所以消息的外面不是错误,但我希望它在消息里面
感谢@michael roland的支持
最佳答案
您在标记上只找到一条包含一条记录的消息,因为这是您在代码中所做的。在这里,您将创建一个包含一个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消息。然后您可能会将该消息存储到tag1上。
但是,根据上面的屏幕截图,您可能希望创建一条包含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 forum外部类型)将更适合。
1)不过,你似乎不太愿意展示一个MCVE,但相信你问题的读者会想浏览github上大量不必要的代码来理解你的问题。请注意,该代码可能甚至不存在的整个生命周期的问题,一旦源代码消失,你的问题将是无用的其他人。
最后,请注意,如果您真的观察到一个文本值为“junior”的text/plain类型的记录,那么您肯定不会在没有进一步修改的情况下使用github中的代码,因为您显示的代码会创建一个(格式不正确?)uri记录。