diff --git a/android/src/main/java/com/devstepbcn/wifi/AndroidWifiModule.java b/android/src/main/java/com/devstepbcn/wifi/AndroidWifiModule.java index e5518ee..c7690d9 100644 --- a/android/src/main/java/com/devstepbcn/wifi/AndroidWifiModule.java +++ b/android/src/main/java/com/devstepbcn/wifi/AndroidWifiModule.java @@ -105,21 +105,16 @@ public void forceWifiUsage(boolean useWifi) { if (useWifi) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - canWriteFlag = true; - // Only need ACTION_MANAGE_WRITE_SETTINGS on 6.0.0, regular permissions suffice on later versions - } else if (Build.VERSION.RELEASE.toString().equals("6.0.1")) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N || Build.VERSION.RELEASE.toString().equals("6.0.1")) { + // In versions >= 6.0.1, we no longer need to request permission to write to settings. canWriteFlag = true; - // Don't need ACTION_MANAGE_WRITE_SETTINGS on 6.0.1, if we can positively identify it treat like 7+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - // On M 6.0.0 (N+ or higher and 6.0.1 hit above), we need ACTION_MANAGE_WRITE_SETTINGS to forceWifi. + // In version 6.0.0, we need to request permission to write to settings in order to forceWifi. canWriteFlag = Settings.System.canWrite(reactContext); if (!canWriteFlag) { Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS); intent.setData(Uri.parse("package:" + reactContext.getPackageName())); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - reactContext.startActivity(intent); } } @@ -136,17 +131,19 @@ public void forceWifiUsage(boolean useWifi) { manager.requestNetwork(builder.build(), new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - manager.bindProcessToNetwork(network); - } else { - //This method was deprecated in API level 23 - ConnectivityManager.setProcessDefaultNetwork(network); - } try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + manager.bindProcessToNetwork(network); + } else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + //This method was deprecated in API level 23 + ConnectivityManager.setProcessDefaultNetwork(network); + } + } + manager.unregisterNetworkCallback(this); } catch (Exception e) { e.printStackTrace(); } - manager.unregisterNetworkCallback(this); } }); }