c# - noticias - windows 10 mobile enterprise
Cómo obtener información de conexión y operador en Windows Phone 8.1 Runtime (3)
Actualmente estoy transfiriendo una de mis bibliotecas a Windows Phone 8.1 Runtime y entré a una API faltante que puede usar en las aplicaciones Windows Phone 8.0 y Windows Phone Silverlight 8.1.
Lo que necesito es DeviceNetworkInformation para saber qué tipo de NetworkInterfaceType es el dispositivo conectado a internet.
Código de muestra en Windows Phone 8.0.
public void GetDeviceConnectionInfo()
{
DeviceNetworkInformation.ResolveHostNameAsync(new DnsEndPoint("microsoft.com", 80),
nrr =>
{
NetworkInterfaceInfo info = nrr.NetworkInterface;
if (info != null)
{
switch (info.InterfaceType)
{
case NetworkInterfaceType.Ethernet:
// Do something
break;
case NetworkInterfaceType.MobileBroadbandCdma:
case NetworkInterfaceType.MobileBroadbandGsm:
switch (info.InterfaceSubtype)
{
case NetworkInterfaceSubType.Cellular_3G:
case NetworkInterfaceSubType.Cellular_EVDO:
case NetworkInterfaceSubType.Cellular_EVDV:
case NetworkInterfaceSubType.Cellular_HSPA:
// Do something
break;
}
// Do something
break;
case NetworkInterfaceType.Wireless80211:
// Do something
break;
}
}
}, null);
}
Y puede acceder al nombre del operador con DeviceNetworkInformation.CellularMobileOperator
.
No es exactamente lo mismo, pero podemos hacer más o menos lo mismo en Windows 8.1 para detectar el tipo de red que pudimos en versiones anteriores, excepto que el espacio de nombres y las clases son diferentes. Un buen artículo que cubre la mayoría de los escenarios posibles se puede encontrar aquí.
Efectivamente, en lugar de acceder a las características específicas de la conexión de red, puede ajustar su comportamiento según el NetworkCostType . Básicamente, si la conexión del usuario es de poca o ninguna medición, haga lo que quiera, pero si están en un plan de datos o en un lugar donde realizar una llamada a Internet implicará una tarifa para el usuario, debe solicitarles o manejarlo de manera diferente. Tal vez esperando hasta que esté disponible Wifi o Ethernet.
Si está interesado más en la información técnica sobre la red, lo mejor que pude encontrar son las propiedades de la clase ConnectionProfile.NetworkAdapter
. Puede obtener una instancia de clase ConnectionProfile
como esta (tomada de este artículo de Microsoft ):
//Get the Internet connection profile
string connectionProfileInfo = string.Empty;
try {
ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();
if (InternetConnectionProfile == null) {
NotifyUser("Not connected to Internet/n");
}
else {
connectionProfileInfo = GetConnectionProfile(InternetConnectionProfile);
NotifyUser("Internet connection profile = " +connectionProfileInfo);
}
}
catch (Exception ex) {
NotifyUser("Unexpected exception occurred: " + ex.ToString());
}
En la clase NetworkAdapter
tiene propiedades como IanaInterfaceType
, InboundMaxBitsPerSecond
y OutboundMaxBitsPerSecond
que le dan una idea bastante aproximada de la velocidad de su red. Por ejemplo, IanaInterfaceType para IEEE 802.11 Wifi es 71 ... Puede ver más detalles aquí: NetworkAdapter e IanaInterfaceType .
Editar: Aquí está la lista completa de tipos de interfaz Iana
EDITAR: la siguiente sugerencia funciona con Windows Phone 8.1 Apps.
No recomendaría el uso de IanaInterfaceType
, InboundMaxBitsPerSecond
o OutboundMaxBitsPerSecond
para determinar el tipo de conexión, ya que son muy inexactos.
El siguiente método obtiene el tipo de conexión como se ve en la barra de estado del WP. Tenga en cuenta que el modo de conexión no necesariamente da una indicación de la velocidad de carga / descarga.
using Windows.Networking.Connectivity;
/// <summary>
/// Detect the current connection type
/// </summary>
/// <returns>
/// 2 for 2G, 3 for 3G, 4 for 4G
/// 100 for WiFi
/// 0 for unknown or not connected</returns>
private static byte GetConnectionGeneration()
{
ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
if (profile.IsWwanConnectionProfile)
{
WwanDataClass connectionClass = profile.WwanConnectionProfileDetails.GetCurrentDataClass();
switch (connectionClass)
{
//2G-equivalent
case WwanDataClass.Edge:
case WwanDataClass.Gprs:
return 2;
//3G-equivalent
case WwanDataClass.Cdma1xEvdo:
case WwanDataClass.Cdma1xEvdoRevA:
case WwanDataClass.Cdma1xEvdoRevB:
case WwanDataClass.Cdma1xEvdv:
case WwanDataClass.Cdma1xRtt:
case WwanDataClass.Cdma3xRtt:
case WwanDataClass.CdmaUmb:
case WwanDataClass.Umts:
case WwanDataClass.Hsdpa:
case WwanDataClass.Hsupa:
return 3;
//4G-equivalent
case WwanDataClass.LteAdvanced:
return 4;
//not connected
case WwanDataClass.None:
return 0;
//unknown
case WwanDataClass.Custom:
default:
return 0;
}
}
else if (profile.IsWlanConnectionProfile)
{
return 100;
}
return 0;
}
Lo siento, no sé sobre el nombre del operador, pero el nombre del punto de acceso (APN) también puede ser útil, ya que el punto de acceso está conectado al operador:
ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile();
string apn = profile.WwanConnectionProfileDetails.AccessPointName;