Added in [API level 34](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 7](https://developer.android.com/sdkExtensions)

# NsdManager.ServiceInfoCallback

*** ** * ** ***

` public static interface NsdManager.ServiceInfoCallback `   
` `

|---|
| android.net.nsd.NsdManager.ServiceInfoCallback |

<br />

*** ** * ** ***

Callback to listen to service info updates. For use with `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.DiscoveryRequest,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)` to register, and with `https://developer.android.com/reference/android/net/nsd/NsdManager#unregisterServiceInfoCallback(android.net.nsd.NsdManager.ServiceInfoCallback)` to stop listening.

## Summary

| ### Public methods ||
|---|---|
| ` default void` | ` https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceInfoCallbackRegistered()() ` Reports that the callback was successfully registered. |
| ` abstract void` | ` https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceInfoCallbackRegistrationFailed(int)(int errorCode) ` Reports that registering the callback failed with an error. |
| ` abstract void` | ` https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceInfoCallbackUnregistered()() ` Reports that service info updates have stopped. |
| ` abstract void` | ` https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceLost()() ` Reports when the service that this callback listens to becomes unavailable. |
| ` default void` | ` https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceLost(android.net.nsd.NsdServiceInfo)(https://developer.android.com/reference/android/net/nsd/NsdServiceInfo serviceInfo) ` Reports when the service that this callback listens to becomes unavailable. |
| ` abstract void` | ` https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceUpdated(android.net.nsd.NsdServiceInfo)(https://developer.android.com/reference/android/net/nsd/NsdServiceInfo serviceInfo) ` Reports updated service info. |

## Public methods

### onServiceInfoCallbackRegistered

Added in [API level 37](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 22](https://developer.android.com/sdkExtensions)

```
public void onServiceInfoCallbackRegistered ()
```

Reports that the callback was successfully registered.

Called on the executor passed to `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.DiscoveryRequest,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)`.

This indicates that onServiceInfoCallbackRegistrationFailed will not be called, and service update callbacks will be sent.

<br />

### onServiceInfoCallbackRegistrationFailed

Added in [API level 34](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 7](https://developer.android.com/sdkExtensions)

```
public abstract void onServiceInfoCallbackRegistrationFailed (int errorCode)
```

Reports that registering the callback failed with an error. Called on the executor passed to `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.DiscoveryRequest,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)`. onServiceInfoCallbackRegistrationFailed will be called exactly once when the callback could not be registered. No other callback will be sent in that case.

<br />

| Parameters ||
|---|---|
| `errorCode` | `int`: Value is one of the following: - `https://developer.android.com/reference/android/net/nsd/NsdManager#FAILURE_ALREADY_ACTIVE` - `https://developer.android.com/reference/android/net/nsd/NsdManager#FAILURE_BAD_PARAMETERS` - `https://developer.android.com/reference/android/net/nsd/NsdManager#FAILURE_PERMISSION_DENIED` |

### onServiceInfoCallbackUnregistered

Added in [API level 34](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 7](https://developer.android.com/sdkExtensions)

```
public abstract void onServiceInfoCallbackUnregistered ()
```

Reports that service info updates have stopped. Called on the executor passed to `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.DiscoveryRequest,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)`. A callback unregistration operation will call onServiceInfoCallbackUnregistered once. After this, the callback may be reused.

<br />

### onServiceLost

Added in [API level 34](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 22](https://developer.android.com/sdkExtensions)

```
public abstract void onServiceLost ()
```

Reports when the service that this callback listens to becomes unavailable.

Called on the executor passed to `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.DiscoveryRequest,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)`. The service may become available again, in which case `https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceUpdated(android.net.nsd.NsdServiceInfo)` will be called.

This method is never called if `https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceLost(android.net.nsd.NsdServiceInfo)` is implemented.

When registering through `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.DiscoveryRequest,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)`, `https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceLost(android.net.nsd.NsdServiceInfo)` should be used instead, as multiple services may be found and this method does not indicate which one was lost.

Additionally, when registering through `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.NsdServiceInfo,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)`, if `https://developer.android.com/reference/android/net/nsd/NsdServiceInfo#getNetwork()` is null, the service may be found on multiple networks, so `https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceLost(android.net.nsd.NsdServiceInfo)` should also be preferred as it allows identifying on which network the service was lost.

<br />

### onServiceLost

Added in [API level 37](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 22](https://developer.android.com/sdkExtensions)

```
public void onServiceLost (NsdServiceInfo serviceInfo)
```

Reports when the service that this callback listens to becomes unavailable.

Called on the executor passed to `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.DiscoveryRequest,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)`. The service may become available again, in which case `https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceUpdated(android.net.nsd.NsdServiceInfo)` will be called.

This is called every time a service (as per `https://developer.android.com/reference/android/net/nsd/NsdServiceInfo#getServiceName()`) is lost on any `https://developer.android.com/reference/android/net/Network` (as per `https://developer.android.com/reference/android/net/nsd/NsdServiceInfo#getNetwork()`) on which it was previously discovered. Therefore, this method may be called multiple times for a given service name, if multiple `https://developer.android.com/reference/android/net/nsd/NsdManager.ServiceInfoCallback#onServiceUpdated(android.net.nsd.NsdServiceInfo)` callbacks were received for that service name on different networks.

<br />

| Parameters ||
|---|---|
| `serviceInfo` | `NsdServiceInfo`: The service that was lost. This value cannot be `null`. <br /> |

### onServiceUpdated

Added in [API level 34](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [T Extensions 7](https://developer.android.com/sdkExtensions)

```
public abstract void onServiceUpdated (NsdServiceInfo serviceInfo)
```

Reports updated service info. Called on the executor passed to `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.DiscoveryRequest,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)`. Any service updates will be notified via this callback until `https://developer.android.com/reference/android/net/nsd/NsdManager#unregisterServiceInfoCallback(android.net.nsd.NsdManager.ServiceInfoCallback)` is called. This will only be called once the service is found, so may never be called if the service is never present.

For each service (as identified by `https://developer.android.com/reference/android/net/nsd/NsdServiceInfo#getServiceName()`) and network (as per `https://developer.android.com/reference/android/net/nsd/NsdServiceInfo#getNetwork()`), this will be called when the service is first found on the `https://developer.android.com/reference/android/net/Network`, and then every time `https://developer.android.com/reference/android/net/nsd/NsdServiceInfo` is updated for that service.

Note the same service name may be found multiple times on different networks, if `https://developer.android.com/reference/android/net/nsd/DiscoveryRequest#getNetwork()` (when registered via `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.DiscoveryRequest,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)`) or `https://developer.android.com/reference/android/net/nsd/NsdServiceInfo#getNetwork()` (when registered via `https://developer.android.com/reference/android/net/nsd/NsdManager#registerServiceInfoCallback(android.net.nsd.NsdServiceInfo,%20java.util.concurrent.Executor,%20android.net.nsd.NsdManager.ServiceInfoCallback)`) was not specified. The `https://developer.android.com/reference/android/net/nsd/NsdServiceInfo` contents may differ in that case; in particular `https://developer.android.com/reference/android/net/nsd/NsdServiceInfo#getHostAddresses()` may depend on the network.

<br />

| Parameters ||
|---|---|
| `serviceInfo` | `NsdServiceInfo`: This value cannot be `null`. <br /> |