我有两个Android设备,我想通过wifi-direct相互连接。
其中一个是仅显示(设备A),因此没有触摸屏或鼠标等输入设备。另一个是移动电话(设备B)。因此,我希望设备A成为启动与设备B的连接的设备,以便弹出接受对话框将显示在设备B上。 我已经对wifi直接组进行了一些研究和测试,并设法将这两个设备连接在一起。不幸的是,由于设备A仅显示,我想为设备A提供一定程度的智能,以便它只连接到运行兼容应用程序的wifi直接组。我试图通过wifi直接本地服务来做到这一点。
计划是设备B广播服务,设备A是监听该服务。一旦设备A找到该服务,它将连接到设备B.然后,设备A将通告其自己的服务,以便设备B(移动电话)将知道它可以继续进行应用程序通信。
到目前为止,我已经注意到您在创建wifi-direct组之前能够看到服务。我想问一些关于wifi-direct应该如何工作的问题:
谢谢。
答案 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方法连接到设备,并缓存将它们映射到设备的服务列表。
希望这有帮助,祝你好运。