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 informationAn 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)
获得此类的一个实例。
也可以看看:
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 故障是通过与 |
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) 停止使用 |
void |
unregisterService(NsdManager.RegistrationListener listener) 取消注册通过 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
String ACTION_NSD_STATE_CHANGED
广播意图操作来指示网络服务发现是启用还是禁用。 一个额外的EXTRA_NSD_STATE
以int EXTRA_NSD_STATE
提供状态信息。
也可以看看:
常量值:“android.net.nsd.STATE_CHANGED”
String EXTRA_NSD_STATE
int的查找键,指示网络服务发现是启用还是禁用。 用getIntExtra(String, int)
检索。
常量值:“nsd_state”
int FAILURE_ALREADY_ACTIVE
表示操作失败,因为它已处于活动状态。
常量值:3(0x00000003)
int FAILURE_INTERNAL_ERROR
故障是通过与onRegistrationFailed(NsdServiceInfo, int)
, onUnregistrationFailed(NsdServiceInfo, int)
, onStartDiscoveryFailed(String, int)
, onStopDiscoveryFailed(String, int)
或者onResolveFailed(NsdServiceInfo, int)
。 表示操作因内部错误而失败。
常量值:0(0x00000000)
int FAILURE_MAX_LIMIT
表示操作失败,因为来自应用程序的最大未完成请求已达到。
常量值:4(0x00000004)
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. |
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. |
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. |
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. |
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. |