如何使用Android的本地网络服务发现找到所有可用服务

7

我已经阅读了 Android 上关于使用 NSD 查找特定网络服务的文档。以下是我的代码,用于发现所有可用的 _http._tcp 服务。

final NsdManager.DiscoveryListener discoveryListener = new NsdManager.DiscoveryListener() {
    @Override
    public void onDiscoveryStarted(String s) {
        Log.i(TAG, "onDiscoveryStarted: " + s);
    }

    @Override
    public void onServiceFound(NsdServiceInfo nsdServiceInfo) {
        Log.i(TAG, "onServiceFound: " + nsdServiceInfo.toString());
    }

    @Override
    public void onServiceLost(NsdServiceInfo nsdServiceInfo) {
        Log.i(TAG, "onServiceLost: " + nsdServiceInfo.toString());
    }

    @Override
    public void onDiscoveryStopped(String s) {
        Log.i(TAG, "onDiscoveryStopped: " + s);
    }

    @Override
    public void onStartDiscoveryFailed(String s, int i) {
        Log.i(TAG, "onStartDiscoveryFailed: " + s);
    }

    @Override
    public void onStopDiscoveryFailed(String s, int i) {
        Log.i(TAG, "onStopDiscoveryFailed: " + s);
    }
};

final NsdManager manager = (NsdManager) getSystemService(Context.NSD_SERVICE);
manager.discoverServices("_http._tcp", NsdManager.PROTOCOL_DNS_SD, discoveryListener);

到目前为止,一切都运行良好。然而,我想知道如何使用这种方法找到网络上所有可用的服务?我可以看到使用在Google Play商店上找到的ZeroConf浏览应用程序有很多不同的服务(例如_ipp._tcp_airport._tcp_airplay._tcp_atc._tcp等)在我的本地网络上可用。是否有任何通配符可以通过单个发现监听器收集所有可用的服务,因为我在开发人员页面上找不到这样的信息?

你有没有偶然找到这个问题的解决方案? - Rebirth
@Rebirth 很抱歉,不行。但是如果您不想使用Android的NDS,则使用第三方库(例如JmDNS)可能是实现此目的的好选择。 - waqaslam
2个回答

5

使用_services._dns-sd._udp更改您的服务 我也这样做,并在nsd上运行 但在jmdns中无法工作


这里没有获取到所有的服务。 - sandeepmaaram
抱歉打扰,那个修饰符叫什么名字,文档在哪里可以找到?谢谢。 - Benjamin

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接