I am receiving some events and not all I am looking for. Here is the simple code that I wrote to experiment with my requirement.
All I wanted to accomplish with my code was: 1. get a list of WiFi hot spots. I have a BoadcastReceiver that gets the WifiManager.SCAN_RESULTS_AVAILABLE_ACTION intent. I can iterate through the list and find my hotspot. 2. Pick one, I am interested in. Once I find the hotspot I am interested in, I create a WifiConfiguration using the results from scan, and add that with wifiManager.addNetwork. 3. connect it. Then I call wifiManager.enableNetwork. HERE is WHRE I HAVE PROBLEM. I am expecting this will create a connection, and trigger a NETWORK_STATE_CHANGED_INTENT. But it doesn't. Here is the code I am playing with: package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import java.util.List; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class HelloAndroid extends Activity implements OnClickListener { /** Called when the activity is first created. */ private WifiManager wifiManager; private int globalCounter=0; private static final String CHOSEN_HOTSPOT = "myhotspot"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.ok); button.setOnClickListener(this); wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); // register the broadcast receiver for wifi state events IntentFilter filter = new IntentFilter(); filter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION); filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); filter.addAction(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); filter.addAction(WifiManager.EXTRA_SUPPLICANT_ERROR); filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); filter.addAction(WifiManager.RSSI_CHANGED_ACTION); registerReceiver(wifiEventReceiver, filter); } public void onClick(View v) { wifiManager.startScan(); Toast.makeText(this.getApplicationContext(),"Scan Started: "+"Msg Count: "+(++globalCounter),Toast.LENGTH_LONG).show(); } private BroadcastReceiver wifiEventReceiver = new BroadcastReceiver() { private boolean enabled = false; @Override public void onReceive(Context context, Intent intent) { System.out.println ("WiFi Event BroadReceiver: onReceive()======================================="); if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { if(enabled) return; List<ScanResult> hotSpots = wifiManager.getScanResults(); StringBuffer ssids = new StringBuffer(); for(ScanResult hotSpot: hotSpots) { String hotSpotSsid = hotSpot.SSID; String hotSpotBssid = hotSpot.BSSID; System.out.println("SSID: "+hotSpotSsid+" BSSID: "+hotSpotBssid); StringBuffer sBuf = new StringBuffer("\""); sBuf.append(hotSpotSsid+"\""); hotSpotSsid = sBuf.toString(); ssids.append(hotSpotSsid+".."); if(hotSpotSsid.indexOf(CHOSEN_HOTSPOT) > 0) { List<WifiConfiguration> networks = wifiManager.getConfiguredNetworks(); System.out.println("=====> Number of configured networks: "+networks.size()); Toast.makeText(context,"NUmber of confiured Networks: "+networks.size(),Toast.LENGTH_LONG).show(); WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.SSID = hotSpotSsid; wifiConfiguration.BSSID = hotSpotBssid; wifiConfiguration.hiddenSSID = false; wifiConfiguration.priority = 100000; // add this to the configured networks int inetId = wifiManager.addNetwork(wifiConfiguration); if(inetId < 0) { System.out.println("Unable to add network configuration for SSID: "+hotSpotSsid); Toast.makeText(context,"Unable to add SSID: "+hotSpotSsid,Toast.LENGTH_LONG).show(); return; } else { Toast.makeText(context,"Successfully added SSID: "+hotSpotSsid+" Inet Id: "+inetId,Toast.LENGTH_LONG).show(); } boolean successConnected = wifiManager.enableNetwork(inetId, true); if(successConnected) { Toast.makeText(context,"Connected to SSID: "+hotSpotSsid+" Inet Id: "+inetId,Toast.LENGTH_LONG).show(); enabled = true; break; } else { System.out.println("====> Connection attempt failed "+hotSpotSsid+" ...Returning"); return; } } } Toast.makeText(context,ssids+"Msg Count: "+(++globalCounter),Toast.LENGTH_LONG).show(); } else if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { System.out.println("===== NETWORK_STATE_CHANGE_ACTION event happened...."); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); System.out.println("Check for current connection: SSID: "+wifiInfo.getSSID()); int ipAddr = wifiInfo.getIpAddress(); System.out.println("IP Address for connection: "+ipAddr); Intent wifiEstablishedIntent = new Intent("WiFi"); wifiEstablishedIntent.putExtra("Connection", "Connection established: "+wifiInfo.getSSID()); sendBroadcast(wifiEstablishedIntent); Toast.makeText(context,"Connected: "+(++globalCounter),Toast.LENGTH_LONG).show(); } else if(intent.getAction().equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) { System.out.println("===== SUPPLICANT_STATE_CHANGE_ACTION event happened...."); intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false); } else if(intent.getAction().equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)) { System.out.println("===== SUPPLICANT_CONNECTION_CHANGE_ACTION event happened...."); intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false); } } }; } These are the permissions I am using: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission> On Thu, Aug 20, 2009 at 4:10 PM, Roman ( T-Mobile USA) < roman.baumgaert...@t-mobile.com> wrote: > > Ravi, > > I would first try to check out whether in general your code is able to > receive the intents you are looking for. > You can verify this with configuring the Wifi settings on the phone > first and then by turning on/off your AP. If you are bale to see the > events, then the next step would be to connect with your own code. > > -- > Roman Baumgaertner > Sr. SW Engineer-OSDC > ·T· · ·Mobile· stick together > The views, opinions and statements in this email are those of the > author solely in their individual capacity, and do not necessarily > represent those of T-Mobile USA, Inc. > > > On Aug 19, 10:15 pm, R Ravichandran <ravirajami...@gmail.com> wrote: > > Roman, > > > > I have all the permissions you mentioned, plus the intent filters also in > my > > code. I am trying this code on G1 phone. Still the same problem. > > > > What is the right approach to make a wifi connection to a specific hot > spot? > > > > Thanks > > > > Ravi > > > > On Wed, Aug 19, 2009 at 4:18 PM, Roman ( T-Mobile USA) < > > > > roman.baumgaert...@t-mobile.com> wrote: > > > > > Are you using the following permissions? > > > > > <uses-permission > > > android:name="android.permission.ACCESS_NETWORK_STATE"/> > > > <uses-permission > > > android:name="android.permission.CHANGE_NETWORK_STATE"/> > > > <uses-permission > > > android:name="android.permission.ACCESS_WIFI_STATE"/> > > > <uses-permission > > > android:name="android.permission.CHANGE_CHANGE_STATE"/> > > > > > How do u setup your broadcast receiver? > > > > > Write a method: > > > > > private void registerForWifiBroadcasts() { > > > IntentFilter intentFilter = new IntentFilter(); > > > intentFilter.addAction > > > (WifiManager.NETWORK_STATE_CHANGED_ACTION); > > > intentFilter.addAction > > > (WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION); > > > intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); > > > intentFilter.addAction > > > (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); > > > > > mContext.registerReceiver(this, intentFilter); > > > } > > > > > or do this in the Manifest file. > > > > > With doing this you should be able to get the state change intent. > > > > > -- > > > Roman Baumgaertner > > > Sr. SW Engineer-OSDC > > > ·T· · ·Mobile· stick together > > > The views, opinions and statements in this email are those of the > > > author solely in their individual capacity, and do not necessarily > > > represent those of T-Mobile USA, Inc. > > > > > On Aug 19, 12:51 pm, R Ravichandran <ravirajami...@gmail.com> wrote: > > > > Hello, > > > > > > I have some code using the WifiManager class that needs to do the > > > following: > > > > > > 1. scan available open wifi hotspots > > > > 2. pick one > > > > 3. establish connection. > > > > > > I am not able to successfully do steps 2 and 3. Here is the snippet: > > > > > > private BroadcastReceiver wifiEventReceiver = new > BroadcastReceiver() > > > { > > > > > > @Override > > > > public void onReceive(Context context, Intent intent) { > > > > > > > if(intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) > > > { > > > > // Asynchronous response from scan request. Hotspot > > > results > > > > are returned. > > > > > > List<ScanResult> hotSpots = > wifiManager.getScanResults(); > > > > > > for(ScanResult hotSpot: hotSpots) { > > > > String hotSpotSsid = hotSpot.SSID; > > > > String hotSpotBssid = hotSpot.BSSID; > > > > StringBuffer sBuf = new StringBuffer("\""); > > > > sBuf.append(hotSpotSsid+"\""); > > > > hotSpotSsid = sBuf.toString(); > > > > > > if(hotSpotSsid.equals("\"myhotspot\"")) { > > > > > > WifiConfiguration wifiConfiguration = new > > > > WifiConfiguration(); > > > > wifiConfiguration.SSID = hotSpotSsid; > > > > wifiConfiguration.BSSID = hotSpotBssid; > > > > wifiConfiguration.hiddenSSID = false; > > > > wifiConfiguration.priority = 100000; > > > > > > // add this to the configured networks > > > > int inetId = > > > > wifiManager.addNetwork(wifiConfiguration); > > > > if(inetId < 0) { > > > > System.out.println("Unable to add network > > > > configuration for SSID: "+hotSpotSsid); > > > > return; > > > > } > > > > // connect to this wifi network > > > > > > boolean successConnected = > > > > wifiManager.enableNetwork(inetId, true); > > > > if(successConnected) { > > > > System.out.println("====> Connected > > > > successfully to myhotspot.."); > > > > } > > > > else { > > > > System.out.println("====> Connection > attempt > > > to > > > > myhotspot failed...Returning"); > > > > return; > > > > } > > > > } > > > > > > } > > > > > > } > > > > else > > > > > if(intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { > > > > WifiInfo wifiInfo = wifiManager.getConnectionInfo(); > > > > System.out.println("Check for current connection: > SSID: > > > > "+wifiInfo.getSSID()); > > > > int ipAddr = wifiInfo.getIpAddress(); > > > > > > System.out.println("IP Address for connection: > "+ipAddr); > > > > > > } > > > > } > > > > > > I am getting the message that 'enableNetwork' call is succeeding. But > the > > > > code for handling the NETWORK_STATE_CHANGED_ACTION event never gets > > > executed > > > > > > What am I doing wrong? > > > > > > Thanks > > > > > > Ravi > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---