Created
October 28, 2013 15:55
-
-
Save wayne-o/7199431 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static class ForConnectivityManager | |
{ | |
private const string DebugTag = "YOUR_APP_NAME"; | |
static IntPtr _connectivityManagerSetMobileDataEnabled; | |
public static bool IsMobileDataEnabled(this ConnectivityManager manager) | |
{ | |
var netInfo = manager.GetNetworkInfo(ConnectivityType.Mobile); | |
return manager.NetworkStatus() != NetworkState.NoNetwork; | |
} | |
public static bool Is3GEnabled(this ConnectivityManager manager) | |
{ | |
var networks = manager.GetAllNetworkInfo(); | |
return (from n in networks where n.TypeName == "mobile_internet" && n.IsConnected select n).Any(); | |
} | |
public static NetworkState NetworkStatus(this ConnectivityManager manager) | |
{ | |
var result = NetworkState.NoNetwork; | |
var networks = manager.GetAllNetworkInfo(); | |
foreach (var network in networks) | |
{ | |
if (network.Type == ConnectivityType.Wifi && network.IsConnected) | |
{ | |
result = NetworkState.WiFi; | |
break; | |
} | |
if (network.TypeName == "mobile_internet" && network.IsConnected) | |
{ | |
result = NetworkState.Mobile; | |
break; | |
} | |
} | |
return result; | |
} | |
/// <summary> | |
/// default timeout = 15 seconds | |
/// </summary> | |
public static void SetAndWaitForMobileDataEnabled(this ConnectivityManager manager, TelephonyManager telephonyManager, bool value) | |
{ | |
var notConnected = !manager.IsMobileDataEnabled(); | |
Log.Debug(DebugTag, "Connected to 3G: {0}".With(!notConnected)); | |
if (notConnected) | |
{ | |
if (_connectivityManagerSetMobileDataEnabled == IntPtr.Zero) | |
{ | |
_connectivityManagerSetMobileDataEnabled = JNIEnv.GetMethodID( | |
manager.Class.Handle, | |
"setMobileDataEnabled", | |
"(Z)V"); | |
} | |
Log.Debug(DebugTag, "Invoking JNI method: setMobileDataEnabled"); | |
JNIEnv.CallVoidMethod( | |
manager.Handle, | |
_connectivityManagerSetMobileDataEnabled, | |
new JValue(value)); | |
var waitCount = 0; | |
while (waitCount != 30) | |
{ | |
Log.Debug(DebugTag, "Waiting 500 milliseconds. WaitCount: {0}".With(waitCount)); | |
Thread.Sleep(500); | |
bool isConnected = manager.GetNetworkInfo(ConnectivityType.Mobile).IsConnected; | |
bool istmData = telephonyManager.DataState == DataConnectionStatus.Connected; | |
Log.Debug(DebugTag, "Checking 3g connected: {0}".With(isConnected)); | |
if ((isConnected && istmData) == value) | |
{ | |
break; | |
} | |
waitCount++; | |
} | |
Log.Debug(DebugTag, "3g connection toggle complete."); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment