【问题标题】:TXT Record from a Wifi Direct Printer来自 Wifi Direct 打印机的 TXT 记录
【发布时间】:2017-01-26 22:41:46
【问题描述】:

我正在尝试从附近的 Wifi Direct 打印机获取 TXT 记录。到目前为止,我可以发现对等点并建立连接。但是 TXT Records 没有运气。

我尝试了Wifi Direct Service Discovery,我相信我做的一切都是正确的,因为我比较了来自不同资源的大量代码,包括来自 Google 的示例项目和 GitHub 中的一些开源 Wifi Direct Wrappers。但我无法让它工作。

在尝试实现这一目标时,我也看到了一些奇怪的问题。例如,在某些设备中,当我启动对等点发现时,Wifi 连接开始不断关闭和打开。

有人能解释一下这实际上是如何工作的吗? DnsSdServiceResponseListenerDnsSdTxtRecordListener 是为 Android 设备而不是打印机设计的吗?

在建立 Android 和 Wifi Direct 打印机之间的连接后,我也尝试用 MulticastSocket 监听 MultiCast DNS IP Address (224.0.0.251),但我也无法接收任何数据。

谢谢。

【问题讨论】:

    标签: android printing wifi-direct bonjour wifip2p


    【解决方案1】:

    我在当前项目中成功使用了“DnsSdServiceResponseListener”和“DnsSdTxtRecordListener”。两个侦听器都与发现附近的本地服务相关联。

    要正确使用它们,您必须执行以下操作:

    实现你的听众

    WifiP2pManager.DnsSdServiceResponseListener dnsListener = new WifiP2pManager.DnsSdServiceResponseListener() {
                @Override
                public void onDnsSdServiceAvailable(String instanceName, String registrationType, WifiP2pDevice device) { 
               // instanceName is service name and device is the print information
    }};
    
    
    WifiP2pManager.DnsSdTxtRecordListener txtListener = new WifiP2pManager.DnsSdTxtRecordListener() {
                @Override
                public void onDnsSdTxtRecordAvailable(String fullDomain, Map record, WifiP2pDevice device) {
                // here we get the service published information in the record map object
    }};
    

    将监听器添加到您的 WiFiManager 对象

    wifiP2PManagerObj.setDnsSdResponseListeners(mChannel, dnsListener, txtListener);
    

    添加服务请求

    WifiP2pDnsSdServiceRequest serviceRequest = WifiP2pDnsSdServiceRequest.newInstance();
    wifiP2PManagerObj.addServiceRequest(mChannel,serviceRequest, actionListener);
    

    最后,发现服务

    wifiP2PManagerObj.discoverServices(mChannel,actionListener);
    

    发现服务执行成功后,监听器应该会收到附近的服务信息。

    希望这会有所帮助。 祝你好运。

    更新

    默认情况下,支持 Wifi 直连的打印机没有任何已发布的服务。要使用它们,您必须通过 wifi direct 连接到它们并作为连接到网络的打印机正常打印。请注意,这些侦听器旨在捕获已发布的服务(即不会为任何设备捕获任何内容,除非其发布服务)。

    【讨论】:

    • 感谢您的回答。但问题不在于“如何实现服务发现”。我已经实现了。我发现了广播他们信息的 Android 应用程序。但我正在寻找一种从非 Android 设备(在我的情况下是支持 Wifi Direct 的打印机)获取这些附加信息的方法。
    • 哦,知道了,Wifi 直连打印机默认没有任何已发布的服务。要使用它们,您必须通过 wifi-direct 连接到它们并作为连接到网络的打印机正常打印。请注意,这些侦听器旨在捕获已发布的服务。
    • 谢谢。我想我们可能会从打印机中取出 TXT 记录,因为它可以通过 Bonjour 获得。我尝试收听 MDNS-SD IP 地址,但没有广播。
    【解决方案2】:

    我认为您需要在建立连接后运行 Bonjour 发现。您可以看到NSD 并查找“_ipp._tcp”作为服务类型。顺便一提, 因为“我在尝试实现这一目标时也看到了一些奇怪的问题。例如,在某些设备中,当我开始对等发现时,Wifi 连接开始不断关闭和打开。”如果您在 7.1 设备上进行测试,您可能会看到这个 issue,很快就会有补丁发布。

    【讨论】:

    • 我遇到了 Wifi Direct 的问题。没有升级到 Beta 7.1.2,但我希望它得到解决。这真的很烦人。关于 NSD,我相信在建立连接后我已经尝试过 Bonjour Discovery,因为我同时运行 Wifi Direct 发现和 NSD。但我会确保是这样。我会在确认后回复您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    相关资源
    最近更新 更多