title: Problems using android Wi-Fi Direct API: mChannel = mManager.initialize()
body: <p>This is my first post, hope to do it right. I'm trying to create an application using the new android technology Wi-Fi Direct. To do so I was following the tutorial you can find in:</p>
  <p><a href="http://developer.android.com/guide/topics/connectivity/wifip2p.html" rel="nofollow noreferrer">http://developer.android.com/guide/topics/connectivity/wifip2p.html</a></p>
  <p>It's really useful, but when I copy the code, there is something wrong. Exactly with step number 3:</p>
  <pre><code>WifiP2pManager mManager;
  Channel mChannel;
  BroadcastReceiver mReceiver;
  ...
  @Override
  protected void onCreate(Bundle savedInstanceState){
      ...
      mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
      mChannel = mManager.initialize(this, getMainLooper(), null);
      mReceiver = new WiFiDirectBroadcastReceiver(manager, channel, this);
      ...
  }
  </code></pre>
  <p>The error is on line:</p>
  <pre><code>mChannel = mManager.initialize(this, getMainLooper(), null);
  </code></pre>
  <p>And the error message is:</p>
  <pre><code>Type mismatch: cannot convert from WifiPesManager.Channel to Channel
  </code></pre>
  <p>The recommendation is to make a cast like this:</p>
  <pre><code>mChannel =  (Channel) mManager.initialize(this, getMainLooper(), null);
  </code></pre>
  <p>But when I change my code for that, I have another error while running the application:</p>
  <pre><code>10-25 12:08:34.845: E/AndroidRuntime(26634): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.nacho.WifiDirect/android.nacho.WifiDirect.WifiDirect}: java.lang.ClassCastException: android.net.wifi.p2p.WifiP2pManager$Channel cannot be cast to java.nio.channels.Channel
  </code></pre>
  <p>Just add the rest of the code is exactly how it appear in the tutorial, but just in case I'm going to add the Activity and also the Broadcast class:</p>
  <h2><strong>Main Activity</strong></h2>
  <pre><code>package android.nacho.WifiDirect;
  
  import java.nio.channels.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.IntentFilter;
  import android.view.Menu;
  
  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 =  (Channel) mManager.initialize(this, getMainLooper(), null); //It was necessary to make a cast (Channel)
          mReceiver = new WiFiBroadcastReceiver(mManager, mChannel, this, this);
          
          
          //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);
          
         
      }
  
      
      @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>
  <h2><strong>WiFiBroadcastReceiver</strong></h2>
  <pre><code>package android.nacho.WifiDirect;
  
  import java.nio.channels.Channel;
  
  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;
      //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, &quot;Wi-Fi Direct is enable&quot;, Toast.LENGTH_LONG).show();
                  
               } else {
                   
                  Toast.makeText(context, &quot;Wi-Fi Direct is not enable&quot;, Toast.LENGTH_LONG).show();
               }      
              
          } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
              // Call WifiP2pManager.requestPeers() to get a list of current peers
          } 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>
  <h2><strong>AndroidManifest</strong></h2>
  <pre><code>&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
      package=&quot;android.nacho.WifiDirect&quot;
      android:versionCode=&quot;1&quot;
      android:versionName=&quot;1.0&quot; &gt;
      
      &lt;uses-sdk
          android:minSdkVersion=&quot;14&quot;
          android:targetSdkVersion=&quot;15&quot; /&gt;
      
      &lt;uses-permission android:name=&quot;android.permission.ACCESS_WIFI_STATE&quot; /&gt;
      &lt;uses-permission android:name=&quot;android.permission.CHANGE_WIFI_STATE&quot; /&gt;
      &lt;uses-permission android:name=&quot;android.permission.CHANGE_NETWORK_STATE&quot; /&gt;
      &lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
      &lt;uses-permission android:name=&quot;android.permission.ACCESS_NETWORK_STATE&quot; /&gt;
      
  
     
  
      &lt;application
          android:icon=&quot;@drawable/ic_launcher&quot;
          android:label=&quot;@string/app_name&quot;
          android:theme=&quot;@style/AppTheme&quot; &gt;
          &lt;activity
              android:name=&quot;.WifiDirect&quot;
              android:label=&quot;@string/title_activity_wifi_direct&quot; &gt;
              &lt;intent-filter&gt;
                  &lt;action android:name=&quot;android.intent.action.MAIN&quot; /&gt;
  
                  &lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
      &lt;/application&gt;
  
  &lt;/manifest&gt;
  </code></pre>
  <p>Thank you very much for your help!!!</p>