Android Wifi直接群组和服务

时间:2017-03-27 18:14:31

标签: android wifi-direct

我有两个Android设备,我想通过wifi-direct相互连接。

其中一个是仅显示(设备A),因此没有触摸屏或鼠标等输入设备。另一个是移动电话(设备B)。因此,我希望设备A成为启动与设备B的连接的设备,以便弹出接受对话框将显示在设备B上。 我已经对wifi直接组进行了一些研究和测试,并设法将这两个设备连接在一起。不幸的是,由于设备A仅显示,我想为设备A提供一定程度的智能,以便它只连接到运行兼容应用程序的wifi直接组。我试图通过wifi直接本地服务来做到这一点。

计划是设备B广播服务,设备A是监听该服务。一旦设备A找到该服务,它将连接到设备B.然后,设备A将通告其自己的服务,以便设备B(移动电话)将知道它可以继续进行应用程序通信。

到目前为止,我已经注意到您在创建wifi-direct组之前能够看到服务。我想问一些关于wifi-direct应该如何工作的问题:

  • 如果一台设备看到了某项服务,但没有连接到包含广播该服务的设备的组,那么我假设您无法直接连接到该服务/设备?它总是i)连接到组,然后ii)连接到设备。
  • 如果是这样,因为我可以看到服务而不是与服务广播公司在同一组中,那么我怎么知道广播该服务的设备在我设备的当前wifi-direct组中,并且我连接到同一台设备? 我知道你可以得到一个"同行名单"组中当前连接的对等体,但是有一种很好的方式来建立关联服务广播公司" =="这个特定的同行?"

谢谢。

1 个答案:

答案 0 :(得分:0)

我相信你走在正确的轨道上。

关于第一个问题:设备可以连接到任何宣传本地服务的对等方。即使它们不在同一个组中,当设备连接到另一个设备时,它们会自动形成另一个/新组,请参阅下一个问题解答,说明如何获取服务对等体。

对于第二个问题:可以将发现的服务与特定的对等体相关联,甚至不需要调用get peers列表。你可以这样说:

在启动服务发现之前实现本地服务侦听器:

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
}};

请注意,每个对象都返回一个WifiP2pDevice device对象,您可以使用此对象使用manager connect方法连接到设备,并缓存将它们映射到设备的服务列表。

希望这有帮助,祝你好运。