来自Wifi直接打印机的TXT记录

时间:2017-01-26 22:41:47

标签: android printing wifi-direct bonjour wifip2p

我正试图从附近的Wifi直接打印机获取TXT记录。到目前为止,我可以发现同行并建立连接。但TXT唱片没有运气。

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

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

有人可以解释这实际上是如何运作的吗?对于Android设备而不是打印机是DnsSdServiceResponseListenerDnsSdTxtRecordListener吗?

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

感谢。

2 个答案:

答案 0 :(得分:0)

我用过" 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直接连接到它们并正常打印,因为它的打印机连接到您的网络。请注意,这些侦听器旨在捕获已发布的服务(即除非发布服务,否则不会捕获任何设备的任何内容)。

答案 1 :(得分:0)

我认为一旦建立连接,您将需要运行Bonjour发现。您可以看到NSD并查找" _ipp._tcp"作为服务类型。顺便说说, 因为我在尝试实现这一目标时也遇到了一些奇怪的问题。例如,在某些设备中,当我启动对等发现时,Wifi连接开始被关闭并持续打开。"如果你在7.1设备上进行测试,你可能会看到这个issue,补丁即将推出。