title: Android Wi-Fi Direct: onPeersAvailable
body: <p>I'm developping a simple application based on WiFi Direct for Android that has to connect two devices. To do so I need to call to the función onPeersAvailable(myPeerListListener), but I don't know how.</p>
  
  <p>My app has this two elements:</p>
  
  <p>1-Main Activity:</p>
  
  <pre><code>package android.nacho.WifiDirect;
  
  
  
  import android.net.wifi.p2p.WifiP2pManager.Channel;
  
  import android.net.wifi.p2p.WifiP2pManager;
  import android.os.Bundle;
  import android.app.Activity;
  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  import android.content.IntentFilter;
  import android.view.Menu;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.Button;
  import android.widget.TextView;
  
  public class WifiDirect extends Activity {
  
  
      WifiP2pManager mManager;
      Channel mChannel;
      BroadcastReceiver mReceiver;
  
      IntentFilter mIntentFilter;
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
  
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_wifi_direct);
  
  
          //To register the BroadastReceiver
          mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
          mChannel =   mManager.initialize(this, getMainLooper(), null); //It was necessary to make a cast (Channel)
          mReceiver = new WiFiBroadcastReceiver(mManager, mChannel, this); //, this);
  
          //Layout
          final Button btnScan = (Button)findViewById(R.id.btnScan); 
          final TextView TextDebug=(TextView)findViewById(R.id.TextDebug);
  
  
          //To define the filter in the BroadcastReceiver
          mIntentFilter = new IntentFilter();
          mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
          mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
          mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
          mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
  
  
  
  
          final OnClickListener ScanListener=new OnClickListener() //Sacado de TEstPsycologico
          {
              public void onClick(View v){
  
  
  
                  TextDebug.setText("Se intentan buscar Peers");
  
                  mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
  
  
                      public void onSuccess() {
  
                          TextDebug.setText("Ha habido éxito buscando Peers");//DEBUG: Para ver si es posible encontrar Peers
  
                      }
  
  
                      public void onFailure(int reasonCode) {
  
                          TextDebug.setText("Algo ha salido mal buscando Peers"); //DEBUG: Para ver si pasó algo raro busando Peers
                      }
                  });
  
  
                  onPeersAvailable(myPeerListListener);
  
              }
  
  
          };
  
          btnScan.setOnClickListener(ScanListener);
  
      }
  
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          getMenuInflater().inflate(R.menu.activity_wifi_direct, menu);
          return true;
      }
  
      //
  
  
      @Override
      protected void onResume() {
          super.onResume();
          registerReceiver(mReceiver, mIntentFilter);
      }
  
     // unregister the broadcast receiver
      @Override
      protected void onPause() {
          super.onPause();
          unregisterReceiver(mReceiver);
      }
  
  }
  </code></pre>
  
  <p>2 Class BroadcastReceiver:</p>
  
  <pre><code>package android.nacho.WifiDirect;
  
  import android.net.wifi.p2p.WifiP2pManager.Channel;
  import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
  
  import android.content.BroadcastReceiver;
  import android.content.Context;
  import android.content.Intent;
  import android.net.wifi.p2p.WifiP2pManager;
  import android.widget.Toast;
  
  
  
  /**
   * A BroadcastReceiver that notifies of important Wi-Fi p2p events.
   */
  
  public class WiFiBroadcastReceiver extends BroadcastReceiver {
  
      private WifiP2pManager manager;
      private Channel channel;
      private WifiDirect activity;
      private PeerListListener myPeerListListener;
  
      //For toast, add also context
      //private Context context;
  
      public WiFiBroadcastReceiver(WifiP2pManager manager, Channel channel, WifiDirect activity){//, Context context) {
  
          super();
          this.manager = manager;
          this.channel = channel;
          this.activity = activity;
         // this.context= context;
      }
  
      @Override
      public void onReceive(Context context, Intent intent) {
  
          String action = 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) {
  
                  //Toast.makeText(context, "Wi-Fi Direct is enable", Toast.LENGTH_LONG).show();
  
               } else {
  
                  //Toast.makeText(context, "Wi-Fi Direct is not enable", Toast.LENGTH_LONG).show();
               }      
  
          } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
              // Call WifiP2pManager.requestPeers() to get a list of current peers
  
               // request available peers from the wifi p2p manager. This is an
              // asynchronous call and the calling activity is notified with a
              // callback on PeerListListener.onPeersAvailable()
              if (manager != null) {
                   manager.requestPeers(channel, myPeerListListener);
                   manager.onPeersAvailable(myPeerListListener);
  
              }
  
  
  
          } 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
          }
      }
  }
  </code></pre>
  
  <p>Until now my code should be able to detect peers around the device running the app, which ID should be stored in the variable <strong>myPeerListListener</strong>. All this take place in the second intend of the BroadcastReceiver method called OnReceiv(), by calling:</p>
  
  <pre><code> manager.requestPeers(channel, myPeerListListener);
  </code></pre>
  
  <p>Now I want to manipulate that list. So following the API information it should be calling requestPeers, you can see the API on here:</p>
  
  <p><a href="http://developer.android.com/guide/topics/connectivity/wifip2p.html" rel="nofollow">http://developer.android.com/guide/topics/connectivity/wifip2p.html</a> </p>
  
  <p>*Section <strong>Discovering Peers</strong></p>
  
  <p>So what I have tried was to write below a call to:</p>
  
  <pre><code>manager.onPeersAvailable(myPeerListListener); 
  </code></pre>
  
  <p>but I get this error:</p>
  
  <p><strong>The method onPeersAvailable(WifiP2pManager.PeerListListener) is undefined for the type WifiP2pManager</strong></p>
  
  <p>Could anyone tell me how could I send the PeerListListener to the main activity properly?</p>
  
  <p>Thank you very much for your time</p>