nsdManager.discoverServices传入MDNS协议
时间: 2023-07-21 22:32:57 浏览: 58
是的,当调用`discoverServices()`方法时,第二个参数应该设置为`NsdManager.PROTOCOL_DNS_SD`,它表示使用mDNS协议进行服务发现。例如:
```java
nsdManager.discoverServices("_http._tcp", NsdManager.PROTOCOL_DNS_SD, discoveryListener);
```
在上面的代码中,我们使用了`_http._tcp`这个服务类型字符串来发现支持HTTP协议的服务,并且将第二个参数设置为`NsdManager.PROTOCOL_DNS_SD`,以使用mDNS协议进行服务发现。
相关问题
nsdManager.discoverServices如何选择mdns协议
要使用mDNS协议来发现网络服务,可以使用Android的NSD API中的discoveryListeners参数。具体来说,您需要创建一个NsdManager.DiscoveryListener对象,并在其onStartDiscovery()方法中指定协议类型为PROTOCOL_MDNS,然后将该对象作为discoveryListeners参数传递给nsdManager.discoverServices()方法。
以下是使用mDNS协议发现网络服务的示例代码:
```
NsdManager nsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);
NsdManager.DiscoveryListener discoveryListener = new NsdManager.DiscoveryListener() {
@Override
public void onStartDiscovery(String serviceType) {
nsdManager.discoverServices(serviceType, NsdManager.PROTOCOL_MDNS, discoveryListener);
}
//...
};
nsdManager.discoverServices("_http._tcp", NsdManager.PROTOCOL_MDNS, discoveryListener);
```
在上面的代码中,我们创建了一个名为_discoveryListener的NsdManager.DiscoveryListener对象,并在其onStartDiscovery()方法中指定协议类型为PROTOCOL_MDNS。然后,我们调用nsdManager.discoverServices()方法来开始发现_http._tcp服务,同时将_discoveryListener对象作为discoveryListeners参数传递给该方法。
请注意,使用mDNS协议发现网络服务需要在AndroidManifest.xml文件中添加以下权限:
```
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
```
同时,您还需要在gradle.build文件中添加以下依赖项:
```
implementation 'androidx.jmdns:jmdns:3.5.5'
```
这是因为Android的NSD API并不直接支持mDNS协议,而是使用第三方库jmdns来实现该协议。
nsd mdns协议代码
以下是一个使用Android NSD框架实现mDNS协议的示例代码,该代码可以用于在Android设备上发现其他支持mDNS的设备和服务:
```java
// 初始化NsdManager
NsdManager nsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE);
// 创建一个NsdManager.DiscoveryListener,用于处理发现事件
NsdManager.DiscoveryListener discoveryListener = new NsdManager.DiscoveryListener() {
@Override
public void onStartDiscoveryFailed(String serviceType, int errorCode) {
// 发现服务失败
}
@Override
public void onStopDiscoveryFailed(String serviceType, int errorCode) {
// 停止发现服务失败
}
@Override
public void onDiscoveryStarted(String serviceType) {
// 开始发现服务
}
@Override
public void onDiscoveryStopped(String serviceType) {
// 停止发现服务
}
@Override
public void onServiceFound(NsdServiceInfo serviceInfo) {
// 找到服务
}
@Override
public void onServiceLost(NsdServiceInfo serviceInfo) {
// 服务丢失
}
};
// 开始发现服务
nsdManager.discoverServices("_http._tcp", NsdManager.PROTOCOL_DNS_SD, discoveryListener);
// 停止发现服务
nsdManager.stopServiceDiscovery(discoveryListener);
```
在上面的示例代码中,我们首先通过调用`getSystemService()`方法获得了一个NsdManager实例,然后创建了一个NsdManager.DiscoveryListener对象来处理发现事件。接着,我们调用`discoverServices()`方法开始发现支持mDNS协议的服务,该方法传入了一个服务类型字符串和一个协议类型常量。最后,我们可以通过调用`stopServiceDiscovery()`方法停止发现服务。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)