You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
4.4 KiB
C#
130 lines
4.4 KiB
C#
/*
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
using System;
|
|
using System.Diagnostics;
|
|
using System.Net;
|
|
using System.Net.NetworkInformation;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Ink;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Animation;
|
|
using System.Windows.Shapes;
|
|
using Microsoft.Phone.Net.NetworkInformation;
|
|
|
|
namespace WPCordovaClassLib.Cordova.Commands
|
|
{
|
|
|
|
// http://msdn.microsoft.com/en-us/library/microsoft.phone.net.networkinformation(v=VS.92).aspx
|
|
// http://msdn.microsoft.com/en-us/library/microsoft.phone.net.networkinformation.devicenetworkinformation(v=VS.92).aspx
|
|
|
|
public class NetworkStatus : BaseCommand
|
|
{
|
|
const string UNKNOWN = "unknown";
|
|
const string ETHERNET = "ethernet";
|
|
const string WIFI = "wifi";
|
|
const string CELL_2G = "2g";
|
|
const string CELL_3G = "3g";
|
|
const string CELL_4G = "4g";
|
|
const string NONE = "none";
|
|
const string CELL = "cellular";
|
|
|
|
private bool HasCallback = false;
|
|
|
|
public NetworkStatus()
|
|
{
|
|
DeviceNetworkInformation.NetworkAvailabilityChanged += new EventHandler<NetworkNotificationEventArgs>(ChangeDetected);
|
|
}
|
|
|
|
public override void OnResume(object sender, Microsoft.Phone.Shell.ActivatedEventArgs e)
|
|
{
|
|
this.getConnectionInfo("");
|
|
}
|
|
|
|
public void getConnectionInfo(string empty)
|
|
{
|
|
HasCallback = true;
|
|
updateConnectionType(checkConnectionType());
|
|
}
|
|
|
|
private string checkConnectionType()
|
|
{
|
|
if (DeviceNetworkInformation.IsNetworkAvailable)
|
|
{
|
|
if (DeviceNetworkInformation.IsWiFiEnabled)
|
|
{
|
|
return WIFI;
|
|
}
|
|
else
|
|
{
|
|
return DeviceNetworkInformation.IsCellularDataEnabled ? CELL : UNKNOWN;
|
|
}
|
|
}
|
|
return NONE;
|
|
}
|
|
|
|
private string checkConnectionType(NetworkInterfaceSubType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case NetworkInterfaceSubType.Cellular_1XRTT: //cell
|
|
case NetworkInterfaceSubType.Cellular_GPRS: //cell
|
|
return CELL;
|
|
case NetworkInterfaceSubType.Cellular_EDGE: //2
|
|
return CELL_2G;
|
|
case NetworkInterfaceSubType.Cellular_3G:
|
|
case NetworkInterfaceSubType.Cellular_EVDO: //3
|
|
case NetworkInterfaceSubType.Cellular_EVDV: //3
|
|
case NetworkInterfaceSubType.Cellular_HSPA: //3
|
|
return CELL_3G;
|
|
case NetworkInterfaceSubType.WiFi:
|
|
return WIFI;
|
|
case NetworkInterfaceSubType.Unknown:
|
|
case NetworkInterfaceSubType.Desktop_PassThru:
|
|
default:
|
|
return UNKNOWN;
|
|
}
|
|
}
|
|
|
|
void ChangeDetected(object sender, NetworkNotificationEventArgs e)
|
|
{
|
|
switch (e.NotificationType)
|
|
{
|
|
case NetworkNotificationType.InterfaceConnected:
|
|
updateConnectionType(checkConnectionType(e.NetworkInterface.InterfaceSubtype));
|
|
break;
|
|
case NetworkNotificationType.InterfaceDisconnected:
|
|
updateConnectionType(NONE);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void updateConnectionType(string type)
|
|
{
|
|
// This should also implicitly fire offline/online events as that is handled on the JS side
|
|
if (this.HasCallback)
|
|
{
|
|
PluginResult result = new PluginResult(PluginResult.Status.OK, type);
|
|
result.KeepCallback = true;
|
|
DispatchCommandResult(result);
|
|
}
|
|
}
|
|
}
|
|
}
|