¿Cómo puedo resolver un nombre de dominio Bonjour en Android?

Necesito que mi aplicación reproduzca un archivo de vídeo ubicado en mi red. Sé que la url del archivo es:

http://something.local/abc.mp4 

Ahora, cuando sustituyo manualmente "something.local" con su dirección IP verdadera, el MediaPlayer no tiene ningún problema para reproducirlo. Sin embargo, cuando tengo la dirección anterior, el MediaPlayer errores con error (1, -1007) .

Así que estoy asumiendo que esto es porque Android no entiende "algo.local" como correcto.

Mi pregunta es: ¿Cómo puedo "traducir" something.local en un ip yo mismo, para que luego pueda pasarlo a MediaPlayer ?

Una pequeña advertencia: Creo que MediaPlayer no funciona con direcciones IPv6, así que por favor tenga esto en cuenta …


Sólo una nota lateral, en caso de que haga mi situación más clara: Cuando ejecuto ping something.local -4 en el símbolo del sistema de Windows, devuelve:

 Pinging something.local [192.168.1.126] with 32 bytes of data: Reply from 192.168.1.126: bytes=32 time=145ms TTL=64 Reply from 192.168.1.126: bytes=32 time=112ms TTL=64 Reply from 192.168.1.126: bytes=32 time=32ms TTL=64 Reply from 192.168.1.126: bytes=32 time=169ms TTL=64 

Esa traducción donde las ventanas fueron de something.local -> 192.168.1.126 es lo que quiero hacer en mi aplicación para Android.

En primer lugar, necesita leer el documento sobre Bonjour (término de iOS) o Zero Config (término de Linux).

Para entender lo que es something.local:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/NetServices/Articles/about.html#//apple_ref/doc/uid/TP40002458-SW1

Por ejemplo, si un usuario escribe steve.local. En un navegador Web, esto le indica al sistema que multidifiera la solicitud de steve en la red local en lugar de enviarla al servidor DNS convencional. Si un equipo habilitado con Bonjour llamado steve está en la red local, se le envía la dirección IP correcta al navegador del usuario. Esto permite a los usuarios acceder a hosts y servicios locales sin un servidor DNS convencional.

Para saber cómo resolverlo:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/NetServices/Articles/NetServicesArchitecture.html#//apple_ref/doc/uid/20001074-SW1

Para la biblioteca de java, las respuestas anteriores proporcionaron un buen ejemplo.

Debe probar este fragmento con la API de la biblioteca jmDNS .. puede que necesite algunos cambios.

 JmDNS jmdns = JmDNS.create(); DNSEntry addressEntry = jmdns.getCache().getDNSEntry(name, DNSRecordType.TYPE_A, DNSRecordClass.CLASS_ANY); if (addressEntry instanceof DNSRecord) { ServiceInfo cachedAddressInfo = ((DNSRecord) addressEntry).getServiceInfo(true); if (cachedAddressInfo != null) { for (Inet4Address address : cachedAddressInfo.getInet4Addresses()) { // use the `address` } } 

Tienes acceso a java, net APIS en android y puedes usarlos para resolver direcciones.

http://docs.oracle.com/javase/1.4.2/docs/api/java/net/InetAddress.html

Sin embargo, el éxito dependerá de la configuración adecuada de la red. Su dispositivo recibe la configuración del servidor DNS a través de DHCP, por lo que está a merced del proveedor de la red

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.