Не удается отформатировать тег NdefFormatable NFC

Я разрабатываю приложение для Android, использующее NFC. У меня есть карта NFC со следующим техническим списком:

  • android.nfc.tech.NfcA
  • android.nfc.tech.MifareClassic
  • android.nfc.tech.NdefFormatable

Но я не могу отформатировать эти теги с помощью NdefFormatable.format(message). Вместо этого я получаю исключение IOException.

Код:

try {
    NdefRecord[] records1 = { createRecord("000000") };
    NdefMessage message1 = new NdefMessage(records1);
    formatable.format(message1);
    res = 1;
}

Stacktrace дал эти журналы:

W/System.err: java.io.IOException
W/System.err:     at android.nfc.tech.NdefFormatable.format(NdefFormatable.java:131)
W/System.err:     at android.nfc.tech.NdefFormatable.format(NdefFormatable.java:94)
                  at com.example.peng.nfcreadwrite.MainActivity.write(MainActivity.java:170)
W/System.err:     at com.example.peng.nfcreadwrite.MainActivity.access$000(MainActivity.java:27)
                  at com.example.peng.nfcreadwrite.MainActivity$1.onClick(MainActivity.java:60)
                  at android.view.View.performClick(View.java:6877)
W/System.err:     at android.widget.TextView.performClick(TextView.java:12651)
                  at android.view.View$PerformClick.run(View.java:26069)
                  at android.os.Handler.handleCallback(Handler.java:789)
                  at android.os.Handler.dispatchMessage(Handler.java:98)
W/System.err:     at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6938)
                  at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Может быть, кто-нибудь может дать мне что-нибудь изучить, потому что я новичок в NFC на Android.

Редактировать

Это снимок экрана, который я сделал с помощью Mifare Classic Tool. Для секторов с 4 по 8 он показывает, что «ключи не найдены (или мертвый сектор)»:

Не удается отформатировать тег NdefFormatable NFC

Этот тег раньше использовался для чего-то другого? Может ли быть, что некоторые из секторов карты MIFARE Classic заблокированы каким-либо ключом, кроме транспортного ключа? Вы можете попытаться прочитать тег с помощью какого-нибудь универсального приложения для чтения тегов (например, моего NFC TagInfo или NXP TagInfo), чтобы убедиться, что все секторы доступны для записи с помощью транспортных ключей.

Michael Roland 10.08.2018 12:23

Прошу прощения за поздний ответ. Эти карточки были предоставлены каким-то сторонним поставщиком, который использовался на моем рабочем месте, они сказали, что это пустая карточка. Я проверил с помощью Mifare Classic Tool и обнаружил, что на всех картах был показан сектор с 4 по 8 с сообщением «Ключи не найдены» (или мертвый сектор). (пожалуйста, посмотрите мой обновленный вопрос для скриншота карты, которую я проверил)

caesario pradana 13.08.2018 02:31

Привет, я столкнулся с той же проблемой и разместил вопрос здесь stackoverflow.com/questions/61784673/… Не могли бы вы поделиться полным решением, пожалуйста?

Sam Reyes 14.05.2020 15:56
1
3
1 328
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Процедура форматирования NDEF для тегов MIFARE Classic на Android предполагает, что теги будут пустыми и доступными (чтение и запись) с транспортным ключом по умолчанию (FFFFFFFFFFFF) или определенными стандартными ключами (ключ MAD для сектора 0, ключ NDEF для других секторов). Если некоторые секторы тега недоступны, Android не сможет отформатировать тег для использования с NDEF.

Следовательно, ваши теги непригодны для ваших целей. Хотя вы можете вручную отформатировать тег, чтобы пропустить эти заблокированные сектора. Я не совсем уверен, может ли Android использовать эти теги.

Ваш ответ убедил меня в моем собственном предположении. Что у тегов есть ключи для доступа к этим секторам. У меня нет ключей, поэтому я не могу их прочитать / переписать. После того, как я купил несколько пустых тегов, я могу плавно писать в них, используя свой код, спасибо @MichaelRoland за то, что дал мне несколько откровений.

caesario pradana 20.08.2018 10:11

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