# android-upnp-discovery **Repository Path**: ailexy/android-upnp-discovery ## Basic Information - **Project Name**: android-upnp-discovery - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-06-29 - **Last Updated**: 2024-03-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Android-uPnP-Discovery Discover UPnP devices via SSDP (Simple Service Discovery Protocol) on the current WiFi network ## How: 1. Send M-SEARCH request via Multicast UDP 2. Receive Unicast UDP response from compatible devices 3. Get and parse XML description file from device # Demo # Installation ## Gradle ```text implementation 'com.github.custanator:upnpdiscovery:1.0.1' ``` # Usage ## Basically usage Search all devices (M-SEARCH ST: ssdp:all) ```java UPnPDiscovery.discoveryDevices(activity, new UPnPDiscovery.OnDiscoveryListener() { @Override public void OnStart() { Log.d("UPnPDiscovery", "Starting discovery"); } @Override public void OnFoundNewDevice(UPnPDevice device) { Log.d("UPnPDiscovery", "Found new device: " + device.toString()); // String friendlyName = device.getFriendlyName(); // ... see UPnPDevice description below } @Override public void OnFinish(HashSet devices) { Log.d("UPnPDiscovery", "Finish discovery"); } @Override public void OnError(Exception e) { Log.d("UPnPDiscovery", "Error: " + e.getLocalizedMessage()); } }); ``` ## Extended usage For custom query use: ```java String customQuery = "M-SEARCH * HTTP/1.1" + "\r\n" + "HOST: 239.255.255.250:1900" + "\r\n" + "MAN: \"ssdp:discover\"" + "\r\n" + "MX: 1"+ "\r\n" + //"ST: urn:schemas-upnp-org:service:AVTransport:1" + "\r\n" + // Use for Sonos //"ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1" + "\r\n" + // Use for Routers "ST: ssdp:all" + "\r\n" + // Use this for all UPnP Devices (DEFAULT) "\r\n"; int customPort = 1900; String customAddress = "239.255.255.250"; UPnPDiscovery.discoveryDevices(activity, new UPnPDiscovery.OnDiscoveryListener() { @Override public void OnStart() { Log.d("UPnPDiscovery", "Starting discovery"); } @Override public void OnFoundNewDevice(UPnPDevice device) { Log.d("UPnPDiscovery", "Found new device: " + device.toString()); // String friendlyName = device.getFriendlyName(); // ... see UPnPDevice description below } @Override public void OnFinish(HashSet devices) { Log.d("UPnPDiscovery", "Finish discovery"); } @Override public void OnError(Exception e) { Log.d("UPnPDiscovery", "Error: " + e.getLocalizedMessage()); } }, customQuery, customAddress, customPort); ``` ## Methods UPNPDevice object has methods: ```java public String getHostAddress(); public String getHeader(); public String getST(); public String getUSN(); public String getServer(); public String getLocation(); public String getDescriptionXML(); public String getDeviceType(); public String getFriendlyName(); public String getPresentationURL(); public String getSerialNumber(); public String getModelName(); public String getModelNumber(); public String getModelURL(); public String getManufacturer(); public String getManufacturerURL(); public String getUDN(); public String getURLBase(); // Return all params public String toString(); ``` # Links 1. https://en.wikipedia.org/wiki/Universal_Plug_and_Play 2. https://en.wikipedia.org/wiki/Simple_Service_Discovery_Protocol 3. https://tools.ietf.org/html/draft-cai-ssdp-v1-03#section-2.2.1 4. http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.1.pdf 5. https://github.com/berndverst/android-ssdp