1919import android .net .NetworkInfo ;
2020import android .net .wifi .WifiInfo ;
2121import android .content .Context ;
22-
22+ import android .content .Intent ;
23+ import android .content .IntentFilter ;
24+ import android .content .BroadcastReceiver ;
2325import android .os .Bundle ;
2426import android .widget .Toast ;
2527import java .util .List ;
@@ -233,6 +235,14 @@ public void isRemoveWifiNetwork(String ssid, final Callback callback) {
233235 callback .invoke (false );
234236 }
235237
238+ // This method is similar to `loadWifiList` but it forcefully starts the wifi scanning on android and in the callback fetches the list
239+ @ ReactMethod
240+ public void reScanAndLoadWifiList (Callback successCallback , Callback errorCallback ) {
241+ WifiReceiver receiverWifi = new WifiReceiver (wifi , successCallback , errorCallback );
242+ getReactApplicationContext ().getCurrentActivity ().registerReceiver (receiverWifi , new IntentFilter (WifiManager .SCAN_RESULTS_AVAILABLE_ACTION ));
243+ wifi .startScan ();
244+ }
245+
236246 public static String longToIP (int longIp ){
237247 StringBuffer sb = new StringBuffer ("" );
238248 String [] strip =new String [4 ];
@@ -249,4 +259,52 @@ public static String longToIP(int longIp){
249259 sb .append (strip [3 ]);
250260 return sb .toString ();
251261 }
262+
263+ class WifiReceiver extends BroadcastReceiver {
264+
265+ private Callback successCallback ;
266+ private Callback errorCallback ;
267+ private WifiManager wifi ;
268+
269+ public WifiReceiver (final WifiManager wifi , Callback successCallback , Callback errorCallback ) {
270+ super ();
271+ this .successCallback = successCallback ;
272+ this .errorCallback = errorCallback ;
273+ this .wifi = wifi ;
274+ }
275+
276+ // This method call when number of wifi connections changed
277+ public void onReceive (Context c , Intent intent ) {
278+ // LocalBroadcastManager.getInstance(c).unregisterReceiver(this);
279+ c .unregisterReceiver (this );
280+ // getReactApplicationContext().getCurrentActivity().registerReceiver
281+ try {
282+ List < ScanResult > results = this .wifi .getScanResults ();
283+ JSONArray wifiArray = new JSONArray ();
284+
285+ for (ScanResult result : results ) {
286+ JSONObject wifiObject = new JSONObject ();
287+ if (!result .SSID .equals ("" )){
288+ try {
289+ wifiObject .put ("SSID" , result .SSID );
290+ wifiObject .put ("BSSID" , result .BSSID );
291+ wifiObject .put ("capabilities" , result .capabilities );
292+ wifiObject .put ("frequency" , result .frequency );
293+ wifiObject .put ("level" , result .level );
294+ wifiObject .put ("timestamp" , result .timestamp );
295+ } catch (JSONException e ) {
296+ this .errorCallback .invoke (e .getMessage ());
297+ return ;
298+ }
299+ wifiArray .put (wifiObject );
300+ }
301+ }
302+ this .successCallback .invoke (wifiArray .toString ());
303+ return ;
304+ } catch (IllegalViewOperationException e ) {
305+ this .errorCallback .invoke (e .getMessage ());
306+ return ;
307+ }
308+ }
309+ }
252310}
0 commit comments