2010-09-02 9 views
16

Quelqu'un at-il obtenu Multicast pour travailler sur Android 2.2, en particulier JmDNS pour la détection de service Bonjour. Il y a beaucoup de questions & réponses de la période Android 1.5-> 2.0, y compris sur stackOverflow, qui indiquent différents niveaux de succès, et un bug dans le bug tracker qui indique qu'il a été fixé, et fermé, pour 2.2 (http://code.google.com/p/android/issues/detail?id=2323). J'ai essayé le code source "TuneControl", mais cela a fonctionné sur ~ 1.5 et n'a pas été mis à jour, et ne fonctionne pas pour moi sur 2.2.Multicast sur Android 2.2

Ainsi, les questions ... 1) a-t-quelqu'un vu le travail de multidiffusion sur 2.2, en particulier JmDNS, et plus particulièrement pour la détection de service Bonjour?

2) Qu'est-ce qui est nécessaire dans le code pour que cela fonctionne?

J'utilise les autorisations appropriées:

<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

<uses-permission android:name="android.permission.INTERNET"/> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 

I acquérir le verrou multicast:

WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
if(wifi != null) 
{ 
    MulticastLock mcLock = wifi.createMulticastLock("mylock"); 
    mcLock.acquire(); 
... 

Et puis essayez de démarrer jmDNS à chercher des serveurs:

mdns = JmDNS.create(addr, HOSTNAME); 
    jmdns.addServiceListener(TOUCH_ABLE_TYPE, listener); 
    jmdns.addServiceListener(DACP_TYPE, listener); 
    ... 

L'écouteur ne voit aucun service. J'ai vérifié en utilisant Wireshark que les paquets de demande sont envoyés, et que le serveur répond, mais le paquet de réponse n'est jamais vu par le code d'écouteur de prise dans la bibliothèque de jmDNS.

Alors ... je manque quelque chose? Est-ce toujours un bug? Quelqu'un at-il obtenu quelque chose, même à distance, comme ça au travail ???

Répondre

13

Pour (rudement) répondre à ma propre question, plus d'informations ont été fournies au http://code.google.com/p/android/issues/detail?id=2917#c48 par une autre personne. Pour la postérité, comme on dit, voici brian.ro ... @ gmail.com réponse de ...

«J'ai passé un peu de temps débogage des problèmes mDNS avec JmDNS sur mon Evo et HTC Hero (CDMA). Ce que j'ai trouvé est il semble y avoir un filtre dans place dans le pilote sans fil broadcom sur le Evo (et depuis que je reçois un similaire à un utilisateur HTC Desire - avec le même chipset, vraisemblablement ce combiné également.) Le filtre, par défaut , bloque tout trafic de diffusion réseau non monodiffusion ou , y compris multidiffusion. eory était c'est un économiseur de batterie.

Le problème semble être le wpa_supplicant sur l'Evo ne pas support la suppression de ces filtres lorsque vous obtenez un MulticastLock. (Vérifiez la sortie du journal juste après avoir obtenu le verrou et vous verrez ce que je veux dire). Malheureusement ce qui est arrivé est les fournisseurs de matériel ont fragmenté support multicast .... :(»

Alors ... il semble que c'est un problème de l'appareil plus d'un problème de codage D'oh..: (Si j'ai l'occasion de tester sur un autre appareil ...

+0

de traitement de multidiffusion sur Android est vraiment problématique à ce point (2.2). – jldupont

+1

Je reçois le "multicast lock" OK sur mon appareil Samsung Galaxy S mais je ne reçois que les paquets que j'ai envoyés. Pour contourner ce problème pour mon application, je construis un service Web qui sera utilisé pour "enregistrer" les services LAN que je veux contrôler avec mes appareils Android. De cette façon, je ne dépends pas de la disponibilité de la multidiffusion sur le matériel. – jldupont

7

J'ai fait un peu de recherche dans ce domaine, et je crois que c'est un problème avec Android en général, et corrigé dans ou autour d'Android 2.3.7.

Il est un peu trop anecdotique, mais voici ce que je l'ai testé:

  • HTC Desire, 2.2, Stock: fail
  • HTC Desire, 2.3.7, CyanogenMod: succès
  • Motorola Milestone, 2.1 -update1: fail
  • HTC Desire S, 2.3.3: fail
  • Acer Iconia A501, 3.2.1: succès
  • quelque chose Samsung, 2.3.3: fail
  • HTC Legend, 2.2 je pense: fail

Quand je dis « échec », en fait, ils ont tous été en mesure d'envoyer des messages de multidiffusion aux dispositifs « de réussite », mais ne reçoivent rien, sauf leurs propres messages - Comme décrit jldupont. Notez que l'application de messagerie instantanée multicast Kouchat n'est disponible qu'à partir de la version 2.3.7, même si elle peut être compilée depuis 2.1, ce qui donne plus de crédibilité à cette théorie.

+0

Merci Rob pour l'info, je suis nouveau à la multidiffusion. Pensez-vous que je serais en mesure d'envoyer un paquet de multidiffusion à partir d'Android HTC désir API-8 à Windows PC? – Ahmed

+0

Le niveau d'API 8 est 2.2, donc je pense que vous pourrez envoyer du Desire au PC, mais le Désir ne pourra rien recevoir en retour. –

+0

Merci, je vais l'essayer, pour moi juste l'envoi serait suffisant parce que moi Android est un serveur et les clients ont besoin de le découvrir .. – Ahmed

1

Je pense que l'autre raison est que votre AP ne supporte pas.

Autres: Ordinateur Envoyer/recieve à/de Android

votre ordinateur ne doit utiliser WIFI, Best off tout autre réseau