Как проверить доступность интернет-соединения в приложении Windows Phone 8
Я разрабатываю приложение для Windows Phone 8.
В этом приложении мне нужно подключиться к серверу, чтобы получить данные.
Итак, перед подключением к серверу я хочу проверить, доступно ли подключение к Интернету или нет. Если интернет-соединение доступно, тогда я получу данные с сервера. В противном случае я покажу сообщение об ошибке.
Расскажите, как это сделать в Windows Phone 8.
Ответы
Ответ 1
NetworkInterface.GetIsNetworkAvailable()
возвращает статус сетевых адаптеров.
В зависимости от состояния вы можете спросить, установлено ли подключение, используя:
ConnectionProfile
-Класс Windows Phone 8.1, который использует enum NetworkConnectivityLevel
:
- None
- Локальный доступ
- Доступ в Интернет
Этот код должен сделать трюк.
bool isConnected = NetworkInterface.GetIsNetworkAvailable();
if (isConnected)
{
ConnectionProfile InternetConnectionProfile = NetworkInformation.GetInternetConnectionProfile();
NetworkConnectivityLevel connection = InternetConnectionProfile.GetNetworkConnectivityLevel();
if (connection == NetworkConnectivityLevel.None || connection == NetworkConnectivityLevel.LocalAccess)
{
isConnected = false;
}
}
if(!isConnected)
await new MessageDialog("No internet connection is avaliable. The full functionality of the app isn't avaliable.").ShowAsync();
Ответ 2
public static bool checkNetworkConnection()
{
var ni = NetworkInterface.NetworkInterfaceType;
bool IsConnected = false;
if ((ni == NetworkInterfaceType.Wireless80211)|| (ni == NetworkInterfaceType.MobileBroadbandCdma)|| (ni == NetworkInterfaceType.MobileBroadbandGsm))
IsConnected= true;
else if (ni == NetworkInterfaceType.None)
IsConnected= false;
return IsConnected;
}
Вызовите эту функцию и проверьте, доступно ли подключение к Интернету.
Ответ 3
Вы можете использовать метод NetworkInterface.GetIsNetworkAvailable()
. Он возвращает true, если сетевое соединение доступно и false, если нет. И не забудьте добавить using Microsoft.Phone.Net.NetworkInformation
или using System.Net.NetworkInformation
, если вы находитесь в PCL.
Ответ 4
Так как этот вопрос появляется в первом результате поиска google для проверки доступности Интернета, я бы поставил ответ на Windows Phone 8.1 XAML.
Он имеет несколько разных API по сравнению с 8.
//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());
}
Подробнее читайте в MSDN Как получить сетевое подключение...
Ответ 5
Вы можете использовать NetworkInformation.GetInternetConnectionProfile
для получения профиля, который в настоящее время используется, из этого вы можете определить уровень подключения. Подробнее здесь GetInternetConnectionProfile msdn
Пример того, как вы можете использовать.
private void YourMethod()
{
if (InternetConnection) {
// Your code connecting to server
}
}
public static bool InternetConnection()
{
return NetworkInformation.GetInternetConnectionProfile().GetNetworkConnectivityLevel() >= NetworkConnectivityLevel.InternetAccess;
}
Ответ 6
Вот как я это сделал...
class Internet
{
static DispatcherTimer dispatcherTimer;
public static bool Available = false;
public static async void StartChecking()
{
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(IsInternetAvailable1);
dispatcherTimer.Interval = new TimeSpan(0, 0, 10); //10 Secconds or Faster
await IsInternetAvailable(null, null);
dispatcherTimer.Start();
}
private static async void IsInternetAvailable1(object sender, EventArgs e)
{
await IsInternetAvailable(sender, e);
}
private static async Task IsInternetAvailable(object sender, EventArgs ev)
{
string url = "https://www.google.com/";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "text/plain; charset=utf-8";
httpWebRequest.Method = "POST";
using (var stream = await Task.Factory.FromAsync<Stream>(httpWebRequest.BeginGetRequestStream,
httpWebRequest.EndGetRequestStream, null))
{
string json = "{ \"302000001\" }"; //Post Anything
byte[] jsonAsBytes = Encoding.UTF8.GetBytes(json);
await stream.WriteAsync(jsonAsBytes, 0, jsonAsBytes.Length);
WebClient hc = new WebClient();
hc.DownloadStringCompleted += (s, e) =>
{
try
{
if (!string.IsNullOrEmpty(e.Result))
{
Available = true;
}
else
{
Available = false;
}
}
catch (Exception ex)
{
if (ex is TargetInvocationException)
{
Available = false;
}
}
};
hc.DownloadStringAsync(new Uri(url));
}
}
}
Так как Windows 8 не имеет возможности проверить подключение к Интернету, вам нужно сделать это, отправив запрос POST HTTP. Вы можете сделать это, отправив его на любой веб-сайт, который вы хотите. Я выбрал google.com. Затем проверьте каждые 10 секунд или менее, чтобы обновить состояние соединения.
Ответ 7
Может возникнуть некоторая задержка в ответе веб-запроса. Поэтому для некоторых приложений этот метод может быть недостаточно быстрым. Это проверит подключение к Интернету на любом устройстве. Лучше всего проверить, действительно ли порт 80, порт по умолчанию для HTTP-трафика, всегда онлайн-сайта.
public static bool TcpSocketTest()
{
try
{
System.Net.Sockets.TcpClient client =
new System.Net.Sockets.TcpClient("www.google.com", 80);
client.Close();
return true;
}
catch (System.Exception ex)
{
return false;
}
}