diff options
| -rw-r--r-- | core/java/android/nfc/technology/BasicTagTechnology.java | 34 | ||||
| -rw-r--r-- | core/java/android/nfc/technology/TagTechnology.java | 5 |
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. */ |