Я разрабатываю приложение для Android, которое использует WiFi Direct для обнаружения сервисов.Я следую за документацией, и все это работает.Чтобы создать службу:
private void startRegistration() {
// Create a string map containing information about your service.
Map record = new HashMap();
record.put("listenport", String.valueOf(SERVER_PORT));
record.put("buddyname", "John Doe" + (int) (Math.random() * 1000));
record.put("available", "visible");
// Service information. Pass it an instance name, service type
// _protocol._transportlayer , and the map containing
// information other devices will want once they connect to this one.
WifiP2pDnsSdServiceInfo serviceInfo =
WifiP2pDnsSdServiceInfo.newInstance("_test", "_presence._tcp", record);
// Add the local service, sending the service info, network channel,
// and listener that will be used to indicate success or failure of
// the request.
manager.addLocalService(channel, serviceInfo, new ActionListener() {
@Override
public void onSuccess() {
// Command successful! Code isn't necessarily needed here,
// Unless you want to update the UI or add logging statements.
}
@Override
public void onFailure(int arg0) {
// Command failed. Check for P2P_UNSUPPORTED, ERROR, or BUSY
}
});
}
А затем код, чтобы обнаружить его на другом устройстве:
final HashMap<String, String> buddies = new HashMap<String, String>();
// ...
private void discoverService() {
DnsSdTxtRecordListener txtListener = new DnsSdTxtRecordListener() {
@Override
/* Callback includes:
* fullDomain: full domain name: e.g "printer._ipp._tcp.local."
* record: TXT record dta as a map of key/value pairs.
* device: The device running the advertised service.
*/
public void onDnsSdTxtRecordAvailable(
String fullDomain, Map record, WifiP2pDevice device) {
Log.d(TAG, "DnsSdTxtRecord available -" + record.toString());
buddies.put(device.deviceAddress, record.get("buddyname"));
}
};
}
И все это работает.Но что, если я захочу обнаружить службу, исходящую с компьютера с Windows?Или устройство iOS?Я не думаю, что мой DnsSdTxtRecordListener
найдет их, чтобы я мог видеть записи / переменные службы.Есть ли способ добиться этого?
Я посмотрел документацию по созданию (WiFi Direct) сервисов на компьютере с Windows, и способ его реализации немного отличается ... поэтому я не уверен, что я 'я пытаюсь сделать это достижимо?