Most visited

Recently visited

Added in API level 16

NsdManager

public final class NsdManager
extends Object

java.lang.Object
   ↳ android.net.nsd.NsdManager


网络服务发现管理器类提供API来发现网络上的服务。 例如,如果设备A和设备B通过Wi-Fi网络连接,则设备A上注册的游戏可以通过设备B上的游戏发现。另一个示例用例是发现网络上打印机的应用程序。

该API当前支持基于DNS的服务发现,并且发现目前仅限于通过多播DNS的本地网络。 在http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt中描述了DNS服务发现

API是异步的,对来自应用程序的请求的响应是在单独线程上的侦听器回调。

API支持三种主要操作 - 注册,发现和解析。

                          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)

查找http服务的对等应用程序可以通过调用discoverServices(String, int, NsdManager.DiscoveryListener)来启动“_http._tcp”的发现。 找到的服务将通过回拨通知到onServiceFound(NsdServiceInfo)并通过onServiceLost(NsdServiceInfo)通知服务丢失。

一旦对等应用程序发现“示例”http srevice并需要从“示例”应用程序接收数据,它就可以通过resolveService(NsdServiceInfo, NsdManager.ResolveListener)解析主机和端口详细信息以建立连接。 一个成功的决心通知上onServiceResolved(NsdServiceInfo)和故障通知上onResolveFailed(NsdServiceInfo, int) 应用程序可以在http://www.iana.org/form/ports-service预订服务类型。 可以在http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml找到现有的服务。通过调用Context.getSystemService(Context.NSD_SERVICE)获得此类的一个实例。

也可以看看:

Summary

Nested classes

interface NsdManager.DiscoveryListener

用于服务发现的回调调用接口

interface NsdManager.RegistrationListener

用于服务注册的回调调用接口

interface NsdManager.ResolveListener

用于服务解析的回调调用接口

Constants

String ACTION_NSD_STATE_CHANGED

广播意图操作来指示网络服务发现是启用还是禁用。

String EXTRA_NSD_STATE

int的查找键,指示网络服务发现是启用还是禁用。

int FAILURE_ALREADY_ACTIVE

表示操作失败,因为它已处于活动状态。

int FAILURE_INTERNAL_ERROR

故障是通过与 onRegistrationFailed(NsdServiceInfo, int)onUnregistrationFailed(NsdServiceInfo, int)onStartDiscoveryFailed(String, int)onStopDiscoveryFailed(String, int)或者 onResolveFailed(NsdServiceInfo, int)

int FAILURE_MAX_LIMIT

表示操作失败,因为来自应用程序的最大未完成请求已达到。

int NSD_STATE_DISABLED

网络服务发现被禁用

int NSD_STATE_ENABLED

网络服务发现已启用

int PROTOCOL_DNS_SD

基于Dns的服务发现协议

Public methods

void discoverServices(String serviceType, int protocolType, NsdManager.DiscoveryListener listener)

启动服务发现以浏览服务类型的实例。

void registerService(NsdServiceInfo serviceInfo, int protocolType, NsdManager.RegistrationListener listener)

注册将被其他服务发现的服务。

void resolveService(NsdServiceInfo serviceInfo, NsdManager.ResolveListener listener)

解决发现的服务。

void stopServiceDiscovery(NsdManager.DiscoveryListener listener)

停止使用 discoverServices(String, int, NsdManager.DiscoveryListener)发起的服务发现。

void unregisterService(NsdManager.RegistrationListener listener)

取消注册通过 registerService(NsdServiceInfo, int, NsdManager.RegistrationListener)注册的服务。

Inherited methods

From class java.lang.Object

Constants

ACTION_NSD_STATE_CHANGED

Added in API level 16
String ACTION_NSD_STATE_CHANGED

广播意图操作来指示网络服务发现是启用还是禁用。 一个额外的EXTRA_NSD_STATE以int EXTRA_NSD_STATE提供状态信息。

也可以看看:

常量值:“android.net.nsd.STATE_CHANGED”

EXTRA_NSD_STATE

Added in API level 16
String EXTRA_NSD_STATE

int的查找键,指示网络服务发现是启用还是禁用。 getIntExtra(String, int)检索。

也可以看看:

常量值:“nsd_state”

FAILURE_ALREADY_ACTIVE

Added in API level 16
int FAILURE_ALREADY_ACTIVE

表示操作失败,因为它已处于活动状态。

常量值:3(0x00000003)

FAILURE_INTERNAL_ERROR

Added in API level 16
int FAILURE_INTERNAL_ERROR

故障是通过与onRegistrationFailed(NsdServiceInfo, int)onUnregistrationFailed(NsdServiceInfo, int)onStartDiscoveryFailed(String, int)onStopDiscoveryFailed(String, int)或者onResolveFailed(NsdServiceInfo, int) 表示操作因内部错误而失败。

常量值:0(0x00000000)

FAILURE_MAX_LIMIT

Added in API level 16
int FAILURE_MAX_LIMIT

表示操作失败,因为来自应用程序的最大未完成请求已达到。

常量值:4(0x00000004)

NSD_STATE_DISABLED

Added in API level 16
int NSD_STATE_DISABLED

网络服务发现被禁用

也可以看看:

常数值:1(0x00000001)

NSD_STATE_ENABLED

Added in API level 16
int NSD_STATE_ENABLED

网络服务发现已启用

也可以看看:

常量值:2(0x00000002)

PROTOCOL_DNS_SD

Added in API level 16
int PROTOCOL_DNS_SD

基于Dns的服务发现协议

常数值:1(0x00000001)

Public methods

discoverServices

Added in API level 16
void discoverServices (String serviceType, 
                int protocolType, 
                NsdManager.DiscoveryListener listener)

启动服务发现以浏览服务类型的实例。 服务发现会消耗网络带宽,并会一直持续到应用程序调用stopServiceDiscovery(NsdManager.DiscoveryListener)

在向框架发送服务发现请求之后,函数调用立即返回。 通过回调onDiscoveryStarted(String)或通过onStartDiscoveryFailed(String, int)发生故障,通知应用程序成功启动发现。

成功启动后,如果通过 onServiceFound(NsdServiceInfo)找到服务或通过 onServiceLost(NsdServiceInfo)丢失了服务,则会通知应用程序。

一旦失败启动,服务发现不活跃,应用程序不需要调用 stopServiceDiscovery(NsdManager.DiscoveryListener)

当不再需要此服务类型的发现时和/或应用程序暂停或停止时,应用程序应调用 stopServiceDiscovery(NsdManager.DiscoveryListener)

Parameters
serviceType String: The service type being discovered. Examples include "_http._tcp" for http services or "_ipp._tcp" for printers
protocolType int: The service discovery protocol
listener NsdManager.DiscoveryListener: 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. Cannot be in use for an active service discovery.

registerService

Added in API level 16
void registerService (NsdServiceInfo serviceInfo, 
                int protocolType, 
                NsdManager.RegistrationListener listener)

注册将被其他服务发现的服务。

函数调用在发送请求以将服务注册到框架后立即返回。 通过回调onServiceRegistered(NsdServiceInfo)通知应用程序成功注册或通过onRegistrationFailed(NsdServiceInfo, int)发生故障。

应用程序应在不再需要服务注册时和/或应用程序停止时调用 unregisterService(NsdManager.RegistrationListener)

Parameters
serviceInfo NsdServiceInfo: The service being registered
protocolType int: The service discovery protocol
listener NsdManager.RegistrationListener: The listener notifies of a successful registration and is used to unregister this service through a call on unregisterService(NsdManager.RegistrationListener). Cannot be null. Cannot be in use for an active service registration.

resolveService

Added in API level 16
void resolveService (NsdServiceInfo serviceInfo, 
                NsdManager.ResolveListener listener)

解决发现的服务。 应用程序可以在建立连接之前解析服务,以获取设置连接的IP和端口详细信息。

Parameters
serviceInfo NsdServiceInfo: service to be resolved
listener NsdManager.ResolveListener: to receive callback upon success or failure. Cannot be null. Cannot be in use for an active service resolution.

stopServiceDiscovery

Added in API level 16
void stopServiceDiscovery (NsdManager.DiscoveryListener listener)

停止使用discoverServices(String, int, NsdManager.DiscoveryListener)发起的服务发现。 使用onDiscoveryStarted(String)将活动的服务发现通知给应用程序,并且该应用程序保持活动状态,直到应用程序调用停止服务发现为止。 通过拨打电话onDiscoveryStopped(String)通知成功的站点。

在未能停止服务发现时,通过 onStopDiscoveryFailed(String, int)通知应用程序。

Parameters
listener NsdManager.DiscoveryListener: 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 or unsuccessful stop. In API versions 20 and above, the listener object may be used for another service discovery once the callback has been called. In API versions <= 19, there is no entirely reliable way to know when a listener may be re-used, and a new listener should be created for each service discovery request.

unregisterService

Added in API level 16
void unregisterService (NsdManager.RegistrationListener listener)

注销通过registerService(NsdServiceInfo, int, NsdManager.RegistrationListener)注册的服务。 通过致电onServiceUnregistered(NsdServiceInfo)将成功的取消注册通知给应用程序。

Parameters
listener NsdManager.RegistrationListener: 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 or unsuccessful unregistration via the listener callbacks. In API versions 20 and above, the listener object may be used for another service registration once the callback has been called. In API versions <= 19, there is no entirely reliable way to know when a listener may be re-used, and a new listener should be created for each service registration request.

Hooray!