问题描述
我正在尝试通过Wi-Fi Direct广告Bonjour服务。 这是代码:
manager.clearLocalServices(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Map<String, String> record = new HashMap<>();
record.put("qwe", "123");
WifiP2pDnsSdServiceInfo serviceInfo = WifiP2pDnsSdServiceInfo.newInstance("_test", "_presence._tcp", record);
manager.addLocalService(channel, serviceInfo, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
manager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {}
@Override
public void onFailure(int reason) {}
});
}
@Override
public void onFailure(int reason) {}
});
}
@Override
public void onFailure(int reason) {}
});
在Kali Linux上,我使用wpi_cli查找服务
> p2p_serv_disc_req 00:00:00:00:00:00 02000001
> p2p_find
Kali成功发现Android,我看到相应的消息:
P2P-DEVICE-FOUND 70:0b:c0:ac:63:11 p2p_dev_addr=70:0b:c0:ac:63:11 pri_dev_type=10-0050F204-5 name='PSP5506DUO' config_methods=0x188 dev_capab=0x25 group_capab=0x0 new=1
但是没有发现有关服务的以下信息。
我怎样才能确保问题出在哪一边? Android是否不宣传服务,还是Kali找不到服务?
而更通用的问题-是否有无线网络连接的P2P服务的广告,发现Android应用程序的工作示例?
1楼
我怀疑问题不仅仅在于Android方面,因为我已经获得了WiFi直接服务发现,可以在2个Android设备之间使用额外的文本信息。 如果没有问题,以下是示例活动,您可以在两个设备上运行该活动:
因此,我要用来诊断问题的方法是首先确保上述代码在您的设备上可以使用。 那将确保确实播出了某些内容。 在那之后,我认为您必须怀疑Kali是问题所在。
另外两个陷阱:
服务发现通常包括两个步骤:获取服务名称,然后获取其信息。 在某些api中,您注册的侦听器与获取信息的侦听器不同,以获取名称。 有些api还要求您在命名后调用诸如
resolve service
类的东西,这将明确获取信息。 虽然不确定卡利...内置的Android WiFi(非WiFi直接)API不能在大多数版本低于6.0(或者可能是7,我忘记了)的设备上检索信息。 特别是,在较旧的设备上,您可以得到名称,但由于在实施中存在了多年的实施错误,因此无法获得信息,并且Google尚未解决。 这就是为什么我建议您首先尝试Android到Android的原因。 只是为了排除在特定的android设备上无法正常运行的可能性。