Loading core/java/android/nfc/INfcTag.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -37,4 +37,5 @@ interface INfcTag int write(int nativeHandle, in NdefMessage msg); int makeReadOnly(int nativeHandle); int getModeHint(int nativeHandle); int formatNdef(int nativeHandle, in byte[] key); } core/java/android/nfc/Tag.java +4 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.nfc.technology.MifareClassic; import android.nfc.technology.MifareUltralight; import android.nfc.technology.NfcV; import android.nfc.technology.Ndef; import android.nfc.technology.NdefFormatable; import android.nfc.technology.NfcA; import android.nfc.technology.NfcB; import android.nfc.technology.NfcF; Loading Loading @@ -157,6 +158,9 @@ public class Tag implements Parcelable { case TagTechnology.NDEF: { return new Ndef(adapter, this, tech, extras); } case TagTechnology.NDEF_FORMATABLE: { return new NdefFormatable(adapter, this, tech, extras); } case TagTechnology.NFC_F: { return new NfcF(adapter, this, extras); } Loading core/java/android/nfc/technology/NdefFormatable.java +32 −2 Original line number Diff line number Diff line Loading @@ -56,7 +56,37 @@ public final class NdefFormatable extends BasicTagTechnology { * Formats a tag as NDEF, if possible. You may supply a first * NdefMessage to be written on the tag. */ public void format(NdefMessage firstMessage) throws IOException { throw new UnsupportedOperationException(); public void format(NdefMessage firstMessage) throws IOException, FormatException { try { byte[] DEFAULT_KEY = {(byte)0xFF,(byte)0xFF,(byte)0xFF, (byte)0xFF,(byte)0xFF,(byte)0xFF}; int serviceHandle = mTag.getServiceHandle(); int errorCode = mTagService.formatNdef(serviceHandle, DEFAULT_KEY); switch (errorCode) { case ErrorCodes.SUCCESS: break; case ErrorCodes.ERROR_IO: throw new IOException(); case ErrorCodes.ERROR_INVALID_PARAM: throw new FormatException(); default: // Should not happen throw new IOException(); } errorCode = mTagService.write(serviceHandle, firstMessage); switch (errorCode) { case ErrorCodes.SUCCESS: break; case ErrorCodes.ERROR_IO: throw new IOException(); case ErrorCodes.ERROR_INVALID_PARAM: throw new FormatException(); default: // Should not happen throw new IOException(); } } catch (RemoteException e) { attemptDeadServiceRecovery(e); } } } Loading
core/java/android/nfc/INfcTag.aidl +2 −1 Original line number Diff line number Diff line Loading @@ -37,4 +37,5 @@ interface INfcTag int write(int nativeHandle, in NdefMessage msg); int makeReadOnly(int nativeHandle); int getModeHint(int nativeHandle); int formatNdef(int nativeHandle, in byte[] key); }
core/java/android/nfc/Tag.java +4 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.nfc.technology.MifareClassic; import android.nfc.technology.MifareUltralight; import android.nfc.technology.NfcV; import android.nfc.technology.Ndef; import android.nfc.technology.NdefFormatable; import android.nfc.technology.NfcA; import android.nfc.technology.NfcB; import android.nfc.technology.NfcF; Loading Loading @@ -157,6 +158,9 @@ public class Tag implements Parcelable { case TagTechnology.NDEF: { return new Ndef(adapter, this, tech, extras); } case TagTechnology.NDEF_FORMATABLE: { return new NdefFormatable(adapter, this, tech, extras); } case TagTechnology.NFC_F: { return new NfcF(adapter, this, extras); } Loading
core/java/android/nfc/technology/NdefFormatable.java +32 −2 Original line number Diff line number Diff line Loading @@ -56,7 +56,37 @@ public final class NdefFormatable extends BasicTagTechnology { * Formats a tag as NDEF, if possible. You may supply a first * NdefMessage to be written on the tag. */ public void format(NdefMessage firstMessage) throws IOException { throw new UnsupportedOperationException(); public void format(NdefMessage firstMessage) throws IOException, FormatException { try { byte[] DEFAULT_KEY = {(byte)0xFF,(byte)0xFF,(byte)0xFF, (byte)0xFF,(byte)0xFF,(byte)0xFF}; int serviceHandle = mTag.getServiceHandle(); int errorCode = mTagService.formatNdef(serviceHandle, DEFAULT_KEY); switch (errorCode) { case ErrorCodes.SUCCESS: break; case ErrorCodes.ERROR_IO: throw new IOException(); case ErrorCodes.ERROR_INVALID_PARAM: throw new FormatException(); default: // Should not happen throw new IOException(); } errorCode = mTagService.write(serviceHandle, firstMessage); switch (errorCode) { case ErrorCodes.SUCCESS: break; case ErrorCodes.ERROR_IO: throw new IOException(); case ErrorCodes.ERROR_INVALID_PARAM: throw new FormatException(); default: // Should not happen throw new IOException(); } } catch (RemoteException e) { attemptDeadServiceRecovery(e); } } }