我跟随this将数据写入nfc标记。
这是我的MainActivity和我的NFCManager
我成功地将数据写入nfc标记。
但它只在Record 0中放置数据。标记上没有创建其他记录。
但是,我想将数据放入多个记录中,如Record 0Record 1Record 2Record 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中获取上次保存的数据:
java - 如何在Android的NFC标签上将数据写为多个记录?-LMLPHP
我的期望是将数据写入多个记录,如:
java - 如何在Android的NFC标签上将数据写为多个记录?-LMLPHP
有谁能建议我如何将数据插入多个记录(Record 0Record 0Record 1Record 2)?
更新
参考用户@michael roland,我已经更新了我的代码,我得到了这个错误
java - 如何在Android的NFC标签上将数据写为多个记录?-LMLPHP
在这里,我遵循了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记录。

10-05 20:31
查看更多