| java.lang.Object | |
| ↳ | android.net.nsd.NsdManager | 
The Network Service Discovery Manager class provides the API to discover services on a network. As an example, if device A and device B are connected over a Wi-Fi network, a game registered on device A can be discovered by a game on device B. Another example use case is an application discovering printers on the network.
The API currently supports DNS based service discovery and discovery is currently limited to a local network over Multicast DNS. DNS service discovery is described at http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt
The API is asynchronous and responses to requests from an application are on listener callbacks on a seperate thread.
There are three main operations the API supports - registration, discovery and resolution.
        Application start
                                 |
                                 |
                                 |                  onServiceRegistered()
                     Register any local services  /
                      to be advertised with       \
                       registerService()            onRegistrationFailed()
                                 |
                                 |
                          discoverServices()
                                 |
                      Maintain a list to track
                        discovered services
                                 |
                                 |--------->
                                 |          |
                                 |      onServiceFound()
                                 |          |
                                 |     add service to list
                                 |          |
                                 |<----------
                                 |
                                 |--------->
                                 |          |
                                 |      onServiceLost()
                                 |          |
                                 |   remove service from list
                                 |          |
                                 |<----------
                                 |
                                 |
                                 | Connect to a service
                                 | from list ?
                                 |
                          resolveService()
                                 |
                         onServiceResolved()
                                 |
                     Establish connection to service
                     with the host and port information
       
       An application that needs to advertise itself over a network for other applications to
 discover it can do so with a call to
       
        
         registerService(NsdServiceInfo, int, NsdManager.RegistrationListener)
        
       
       . If Example is a http based
 application that can provide HTML data to peer services, it can register a name "Example"
 with service type "_http._tcp". A successful registration is notified with a callback to
       
        
         onServiceRegistered(NsdServiceInfo)
        
       
       and a failure to register is notified
 over
       
        
         onRegistrationFailed(NsdServiceInfo, int)
        
       
      
      
       A peer application looking for http services can initiate a discovery for "_http._tcp"
 with a call to
       
        
         discoverServices(String, int, NsdManager.DiscoveryListener)
        
       
       . A service found is notified with a callback
 to
       
        
         onServiceFound(NsdServiceInfo)
        
       
       and a service lost is notified on
       
        
         onServiceLost(NsdServiceInfo)
        
       
       .
      
       Once the peer application discovers the "Example" http srevice, and needs to receive data
 from the "Example" application, it can initiate a resolve with
       
        
         resolveService(NsdServiceInfo, NsdManager.ResolveListener)
        
       
       to
 resolve the host and port details for the purpose of establishing a connection. A successful
 resolve is notified on
       
        
         onServiceResolved(NsdServiceInfo)
        
       
       and a failure is notified
 on
       
        
         onResolveFailed(NsdServiceInfo, int)
        
       
       .
 Applications can reserve for a service type at
 http://www.iana.org/form/ports-service. Existing services can be found at
 http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml
 Get an instance of this class by calling
       
        
         Context.getSystemService(Context.NSD_SERVICE)
        
       
       .
      
| Nested Classes | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 
          | 
        NsdManager.DiscoveryListener | Interface for callback invocation for service discovery | |||||||||
| 
          | 
        NsdManager.RegistrationListener | Interface for callback invocation for service registration | |||||||||
| 
          | 
        NsdManager.ResolveListener | Interface for callback invocation for service resolution | |||||||||
| Constants | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| String | ACTION_NSD_STATE_CHANGED | Broadcast intent action to indicate whether network service discovery is enabled or disabled. | |||||||||
| String | EXTRA_NSD_STATE | The lookup key for an int that indicates whether network service discovery is enabled or disabled. | |||||||||
| int | FAILURE_ALREADY_ACTIVE | Indicates that the operation failed because it is already active. | |||||||||
| int | FAILURE_INTERNAL_ERROR | 
          Failures are passed with
          
           
            onRegistrationFailed(NsdServiceInfo, int)
           
          
          ,
          
           
            onUnregistrationFailed(NsdServiceInfo, int)
           
          
          ,
          
           
            onStartDiscoveryFailed(String, int)
           
          
          ,
          
           
            onStopDiscoveryFailed(String, int)
           
          
          or
          
           
            onResolveFailed(NsdServiceInfo, int)
           
          
          .
          | 
        |||||||||
| int | FAILURE_MAX_LIMIT | Indicates that the operation failed because the maximum outstanding requests from the applications have reached. | |||||||||
| int | NSD_STATE_DISABLED | Network service discovery is disabled | |||||||||
| int | NSD_STATE_ENABLED | Network service discovery is enabled | |||||||||
| int | PROTOCOL_DNS_SD | Dns based service discovery protocol | |||||||||
| Public Methods | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 
           | 
         
           
           Initiate service discovery to browse for instances of a service type.
           
          | 
        ||||||||||
| 
           | 
         
           
           Register a service to be discovered by other services.
           
          | 
        ||||||||||
| 
           | 
         
           
           Resolve a discovered service.
           
          | 
        ||||||||||
| 
           | 
         
           
           Stop service discovery initiated with
            
         
            
             discoverServices(String, int, NsdManager.DiscoveryListener)
            
           
           .
           | 
        ||||||||||
| 
           | 
         
           
           Unregister a service registered through
            
         
            
             registerService(NsdServiceInfo, int, NsdManager.RegistrationListener)
            
           
           .
           | 
        ||||||||||
| 
          
           [Expand]
          
           
           Inherited Methods
           
          | 
        |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
          
            
          
          From class
          
           java.lang.Object
          
           | 
        |||||||||||
         Broadcast intent action to indicate whether network service discovery is
 enabled or disabled. An extra
         
          
           EXTRA_NSD_STATE
          
         
         provides the state
 information as int.
        
         The lookup key for an int that indicates whether network service discovery is enabled
 or disabled. Retrieve it with
         
          
           getIntExtra(String, int)
          
         
         .
        
Indicates that the operation failed because it is already active.
         Failures are passed with
         
          
           onRegistrationFailed(NsdServiceInfo, int)
          
         
         ,
         
          
           onUnregistrationFailed(NsdServiceInfo, int)
          
         
         ,
         
          
           onStartDiscoveryFailed(String, int)
          
         
         ,
         
          
           onStopDiscoveryFailed(String, int)
          
         
         or
         
          
           onResolveFailed(NsdServiceInfo, int)
          
         
         .
 Indicates that the operation failed due to an internal error.
        
Indicates that the operation failed because the maximum outstanding requests from the applications have reached.
Network service discovery is disabled
Network service discovery is enabled
Dns based service discovery protocol
         Initiate service discovery to browse for instances of a service type. Service discovery
 consumes network bandwidth and will continue until the application calls
         
          
           stopServiceDiscovery(NsdManager.DiscoveryListener)
          
         
         .
        
         The function call immediately returns after sending a request to start service
 discovery to the framework. The application is notified of a success to initiate
 discovery through the callback
         
          
           onDiscoveryStarted(String)
          
         
         or a failure
 through
         
          
           onStartDiscoveryFailed(String, int)
          
         
         .
        
         Upon successful start, application is notified when a service is found with
         
          
           onServiceFound(NsdServiceInfo)
          
         
         or when a service is lost with
         
          
           onServiceLost(NsdServiceInfo)
          
         
         .
        
         Upon failure to start, service discovery is not active and application does
 not need to invoke
         
          
           stopServiceDiscovery(NsdManager.DiscoveryListener)
          
         
        
| serviceType | The service type being discovered. Examples include "_http._tcp" for http services or "_ipp._tcp" for printers | 
|---|---|
| protocolType | The service discovery protocol | 
| listener | 
           The listener notifies of a successful discovery and is used
 to stop discovery on this serviceType through a call on
           
            
             stopServiceDiscovery(NsdManager.DiscoveryListener)
            
           
           .
 Cannot be null.
           | 
         
Register a service to be discovered by other services.
         The function call immediately returns after sending a request to register service
 to the framework. The application is notified of a success to initiate
 discovery through the callback
         
          
           onServiceRegistered(NsdServiceInfo)
          
         
         or a failure
 through
         
          
           onRegistrationFailed(NsdServiceInfo, int)
          
         
         .
        
| serviceInfo | The service being registered | 
|---|---|
| protocolType | The service discovery protocol | 
| listener | 
           The listener notifies of a successful registration and is used to
 unregister this service through a call on
           
            
             unregisterService(NsdManager.RegistrationListener)
            
           
           . Cannot be null.
           | 
         
Resolve a discovered service. An application can resolve a service right before establishing a connection to fetch the IP and port details on which to setup the connection.
| serviceInfo | service to be resolved | 
|---|---|
| listener | to receive callback upon success or failure. Cannot be null. | 
         Stop service discovery initiated with
         
          
           discoverServices(String, int, NsdManager.DiscoveryListener)
          
         
         . An active service
 discovery is notified to the application with
         
          
           onDiscoveryStarted(String)
          
         
         and it stays active until the application invokes a stop service discovery. A successful
 stop is notified to with a call to
         
          
           onDiscoveryStopped(String)
          
         
         .
        
         Upon failure to stop service discovery, application is notified through
         
          
           onStopDiscoveryFailed(String, int)
          
         
         .
        
| listener | 
           This should be the listener object that was passed to
           
            
             discoverServices(String, int, NsdManager.DiscoveryListener)
            
           
           .
 It identifies the discovery that should be stopped and notifies of a successful stop.
           | 
         
|---|
         Unregister a service registered through
         
          
           registerService(NsdServiceInfo, int, NsdManager.RegistrationListener)
          
         
         . A successful
 unregister is notified to the application with a call to
         
          
           onServiceUnregistered(NsdServiceInfo)
          
         
         .
        
| listener | 
           This should be the listener object that was passed to
           
            
             registerService(NsdServiceInfo, int, NsdManager.RegistrationListener)
            
           
           . It identifies the service that should be unregistered
 and notifies of a successful unregistration.
           | 
         
|---|