Thanks for that Kostya

I have come across a bit of a problem though.

After a scan there are 11 AP's found and all 11 show up in the list in the
Wifi settings on the device.

But when I use 
getConfiguredNetworks<http://developer.android.com/reference/android/net/wifi/WifiManager.html#getConfiguredNetworks>()
it only returns 4 configured networks.

This happens despite the 11 AP's showing up in the settings after a scan.

So the majority of the time when I compared the AP with the best signal's
SSID with the SSID's in the Configured Network list the majority of the time
no matching SSID is found.

In that case I try to add a new network but this ends up creating duplicates
of the AP in the settings list.

On Thu, May 13, 2010 at 5:24 PM, Kostya Vasilyev <kmans...@gmail.com> wrote:

> Hi,
>
> 1. Regarding duplicates. Android maintains a list of "known" networks - for
> each, it stores the SSID, encryption configuration, along with the password,
> if necessary. Each known network also has a unique numeric ID.
>
> You can only connect to networks on this "known" list, because, as you
> correctly figured out, connecting to a network is done by its id.
>
> However, it's not necessary to add the network to this list if it's already
> been added (by Android or by your application).
>
> You can get the list of known networks from the WifiManager:
>
>
> http://developer.android.com/reference/android/net/wifi/WifiManager.html#getConfiguredNetworks
> ()
>
> You can match these networks to your live scan results using their SSIDs.
> If the network is already in the known list, just use its numeric id. If
> not, you get the numeric ID back from addNetwork().
>
> 2. Once you have the numeric ID, call enableNetwork(networkId, true) to
> connect. The second parameter means "disconnect from others", not "forget
> all other network" as its name might seem to imply.
>
> -- Kostya Vasilyev
>
>
> 2010/5/13 draf...@gmail.com <draf...@gmail.com>
>
>> I am currently trying to write a class in Android that will Scan for
>> access points, calculate which access point has the best signal and
>> then connect to that access point.
>>
>>
>> So the application will be able to scan on the move and attach to new
>> access points on the go.
>>
>> I have the scanning and calculation of the best signal working.
>>
>> But when it comes to attaching to the best access point I am having
>> trouble.
>>
>> It appears that enableNetwork(netid, othersTrueFalse) is the only
>> method for attaching to an Access point but this causes problems as
>> from my Scan Results I am not able to get the id of the access point
>> with the strongest signal.
>>
>> This is my code:
>>
>> ---
>>
>>    public void doWifiScan(){
>>
>>          scanTask = new TimerTask() {
>>      public void run() {
>>          handler.post(new Runnable() {
>>              public void run() {
>>                   sResults = wifiManager.scan(getBaseContext());
>>                   if(sResults!=null)
>>                   Log.d("TIMER", "sResults count" + sResults.size());
>>                   ScanResult scan =
>> wifiManager.calculateBestAP(sResults);
>>                   wifiManager.addNewAccessPoint(scan);
>>               }
>>           });
>>        }};
>>
>>        t.schedule(scanTask, 3000, 30000);
>>    }
>>
>>
>> ---
>>
>>    public ScanResult calculateBestAP(List<ScanResult> sResults){
>>
>>                 ScanResult bestSignal = null;
>>                    for (ScanResult result : sResults) {
>>                      if (bestSignal == null
>>                          ||
>> WifiManager.compareSignalLevel(bestSignal.level,
>> result.level) < 0)
>>                        bestSignal = result;
>>                    }
>>
>>                    String message = String.format("%s networks found. %s
>> is the
>> strongest. %s is the bsid",
>>                            sResults.size(), bestSignal.SSID,
>> bestSignal.BSSID);
>>
>>                    Log.d("sResult", message);
>>                    return bestSignal;
>>        }
>>
>>
>> ---
>>
>>    public void addNewAccessPoint(ScanResult scanResult){
>>
>>                WifiConfiguration wc = new WifiConfiguration();
>>                wc.SSID = '\"' + scanResult.SSID + '\"';
>>                //wc.preSharedKey  = "\"password\"";
>>                wc.hiddenSSID = true;
>>                wc.status = WifiConfiguration.Status.ENABLED;
>>
>>  wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
>>
>>  wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
>>
>>  wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
>>
>> wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
>>
>> wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
>>                wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
>>                int res = mainWifi.addNetwork(wc);
>>                Log.d("WifiPreference", "add Network returned " + res );
>>                boolean b = mainWifi.enableNetwork(res, false);
>>                Log.d("WifiPreference", "enableNetwork returned " + b );
>>
>>        }
>>
>>
>> ---
>>
>> When I try to use addNewAccessPoint(ScanResult scanResult) it just
>> adds another AP to the list in the settings application with the same
>> name as the one with the best signal, so I end up with loads of
>> duplicates and not actually attaching to them.
>>
>> Can anyone point me in the direction of a better solution?
>>
>> --
>> 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<android-developers%2bunsubscr...@googlegroups.com>
>> For more options, visit this group at
>> http://groups.google.com/group/android-developers?hl=en
>
>
>  --
> 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<android-developers%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

-- 
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

Reply via email to