Skip to content

Instantly share code, notes, and snippets.

@wayne-o
Created October 28, 2013 15:55
Show Gist options
  • Save wayne-o/7199431 to your computer and use it in GitHub Desktop.
Save wayne-o/7199431 to your computer and use it in GitHub Desktop.
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