Я разрабатываю приложение для Android, использующее NFC. У меня есть карта NFC со следующим техническим списком:
Но я не могу отформатировать эти теги с помощью 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 он показывает, что «ключи не найдены (или мертвый сектор)»:
Прошу прощения за поздний ответ. Эти карточки были предоставлены каким-то сторонним поставщиком, который использовался на моем рабочем месте, они сказали, что это пустая карточка. Я проверил с помощью Mifare Classic Tool и обнаружил, что на всех картах был показан сектор с 4 по 8 с сообщением «Ключи не найдены» (или мертвый сектор). (пожалуйста, посмотрите мой обновленный вопрос для скриншота карты, которую я проверил)
Привет, я столкнулся с той же проблемой и разместил вопрос здесь stackoverflow.com/questions/61784673/… Не могли бы вы поделиться полным решением, пожалуйста?
Процедура форматирования NDEF для тегов MIFARE Classic на Android предполагает, что теги будут пустыми и доступными (чтение и запись) с транспортным ключом по умолчанию (FFFFFFFFFFFF) или определенными стандартными ключами (ключ MAD для сектора 0, ключ NDEF для других секторов). Если некоторые секторы тега недоступны, Android не сможет отформатировать тег для использования с NDEF.
Следовательно, ваши теги непригодны для ваших целей. Хотя вы можете вручную отформатировать тег, чтобы пропустить эти заблокированные сектора. Я не совсем уверен, может ли Android использовать эти теги.
Ваш ответ убедил меня в моем собственном предположении. Что у тегов есть ключи для доступа к этим секторам. У меня нет ключей, поэтому я не могу их прочитать / переписать. После того, как я купил несколько пустых тегов, я могу плавно писать в них, используя свой код, спасибо @MichaelRoland за то, что дал мне несколько откровений.
Этот тег раньше использовался для чего-то другого? Может ли быть, что некоторые из секторов карты MIFARE Classic заблокированы каким-либо ключом, кроме транспортного ключа? Вы можете попытаться прочитать тег с помощью какого-нибудь универсального приложения для чтения тегов (например, моего NFC TagInfo или NXP TagInfo), чтобы убедиться, что все секторы доступны для записи с помощью транспортных ключей.