2017-03-27 3 views
1

J'ai deux appareils Android que je voudrais connecter les uns aux autres via wifi-direct. L'un d'eux est l'affichage seulement (dispositif A) et n'a donc aucun dispositif d'entrée comme les écrans tactiles ou la souris. L'autre serait un téléphone portable (appareil B). Par conséquent, je voudrais que le périphérique A soit le périphérique pour initier la connexion au périphérique B, de sorte que la boîte de dialogue d'acceptation pop-up soit affichée sur le périphérique B. J'ai effectué quelques recherches et tests sur des groupes wifi-direct, et j'ai réussi à connecter les deux appareils ensemble. Malheureusement, comme le périphérique A est seulement affiché, je voudrais donner au périphérique A un certain niveau d'intelligence afin qu'il se connecte uniquement aux groupes wifi-direct qui exécutent une application compatible. J'essaye de faire ceci par l'intermédiaire des services locaux de wifi-direct.Groupes et services Android Wifi-direct

Le plan prévoit que le périphérique B diffusera un service et le périphérique A pour qu'il écoute ce service. Une fois que le dispositif A trouve le service, il se connectera au dispositif B. Ensuite, le dispositif A annoncera son propre service, de sorte que le dispositif B, le téléphone mobile, saura qu'il peut poursuivre la communication de l'application. Jusqu'ici, j'ai remarqué que vous pouviez voir un service avant la création du groupe wifi-direct. Je voudrais poser quelques questions sur la façon dont le devrait travailler wifi direct:

  • Si un appareil voit un service, mais non connecté à un groupe qui contient le dispositif qui diffuse le service, alors je suppose que vous ne pouvez pas vous connecter au service/appareil directement? C'est toujours i) se connecter au groupe, puis ii) se connecter à l'appareil. Si tel est le cas, puisque je peux voir un service sans être dans le même groupe que le diffuseur de service, comment saurais-je que le périphérique diffusant le service est dans le groupe wifi-direct actuel de mon appareil, et que je me connecte au même appareil? Je sais que vous pouvez obtenir une "liste de pairs" des pairs actuellement connectés dans un groupe, mais est-il un bon moyen de faire de l'association "service broadcaster" == "ce pair spécifique?"

Merci.

Répondre

0

Je crois que vous êtes sur la bonne voie. En ce qui concerne la première question: Un appareil peut se connecter à n'importe quel peer qui annonce un service local. Même s'ils ne sont pas dans le même groupe, lorsqu'un périphérique se connecte à un autre, ils forment un autre/nouveau groupe automatiquement, voir la question suivante expliquant comment obtenir le pair de service. Pour la deuxième question: il est possible d'associer des services découverts à des homologues spécifiques, sans même appeler la liste get peers. Vous pouvez suivre cette voie:

Mettre en oeuvre les auditeurs de services locaux avant de lancer la découverte de service:

WifiP2pManager.DnsSdServiceResponseListener dnsListener = new WifiP2pManager.DnsSdServiceResponseListener() { 
      @Override 
      public void onDnsSdServiceAvailable(String instanceName, String registrationType, WifiP2pDevice device) { 
      // instanceName is service name and device is the print information 
}}; 


WifiP2pManager.DnsSdTxtRecordListener txtListener = new WifiP2pManager.DnsSdTxtRecordListener() { 
      @Override 
      public void onDnsSdTxtRecordAvailable(String fullDomain, Map record, WifiP2pDevice device) { 
      // here we get the service published information in the record map object 
}}; 

Notez que chacun d'entre eux retourne un objet WifiP2pDevice device, vous pouvez utiliser cet objet pour se connecter à l'appareil en utilisant le gestionnaire connectez la méthode et mettez en cache la liste des services qui les mappent à leurs périphériques.

J'espère que cela aide, goodluck.

+0

Merci pour la description descriptive. Je voudrais demander plus de précisions à ce sujet, cependant, "Un appareil peut se connecter à n'importe quel peer qui annonce un service local.Même s'ils ne sont pas dans le même groupe, lorsqu'un périphérique se connecte à un autre, ils forment un autre/nouveau groupe automatiquement " Dois-je m'assurer qu'un périphérique se connectant à un groupe se connecte au chef de groupe actuel? – yhBoey

+0

Bon point, oui, vous devez vous assurer de vous connecter au propriétaire du groupe, sinon vous allez établir un nouveau groupe. Habituellement, après l'établissement d'un groupe, tous les appareils désactivent la publicité de service. La meilleure solution est que tous les appareils désactivent la publicité de service et que le serveur lance un nouveau service avec un nom différent qui peut être utilisé pour comprendre qu'un service est déjà établi et que cet appareil en est le propriétaire. . – JAD