Как записать данные в виде нескольких записей по метке NFC в Android?

Я следовал за этим, чтобы записать данные в тег 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 Я обновил свой код, я получил эту ошибку

Здесь я следовал методу NdefRecord.createTextRecord ("en", "string"), не работающему ниже уровня API 21, и я дал NdefRecord метод, но он показывает ошибку, когда я даю то же самое для message = new NdefMessage(new NdefRecord[] {

так вне сообщения это не ошибка, но я хочу, чтобы это было внутри сообщения

спасибо @Michael Roland за поддержку

1 ответ

Вы найдете только одно сообщение, содержащее одну запись в теге, потому что это то, что вы делаете в своем коде. Здесь вы создаете одно сообщение NDEF, содержащее одну запись URI:

message =  nfcMger.createUriMessage(ct0, "id");

Прямо на следующей строке вы перезаписываете ранее сохраненное сообщение (ссылка на message) с другим сообщением NDEF, содержащим только одну запись URI:

message =  nfcMger.createUriMessage(ct1, "name");

И в следующих двух строках вы делаете то же самое снова:

message =  nfcMger.createUriMessage(ct2, "role");
message =  nfcMger.createUriMessage(ct3, "level");

Следовательно, только последняя строка будет эффективно хранить сообщение NDEF в message,

Вы, вероятно, затем сохраните это сообщение в теге1.

Однако, учитывая приведенный выше снимок экрана, вы, скорее всего, захотите создать одно сообщение NDEF, содержащее 4 текстовые записи. Например, вот так:

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"),
});

Btw. поскольку createTextRecord() доступно только начиная с уровня API 21, вы можете проверить метод NdefRecord.createTextRecord("en", "string"), не работающий ниже уровня API 21 для более низких уровней API.

Также обратите внимание, что текстовые записи предназначены для хранения читабельных текстовых данных. Для хранения машиночитаемой информации больше подойдут другие записи (например, внешний тип форума NFC).


1) Хотя вы, похоже, неохотно представляете MCVE, но считаете, что читатели вашего вопроса захотят просмотреть тонны ненужного кода на GitHub, чтобы понять вашу проблему. Обратите внимание, что этот код может даже не существовать в течение всей жизни вопроса, и как только этот исходный код исчезнет, ​​ваш вопрос будет в основном бесполезен для других.

Наконец, обратите внимание, что если вы действительно заметили одну запись типа text/plain с текстовым значением "младший" в теге, вы, конечно, не использовали код из GitHub без дальнейших изменений, поскольку код, который вы открыли, создал бы его (искаженный?) Запись URI.

Другие вопросы по тегам