diff --git a/src/android/wifiwizard2/WifiWizard2.java b/src/android/wifiwizard2/WifiWizard2.java index df8f2df..bdbecae 100644 --- a/src/android/wifiwizard2/WifiWizard2.java +++ b/src/android/wifiwizard2/WifiWizard2.java @@ -1681,6 +1681,12 @@ private void registerBindALL(int netID){ if( API_VERSION > 21 ){ Log.d(TAG, "registerBindALL: registering net changed receiver"); desired = new AP(netID,null,null); + + try { + // Unregister net changed receiver -- should only be registered in API versions > 21 + cordova.getActivity().getApplicationContext().unregisterReceiver(networkChangedReceiver); + } catch (Exception e) {} + cordova.getActivity().getApplicationContext().registerReceiver(networkChangedReceiver, NETWORK_STATE_CHANGED_FILTER); } else { Log.d(TAG, "registerBindALL: API older than 21, bindall ignored."); @@ -1695,11 +1701,15 @@ private void registerBindALL(int netID){ * being routed through Wifi. */ private void maybeResetBindALL(){ + maybeResetBindALL(false); + } + + private void maybeResetBindALL(boolean forceReset){ Log.d(TAG, "maybeResetBindALL"); // desired should have a value if receiver is registered - if( desired != null ){ + if( desired!=null || forceReset ){ if( API_VERSION > 21 ){ @@ -1710,13 +1720,6 @@ private void maybeResetBindALL(){ } - // Lollipop OS or newer - if ( API_VERSION >= 23 ) { - connectivityManager.bindProcessToNetwork(null); - } else if( API_VERSION >= 21 && API_VERSION < 23 ){ - connectivityManager.setProcessDefaultNetwork(null); - } - if ( API_VERSION > 21 && networkCallback != null) { try { @@ -1725,6 +1728,13 @@ private void maybeResetBindALL(){ } catch (Exception e) {} } + // Lollipop OS or newer + if ( API_VERSION >= 23 ) { + connectivityManager.bindProcessToNetwork(null); + } else if( API_VERSION >= 21 && API_VERSION < 23 ){ + connectivityManager.setProcessDefaultNetwork(null); + } + networkCallback = null; previous = null; desired = null; @@ -1742,7 +1752,7 @@ private void resetBindAll(CallbackContext callbackContext) { Log.d(TAG, "WifiWizard2: resetBindALL"); try { - maybeResetBindALL(); + maybeResetBindALL(true); callbackContext.success("Successfully reset BindALL"); } catch (Exception e) { Log.e(TAG, "InterruptedException error.", e); @@ -1804,6 +1814,11 @@ public void onAvailable(Network network) { } }; + try { + // Same behavior as releaseNetworkRequest + connectivityManager.unregisterNetworkCallback(networkCallback); // Added in API 21 + } catch (Exception e) {} + connectivityManager.requestNetwork(request, networkCallback); // Only lollipop (API 21 && 22) use setProcessDefaultNetwork, API < 21 already does this by default @@ -1824,6 +1839,11 @@ public void onAvailable(Network network) { } }; + try { + // Same behavior as releaseNetworkRequest + connectivityManager.unregisterNetworkCallback(networkCallback); // Added in API 21 + } catch (Exception e) {} + connectivityManager.requestNetwork(request, networkCallback); } else {