diff options
author | Martijn Coenen <martijn.coenen@nxp.com> | 2010-12-07 18:01:35 -0800 |
---|---|---|
committer | Nick Pelly <npelly@google.com> | 2010-12-07 22:30:39 -0800 |
commit | 5289b91c885158094988a9a7b51b3139565eb639 (patch) | |
tree | 482b91004fa4719c6ee755eb10cdc8f5cdb3f7b2 | |
parent | 42a23783aaabdb4e6f37ccd822d8c85f31ba8519 (diff) | |
download | frameworks_base-5289b91c885158094988a9a7b51b3139565eb639.zip frameworks_base-5289b91c885158094988a9a7b51b3139565eb639.tar.gz frameworks_base-5289b91c885158094988a9a7b51b3139565eb639.tar.bz2 |
Implement ndef formatting.
Change-Id: I6e3e3abdc304bc14d7c93a413e42bf957963e288
-rw-r--r-- | core/java/android/nfc/INfcTag.aidl | 3 | ||||
-rw-r--r-- | core/java/android/nfc/Tag.java | 4 | ||||
-rw-r--r-- | core/java/android/nfc/technology/NdefFormatable.java | 34 |
3 files changed, 38 insertions, 3 deletions
diff --git a/core/java/android/nfc/INfcTag.aidl b/core/java/android/nfc/INfcTag.aidl index ad3c1bb..f5c79e7 100644 --- a/core/java/android/nfc/INfcTag.aidl +++ b/core/java/android/nfc/INfcTag.aidl @@ -37,4 +37,5 @@ interface INfcTag int write(int nativeHandle, in NdefMessage msg); int makeReadOnly(int nativeHandle); int getModeHint(int nativeHandle); -}
\ No newline at end of file + int formatNdef(int nativeHandle, in byte[] key); +} diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java index 2f6b3a5..36de915 100644 --- a/core/java/android/nfc/Tag.java +++ b/core/java/android/nfc/Tag.java @@ -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; @@ -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); } diff --git a/core/java/android/nfc/technology/NdefFormatable.java b/core/java/android/nfc/technology/NdefFormatable.java index 7c4f9ab..3ed37a5 100644 --- a/core/java/android/nfc/technology/NdefFormatable.java +++ b/core/java/android/nfc/technology/NdefFormatable.java @@ -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); + } } } |