Android Wi-Fi P2P-сервис не обнаружен
Я пытаюсь рекламировать услугу Bonjour через Wi-Fi direct. Вот код:
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
Кали успешно обнаруживает 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 не рекламирует сервис, или Кали не обнаруживает его?
И более общий вопрос - есть ли рабочий пример рекламы сервисов wi-fi p2p и обнаружения приложений Android?
1 ответ
Я подозреваю, что проблема не на стороне Android просто потому, что я получил прямое обнаружение сервиса WiFi для работы с дополнительной текстовой информацией между двумя устройствами Android. Если память мне не изменяет, ниже приведен пример действия, которое вы выполняете на обоих устройствах:
https://github.com/mholzel/Dump/blob/master/NetworkServiceDiscoveryViaWifiDirect.java
Таким образом, подход, который я бы выбрал для диагностики проблемы, это сначала убедиться, что приведенный выше код работает на ваших устройствах. Это гарантировало бы, что действительно ЧТО-ТО транслируется. После этого я думаю, что вы должны подозревать, что проблема в Кали.
Еще две ошибки:
Обнаружение службы обычно представляет собой двухэтапный процесс: получите имя службы, а затем перейдите к ее информации. В некоторых API вы регистрируете других слушателей для получения имени, чем те, которые получают информацию. Некоторые apis также требуют, чтобы вы называли что-то вроде
resolve service
после того, как у вас есть имя, которое будет явно идти, получите информацию. Не уверен насчет Кали, хотя...Встроенный API Android WiFi (не WiFi direct) не работает на большинстве устройств ниже 6.0 (или, может быть, 7, я забыл) для получения информации. В частности, на старых устройствах вы можете получить имя, но не информацию из-за ошибки в реализации, которая существует уже много лет, и Google не решает проблему. Вот почему я предлагаю вам сначала попробовать Android на Android. Просто чтобы исключить вероятность того, что что-то не работает на вашем конкретном устройстве Android.