【问题标题】:Android Wifi-direct groups and servicesAndroid Wifi-direct 组和服务
【发布时间】:2017-08-20 14:06:02
【问题描述】:

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

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

计划是让设备 B 广播服务,让设备 A 收听该服务。一旦设备 A 找到服务,它就会连接到设备 B。然后,设备 A 会发布自己的服务,以便设备 B 手机知道它可以继续进行应用程序通信。

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

  • 如果一台设备看到一项服务,但未连接到包含广播该服务的设备的组,那么我假设您无法直接连接到服务/设备?始终是 i) 连接到群组,然后 ii) 连接到设备。
  • 如果是这样,因为我可以看到服务而不与服务广播者在同一组中,那么我怎么知道广播服务的设备在我设备的当前 wifi-direct 组中,并且我正在连接到同一个设备? 我知道您可以获得组中当前连接的对等点的“对等点列表”,但是有没有一种好方法可以建立“服务广播者”==“这个特定对等点”的关联?

谢谢。

【问题讨论】:

    标签: android wifi-direct


    【解决方案1】:

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

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

    对于第二个问题:可以将发现的服务与特定的对等点相关联,甚至无需调用 get peers list。你可以这样:

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

    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 对象,您可以使用此对象使用管理器连接方法连接到设备,并缓存将它们映射到其设备的服务列表。

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

    【讨论】:

    • 感谢您的描述性回答。不过,我想要求对这一点进行更多说明,“设备可以连接到任何宣传本地服务的对等方。即使它们不在同一个组中,当一个设备连接到另一个设备时,它们也会形成另一个/新的自动组”我是否需要确保连接到组的设备连接到当前组长?或者它可以只连接到一个对等点,它就会自行解决吗?
    • 好点,是的,你必须确保连接到群主,否则你将建立一个新群。通常,在建立群组后,所有设备都会关闭服务广告,以便群组所有者是唯一可用的服务。或者更好的解决方案是所有设备关闭服务广告,服务器启动一个不同名称的新服务,可以用来理解已经建立了一个服务并且这个设备是所有者。
    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多