diff options
Diffstat (limited to 'core/java/android/nfc/tech')
-rw-r--r-- | core/java/android/nfc/tech/BasicTagTechnology.java | 11 | ||||
-rw-r--r-- | core/java/android/nfc/tech/Ndef.java | 64 | ||||
-rw-r--r-- | core/java/android/nfc/tech/NdefFormatable.java | 32 | ||||
-rw-r--r-- | core/java/android/nfc/tech/TagTechnology.java | 12 |
4 files changed, 92 insertions, 27 deletions
diff --git a/core/java/android/nfc/tech/BasicTagTechnology.java b/core/java/android/nfc/tech/BasicTagTechnology.java index 32a850d..7ec807a 100644 --- a/core/java/android/nfc/tech/BasicTagTechnology.java +++ b/core/java/android/nfc/tech/BasicTagTechnology.java @@ -53,15 +53,7 @@ import java.io.IOException; } } - /** - * Helper to indicate if {@link #connect} has succeeded. - * <p> - * Does not cause RF activity, and does not block. - * @return true if {@link #connect} has completed successfully and the {@link Tag} is believed - * to be within range. Applications must still handle {@link java.io.IOException} - * while using methods that require a connection in case the connection is lost after this - * method returns. - */ + @Override public boolean isConnected() { if (!mIsConnected) { return false; @@ -94,6 +86,7 @@ import java.io.IOException; } } + /** @hide */ @Override public void reconnect() throws IOException { if (!mIsConnected) { diff --git a/core/java/android/nfc/tech/Ndef.java b/core/java/android/nfc/tech/Ndef.java index c6804f9..39ff282 100644 --- a/core/java/android/nfc/tech/Ndef.java +++ b/core/java/android/nfc/tech/Ndef.java @@ -61,12 +61,31 @@ public final class Ndef extends BasicTagTechnology { /** @hide */ public static final String EXTRA_NDEF_TYPE = "ndeftype"; - public static final int OTHER = -1; - public static final int NFC_FORUM_TYPE_1 = 1; - public static final int NFC_FORUM_TYPE_2 = 2; - public static final int NFC_FORUM_TYPE_3 = 3; - public static final int NFC_FORUM_TYPE_4 = 4; - public static final int MIFARE_CLASSIC = 101; + /** @hide */ + public static final int TYPE_OTHER = -1; + /** @hide */ + public static final int TYPE_1 = 1; + /** @hide */ + public static final int TYPE_2 = 2; + /** @hide */ + public static final int TYPE_3 = 3; + /** @hide */ + public static final int TYPE_4 = 4; + /** @hide */ + public static final int TYPE_MIFARE_CLASSIC = 101; + + /** @hide */ + public static final String UNKNOWN = "android.ndef.unknown"; + + public static final String NFC_FORUM_TYPE_1 = "org.nfcforum.ndef.type1"; + + public static final String NFC_FORUM_TYPE_2 = "org.nfcforum.ndef.type2"; + + public static final String NFC_FORUM_TYPE_3 = "org.nfcforum.ndef.type3"; + + public static final String NFC_FORUM_TYPE_4 = "org.nfcforum.ndef.type4"; + + public static final String MIFARE_CLASSIC = "com.nxp.ndef.mifareclassic"; private final int mMaxNdefSize; private final int mCardState; @@ -118,18 +137,27 @@ public final class Ndef extends BasicTagTechnology { * Get NDEF tag type. * <p>Returns one of {@link #NFC_FORUM_TYPE_1}, {@link #NFC_FORUM_TYPE_2}, * {@link #NFC_FORUM_TYPE_3}, {@link #NFC_FORUM_TYPE_4}, - * {@link #MIFARE_CLASSIC} or {@link #OTHER}. - * <p>Platforms of this API revision will always return one of the above - * values. Platforms at future API revisions may return other values, which - * can be treated as {@link #OTHER} by applications targeting this API. + * {@link #MIFARE_CLASSIC} or another NDEF tag type that is not yet in the + * Android API. * <p>Android devices with NFC support must always correctly enumerate * NFC Forum tag types, and may optionally enumerate * {@link #MIFARE_CLASSIC} since it requires proprietary technology. - * Devices that cannot enumerate {@link #MIFARE_CLASSIC} will use - * {@link #OTHER} instead. */ - public int getType() { - return mNdefType; + public String getType() { + switch (mNdefType) { + case TYPE_1: + return NFC_FORUM_TYPE_1; + case TYPE_2: + return NFC_FORUM_TYPE_2; + case TYPE_3: + return NFC_FORUM_TYPE_3; + case TYPE_4: + return NFC_FORUM_TYPE_4; + case TYPE_MIFARE_CLASSIC: + return MIFARE_CLASSIC; + default: + return UNKNOWN; + } } /** @@ -217,10 +245,10 @@ public final class Ndef extends BasicTagTechnology { /** * Indicates whether a tag can be made read-only with - * {@link #makeReadonly()} + * {@link #makeReadOnly()} */ - public boolean canMakeReadonly() { - if (mNdefType == NFC_FORUM_TYPE_1 || mNdefType == NFC_FORUM_TYPE_2) { + public boolean canMakeReadOnly() { + if (mNdefType == TYPE_1 || mNdefType == TYPE_2) { return true; } else { return false; @@ -234,7 +262,7 @@ public final class Ndef extends BasicTagTechnology { * This is a one-way process and can not be reverted! * @throws IOException */ - public boolean makeReadonly() throws IOException { + public boolean makeReadOnly() throws IOException { checkConnected(); try { diff --git a/core/java/android/nfc/tech/NdefFormatable.java b/core/java/android/nfc/tech/NdefFormatable.java index 2919c43..e2828b5 100644 --- a/core/java/android/nfc/tech/NdefFormatable.java +++ b/core/java/android/nfc/tech/NdefFormatable.java @@ -65,8 +65,25 @@ 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. + * <p>Either all steps succeed, or an IOException is thrown if any one step + * fails. */ public void format(NdefMessage firstMessage) throws IOException, FormatException { + format(firstMessage, false); + } + + /** + * Formats a tag as NDEF, if possible. You may supply a first + * NdefMessage to be written on the tag. + * <p>Either all steps succeed, or an IOException is thrown if any one step + * fails. + */ + public void formatReadOnly(NdefMessage firstMessage) throws IOException, FormatException { + format(firstMessage, true); + } + + /*package*/ void format(NdefMessage firstMessage, boolean makeReadOnly) throws IOException, + FormatException { checkConnected(); try { @@ -101,6 +118,21 @@ public final class NdefFormatable extends BasicTagTechnology { } else { throw new IOException(); } + // optionally make read-only + if (makeReadOnly) { + errorCode = tagService.ndefMakeReadOnly(serviceHandle); + switch (errorCode) { + case ErrorCodes.SUCCESS: + break; + case ErrorCodes.ERROR_IO: + throw new IOException(); + case ErrorCodes.ERROR_INVALID_PARAM: + throw new IOException(); + default: + // Should not happen + throw new IOException(); + } + } } catch (RemoteException e) { Log.e(TAG, "NFC service dead", e); } diff --git a/core/java/android/nfc/tech/TagTechnology.java b/core/java/android/nfc/tech/TagTechnology.java index c8ccdcf..50df865 100644 --- a/core/java/android/nfc/tech/TagTechnology.java +++ b/core/java/android/nfc/tech/TagTechnology.java @@ -121,6 +121,7 @@ public interface TagTechnology extends Closeable { * @see #connect() * @see #close() * @throws IOException + * @hide */ public void reconnect() throws IOException; @@ -137,4 +138,15 @@ public interface TagTechnology extends Closeable { * @see #reconnect() */ public void close() throws IOException; + + /** + * Helper to indicate if {@link #connect} has succeeded. + * <p> + * Does not cause RF activity, and does not block. + * @return true if {@link #connect} has completed successfully and the {@link Tag} is believed + * to be within range. Applications must still handle {@link java.io.IOException} + * while using methods that require a connection in case the connection is lost after this + * method returns. + */ + public boolean isConnected(); } |