summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/nfc/technology/BasicTagTechnology.java34
-rw-r--r--core/java/android/nfc/technology/TagTechnology.java5
2 files changed, 39 insertions, 0 deletions
diff --git a/core/java/android/nfc/technology/BasicTagTechnology.java b/core/java/android/nfc/technology/BasicTagTechnology.java
index 6488ec25defc..553f6eca10d6 100644
--- a/core/java/android/nfc/technology/BasicTagTechnology.java
+++ b/core/java/android/nfc/technology/BasicTagTechnology.java
@@ -164,6 +164,40 @@ import android.util.Log;
}
} catch (RemoteException e) {
attemptDeadServiceRecovery(e);
+ throw new IOException("NFC service died");
+ }
+ }
+
+ /**
+ * Re-connect to the {@link Tag} associated with this connection.
+ * <p>
+ * Reconnecting to a tag can be used to reset the state of the tag itself.
+ * This method blocks until the connection is re-established.
+ * <p>
+ * {@link #close} can be called from another thread to cancel this connection
+ * attempt.
+ * <p>Requires {@link android.Manifest.permission#NFC} permission.
+ * @throws IOException if the target is lost, or connect canceled
+ */
+ @Override
+ public void reconnect() throws IOException {
+ if (!mIsConnected) {
+ throw new IllegalStateException("Technology not connected yet");
+ } else {
+ try {
+ int errorCode = mTagService.reconnect(mTag.getServiceHandle());
+
+ if (errorCode != ErrorCodes.SUCCESS) {
+ mIsConnected = false;
+ mTag.setTechnologyDisconnected();
+ throw new IOException();
+ }
+ } catch (RemoteException e) {
+ mIsConnected = false;
+ mTag.setTechnologyDisconnected();
+ attemptDeadServiceRecovery(e);
+ throw new IOException("NFC service died");
+ }
}
}
diff --git a/core/java/android/nfc/technology/TagTechnology.java b/core/java/android/nfc/technology/TagTechnology.java
index bef1cc4bc7fd..62216c1d7da1 100644
--- a/core/java/android/nfc/technology/TagTechnology.java
+++ b/core/java/android/nfc/technology/TagTechnology.java
@@ -82,6 +82,11 @@ public interface TagTechnology {
public void connect() throws IOException;
/**
+ * @throws IOException
+ */
+ public void reconnect() throws IOException;
+
+ /**
* Non-blocking. Immediately causes all blocking calls
* to throw IOException.
*/