Android Wifi-direct 组和服务
Android Wifi-direct groups and services
我有两个 Android 设备,我想通过 wifi-direct 相互连接。
其中一个仅用于显示(设备 A),因此没有触摸屏或鼠标等输入设备。另一个是手机 phone(设备 B)。因此,我希望设备 A 成为启动与设备 B 的连接的设备,以便弹出接受对话框显示在设备 B 上。
我对 wifi-direct 组进行了一些研究和测试,并设法将两个设备连接在一起。不幸的是,由于设备 A 仅用于显示,我想为设备 A 提供一定程度的智能,以便它仅连接到 运行 兼容应用程序的 wifi-direct 组。我正在尝试通过 wifi-direct 本地服务执行此操作。
计划是设备 B 广播服务,设备 A 收听该服务。一旦设备 A 找到该服务,它将连接到设备 B。然后,设备 A 将通告其自己的服务,以便设备 B,即移动设备 phone,将知道它可以继续进行应用程序通信。
到目前为止,我注意到您可以在创建 wifi-direct 组之前看到服务。我想问一些关于 wifi-direct 应该如何工作的问题:
- 如果一台设备看到一项服务,但未连接到包含广播该服务的设备的组,那么我假设您无法直接连接到 service/device?总是 i) 连接到组,然后 ii) 连接到设备。
- 如果是这样,因为我可以看到服务而无需与服务广播者在同一组中,那么我怎么知道广播该服务的设备在我设备的当前 wifi-direct 组中,并且我'我连接到同一台设备?
我知道你可以在一个组中获得 "peers list" 个当前连接的对等点,但是有没有一种好的方法来建立 "service broadcaster" == "this specific peer?"
的关联
谢谢。
我相信你是对的。
关于第一个问题:设备可以连接到通告本地服务的任何对等点。即使他们不在同一个组中,当一个设备连接到另一个设备时,它们会自动形成另一个/新组,请参阅下一个问题答案,解释如何获得服务对等体。
对于第二个问题:可以将发现的服务与特定的对等点相关联,甚至无需调用获取对等点列表。您可以按照以下方式进行:
在启动服务发现之前实施本地服务侦听器:
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
}};
请注意,每个 returns 一个 WifiP2pDevice device
对象,您可以使用此对象使用管理器连接方法连接到设备,并缓存将它们映射到设备的服务列表。
希望这对你有所帮助,祝你好运。
我有两个 Android 设备,我想通过 wifi-direct 相互连接。
其中一个仅用于显示(设备 A),因此没有触摸屏或鼠标等输入设备。另一个是手机 phone(设备 B)。因此,我希望设备 A 成为启动与设备 B 的连接的设备,以便弹出接受对话框显示在设备 B 上。 我对 wifi-direct 组进行了一些研究和测试,并设法将两个设备连接在一起。不幸的是,由于设备 A 仅用于显示,我想为设备 A 提供一定程度的智能,以便它仅连接到 运行 兼容应用程序的 wifi-direct 组。我正在尝试通过 wifi-direct 本地服务执行此操作。
计划是设备 B 广播服务,设备 A 收听该服务。一旦设备 A 找到该服务,它将连接到设备 B。然后,设备 A 将通告其自己的服务,以便设备 B,即移动设备 phone,将知道它可以继续进行应用程序通信。
到目前为止,我注意到您可以在创建 wifi-direct 组之前看到服务。我想问一些关于 wifi-direct 应该如何工作的问题:
- 如果一台设备看到一项服务,但未连接到包含广播该服务的设备的组,那么我假设您无法直接连接到 service/device?总是 i) 连接到组,然后 ii) 连接到设备。
- 如果是这样,因为我可以看到服务而无需与服务广播者在同一组中,那么我怎么知道广播该服务的设备在我设备的当前 wifi-direct 组中,并且我'我连接到同一台设备? 我知道你可以在一个组中获得 "peers list" 个当前连接的对等点,但是有没有一种好的方法来建立 "service broadcaster" == "this specific peer?" 的关联
谢谢。
我相信你是对的。
关于第一个问题:设备可以连接到通告本地服务的任何对等点。即使他们不在同一个组中,当一个设备连接到另一个设备时,它们会自动形成另一个/新组,请参阅下一个问题答案,解释如何获得服务对等体。
对于第二个问题:可以将发现的服务与特定的对等点相关联,甚至无需调用获取对等点列表。您可以按照以下方式进行:
在启动服务发现之前实施本地服务侦听器:
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
}};
请注意,每个 returns 一个 WifiP2pDevice device
对象,您可以使用此对象使用管理器连接方法连接到设备,并缓存将它们映射到设备的服务列表。
希望这对你有所帮助,祝你好运。