I made a simple Android app that reads/writes text messages to various tag types
The code I'm attaching here works fine with Ultralight Cards, but fails with MifareClassic 1k cards
@Override
public void onNdefOperations(NdefOperations ndefOperations) {
try {
if (ndefOperations.isFormatted() ) {
String message = caller.getMessage();
Record r = new TextRecord(message);
ndefOperations.writeNdefMessage(r);
caller.runOnUiThread(new Runnable() {
@Override
public void run() {
caller.manageNDEF(caller.getMessage());
}
});
}
else{
ndefOperations.format();
Log.i(NFCTOOLS, "not formatted");
}
}catch (Exception e){
e.printStackTrace();
}
}
I get this exception:
05-06 10:15:34.249: I/NDEFManageActivity(7805): Reader name: ACS ACR122U PICC Interface
05-06 10:15:34.249: I/NDEFManageActivity(7805): Number of slots: 1
05-06 10:15:35.389: I/NFCTOOLS(7805): Sending: FF82000006A0A1A2A3A4A5
05-06 10:15:35.389: I/NFCTOOLS(7805): Received: 2 | 9000000000000000000000000000000000000000000000000000000000000000
05-06 10:15:35.389: I/NFCTOOLS(7805): Sending: FF860000050100036000
05-06 10:15:35.429: I/NFCTOOLS(7805): Received: 2 | 9000000000000000000000000000000000000000000000000000000000000000
05-06 10:15:35.429: I/NFCTOOLS(7805): Sending: FFB0000310
05-06 10:15:35.459: I/NFCTOOLS(7805): Received: 18 | 000000000000787788C100000000000090000000000000000000000000000000
05-06 10:15:35.469: I/NFCTOOLS(7805): Sending: FF82000006A0A1A2A3A4A5
05-06 10:15:35.469: I/NFCTOOLS(7805): Received: 2 | 9000000000000000000000000000000000000000000000000000000000000000
05-06 10:15:35.469: I/NFCTOOLS(7805): Sending: FF860000050100036000
05-06 10:15:35.509: I/NFCTOOLS(7805): Received: 2 | 9000000000000000000000000000000000000000000000000000000000000000
05-06 10:15:35.509: I/NFCTOOLS(7805): Sending: FFB0000310
05-06 10:15:35.529: I/NFCTOOLS(7805): Received: 18 | 000000000000787788C100000000000090000000000000000000000000000000
05-06 10:15:35.529: I/NFCTOOLS(7805): Sending: FF82000006A0A1A2A3A4A5
05-06 10:15:35.539: I/NFCTOOLS(7805): Received: 2 | 9000000000000000000000000000000000000000000000000000000000000000
05-06 10:15:35.539: I/NFCTOOLS(7805): Sending: FF860000050100016000
05-06 10:15:35.579: I/NFCTOOLS(7805): Received: 2 | 9000000000000000000000000000000000000000000000000000000000000000
05-06 10:15:35.579: I/NFCTOOLS(7805): Sending: FFB0000110
05-06 10:15:35.599: I/NFCTOOLS(7805): Received: 18 | 140103E103E103E103E103E103E103E190000000000000000000000000000000
05-06 10:15:35.599: I/NFCTOOLS(7805): Sending: FFB0000210
05-06 10:15:35.619: I/NFCTOOLS(7805): Received: 18 | 03E103E103E103E103E103E103E103E190000000000000000000000000000000
05-06 10:15:35.619: I/NFCTOOLS(7805): Sending: FF82000006FFFFFFFFFFFF
05-06 10:15:35.629: I/NFCTOOLS(7805): Received: 2 | 9000000000000000000000000000000000000000000000000000000000000000
05-06 10:15:35.629: I/NFCTOOLS(7805): Sending: FF860000050100076000
05-06 10:15:35.729: I/NFCTOOLS(7805): Received: 2 | 6300000000000000000000000000000000000000000000000000000000000000
05-06 10:15:35.739: I/AndroidLoggerFactory(7805): Logger name 'org.nfctools.mf.classic.MfClassicNdefOperations' exceeds maximum length of 23 characters, using 'o*.n*.m*.c*.MfClassicN*' instead.
05-06 10:15:35.749: W/System.err(7805): java.lang.IllegalStateException: Tag not writable
05-06 10:15:35.749: W/System.err(7805): at org.nfctools.mf.ndef.AbstractNdefOperations.assertWritable(AbstractNdefOperations.java:74)
05-06 10:15:35.749: W/System.err(7805): at org.nfctools.mf.classic.MfClassicNdefOperations.writeNdefMessage(MfClassicNdefOperations.java:96)
05-06 10:15:35.749: W/System.err(7805): at eu.marcoalbarelli.android.demo.nfc.WritingNdefOperationsListener.onNdefOperations(WritingNdefOperationsListener.java:30)
05-06 10:15:35.749: W/System.err(7805): at org.nfctools.mf.classic.MfClassicNfcTagListener.handleTag(MfClassicNfcTagListener.java:53)
05-06 10:15:35.749: W/System.err(7805): at eu.marcoalbarelli.android.demo.nfc.ReaderStateChangeListener.onStateChange(ReaderStateChangeListener.java:67)
05-06 10:15:35.759: W/System.err(7805): at com.acs.smartcard.Reader$a.run(SourceFile:846)
05-06 10:15:35.759: W/System.err(7805): at java.lang.Thread.run(Thread.java:856)
If I try to format the card before writing I get a LoginException instead of the " Tag not writable" one