Problems using Android Wi-Fi Direct API: mChannel = mManager.initialize ()

This is my first post, I hope to do it right. I am trying to create an application using the new Wi-Fi Direct technology. To do this, I followed the tutorial, which you can find in:

http://developer.android.com/guide/topics/connectivity/wifip2p.html

This is really useful, but when I copy the code, something is wrong. Exactly with step 3:

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); ... } 

The error is on the line:

 mChannel = mManager.initialize(this, getMainLooper(), null); 

And the error message:

Type mismatch: cannot convert from WifiPesManager.Channel to channel

The recommendation is to roll as follows:

mChannel = (channel) mManager.initialize (this, getMainLooper (), null);

But when I change my code to this, I have another error when starting the application:

10-25 12: 08: 34.845: E / AndroidRuntime (26634): java.lang.RuntimeException: Cannot start Activity ComponentInfo {android.nacho.WifiDirect / android.nacho.WifiDirect.WifiDirect}: java.lang.ClassCastException: android .net.wifi.p2p.WifiP2pManager $ The channel cannot be transferred to java.nio.channels.Channel

Just add the rest of the code exactly as it appears in the tutorial, but just in case, I'm going to add an Activity, as well as a Broadcast class:

1-core activity:

  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); } } 

2-Broadcast class:

  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, "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 } 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 wifi state changing } } } 

3 Android Manifest:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.nacho.WifiDirect" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".WifiDirect" android:label="@string/title_activity_wifi_direct" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

Many thanks for your help.

+4
source share
1 answer

You are using a channel class from the wrong package.

Do import android.net.wifi.p2p.WifiP2pManager.Channel;

instead

import java.nio.channels.Channel;

+8
source

Source: https://habr.com/ru/post/1442014/


All Articles