8
votes

Liste des pairs directe Android / Java WiFi

YO,

J'essaie d'obtenir un appareil Android (c'est un Nexus 7 bien que je ne puisse pas imaginer que cela compte trop) pour communiquer avec une framboise PI à travers les merveilles de WiFi Direct. Soi-disant que c'est possible, et cela semblait il y a six heures comme une meilleure solution que de descendre la route du client-serveur, mais je suis dans des problèmes p>

Le site Web du développeur Android est agréable qu'il a deux guides: P>

http://developer.android. Com / Formation / Connect-Connect-Périphériques-Sans fil / wifi-direct.html http://developer.android.com/guide/topics/connectivity/wifip2p.html p>

Qui est charmant, car je n'ai pas de masses d'expérience dans Java. Mais le problème avec ... bien beaucoup sur ce site en fait, est-ce que les éléments du code qu'ils jugent à la main droite (c'est-à-dire où mettre les choses) sont souvent manquants. P>

J'ai suivi les deux guides assez étroitement mais j'ai atteint un problème - l'intention wifi_p2p_peers_changed_action est jamais diffusée, alors quand je cherche des pairs, il commence la recherche, dit que tout va bien, mais ne me donne pas une liste des résultats ... que je 'M Deviner, il devrait P>

Je lutt dans ceci depuis la majeure partie de la journée avec un joli cas de foin pour faire la vie supplémentaire plus doux p>

Code: P>

Activité: P>

package com.example.bingotest;

import java.util.ArrayList;
import java.util.List;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager.Channel;
import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
import android.util.Log;

public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {
    private WifiP2pManager _manager;
    private Channel _channel;
    private BingoActivity _activityRef;
    private List _peers = new ArrayList();

    PeerListListener _peerListListener;


    //-------------------------------------------------------------------------------

    public WiFiDirectBroadcastReceiver(WifiP2pManager manager, Channel channel, BingoActivity activity, PeerListListener peerListListener) {
        super();
        _manager = manager;
        _channel = channel;
        _activityRef = activity;        
        _peerListListener = peerListListener;


        _manager.discoverPeers(_channel, new WifiP2pManager.ActionListener() {
            @Override
            public void onSuccess() {
                Log.d("wifi", "onsuccess");
            }

            @Override
            public void onFailure(int reasonCode) {
                Log.d("wifi", "onfailure");
            }
        });



    }

    //-------------------------------------------------------------------------------

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        Log.d("wifi", "receive: " + intent.getAction());

        if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
            // Check to see if Wi-Fi is enabled and notify appropriate activity
            int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);

            if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
                Log.d("wifi", "WIFI DIRECT ON");

            } else {
                Log.d("wifi", "WIFI DIRECT OFF");
            }

        }
        else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
            Log.d("wifi", "Peers changed");        
            if (_manager != null) {
                _manager.requestPeers(_channel, _peerListListener);
            }

        }
        else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
            // Respond to new connection or disconnections
        }
        else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
            // Respond to this device's wifi state changing
        }

    }

    //-------------------------------------------------------------------------------

}


2 commentaires

Merci de poser cette question ..


Avez-vous trouvé une solution encore?


4 Réponses :



3
votes

Je peux voir que vous avez fait une découverte initiale lors de votre construisation wifidirectbroadcastreceiver

et ensuite dans votre activité .Enresume () vous construisez d'abord wifidirectbroadcastreceiver et ensuite registresReceiver () . xxx

Le problème que vous ne voyez pas la réponse revenir est probablement à cause de la séquence. découverte () à Activity.Enresume () devrait résoudre le problème.


0 commentaires

0
votes

Essayez de changer ceci: xxx

à ceci: xxx


0 commentaires

0
votes

Google fournit un exemple direct WiFi depuis oct. 2011: HTTPS: //android.googlesource.com/platform/development/+/master/samples/wifidirectdemo

J'ai ajouté ce lien car il m'a fallu un certain temps pour le trouver (le lien d'origine est de refermer la démo WiFi P2P, pas wifidirectdemo).


2 commentaires

L'exemple de code de l'OP indique qu'il est au courant de cette démo


Pas directement, le lien fourni dans les guides Android était cassé au moment de ma réponse, et sont toujours: ils indiquent: développeur.android.com/resources/samples/wifidirectdemo/.../a>