Yazdır

En Hızlı Şekilde Windows Phone Uygulamanızda İnternet Bağlantısını Kontrol Etme

Fatih Bekdemir tarafından yazıldı.. Yayınlanma Windows Phone

Selam Herkese,

Windows Phone 7 & 8 versiyonu fark etmeden, geliştirdiğiniz bir uygulama interneti kullanıyorsa, yani internetten veri indirip gönderiyor ve bunu içerisinde işliyorsa, telefonunuzun internete bağlı olup olmadığını kontrol etmesi gerekir.

 

Telefonunuz wifi’ye bağlı olabilir veya mobil şebekenize. Ancak bu her zaman geçerli bir ip adresine sahip olup internete bağlı olduğu anlamına gelmez. Uygulamanız açılmadan önce bunu bir şekilde kontrol etmesi gerekir. Aksi takdirde örneğin web servisle çalışan uygulamalarda veri gelmeyecek, uygulamanız çalışmayacaktır ve bu sizin uygulamanızın itibarını düşürecektir.

Bu yazımda önce hali hazırda msdn’de bulabileceğiniz kontrol sınıfı ve metodlarını gösterecek, daha sonra bu sınıfları kullanmadan da kısa bir yoldan nasıl internete bağlanıp bağlanmadığımızı kontrol ettiğimizi göstereceğim.

DeviceNetworkInformation sınıfı, içerisinde CellularMobileOperator, IsCellularDataEnabled, IsCellularDataRoamingEnabled, IsNetworkAvailable, IsWifiEnabled özelliklerini içerisinde barındırıyor. Kullanımı, Mobil Network için bir buton yardımıyla internete bağlı olup olmadığını test edelim.

1. Yol

public static bool IsCellularDataEnabled { get; } Örnek olarak CellularData için syntax’ını kullanarak

using Microsoft.Phone.Net.NetworkInformation; ‘ ile birlikte

private void button1_Click(object sender, RoutedEventArgs e)

{

    System.Text.StringBuilder sb = new System.Text.StringBuilder();

    sb.Append("Network available:  ");

    sb.AppendLine(DeviceNetworkInformation.IsNetworkAvailable.ToString());

    sb.Append("Cellular enabled:  ");

    sb.AppendLine(DeviceNetworkInformation.IsCellularDataEnabled.ToString());

    sb.Append("Roaming enabled:  ");

    sb.AppendLine(DeviceNetworkInformation.IsCellularDataRoamingEnabled.ToString());

    sb.Append("Wi-Fi enabled:  ");

    sb.AppendLine(DeviceNetworkInformation.IsWiFiEnabled.ToString());

    MessageBox.Show(sb.ToString());

}

Kod bu şekilde çalışmaktadır. Kendi uygulamanızda IsCellularDataEnabled özelliğini nereye isterseniz ekleyebilirsiniz.

2. Yol

Şimdi, daha hızlı ve benim sevdiğim bir yöntem olarak başka bir şey deneyelim. Uygulamamızın MainPage.xaml.cs dosyası içerisinde

        public MainPage()

        {

           InitializeComponent();

        }

Kısmını görmüşsünüzdür. Bu kısıma aşağıdaki kodları ekleyelim ve inceleyelim.

public MainPage()

        {

            InitializeComponent();

            var manualResetEvent = new ManualResetEvent(false);

            bool internetConnectionAvailable = true;

            DeviceNetworkInformation.ResolveHostNameAsync(new DnsEndPoint("microsoft.com", 80),

            networkInfo =>

            {

               if (networkInfo.NetworkInterface == null)
                {

                   internetConnectionAvailable = false;

                }

               manualResetEvent.Set();

           }, null);

            manualResetEvent.WaitOne(TimeSpan.FromMilliseconds(50));

            if(!internetConnectionAvailable)

            {

               System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>

               {MessageBox.Show("Bu uygulama internet bağlantısı gerektirir.", "Uyarı", MessageBoxButton.OK);         
throw new Exception("ExitApplicationException");              
               });

            }

        }

Yeni MainPage’imiz bu şekilde olacaktır. Burada 80 nolu TCP UDP portu üzerinden Microsoft.com’a bağlanmaya çalışıyor. Eğer karşı taraftan geri dönüş alırsa bu işlemi tamamlayıp uygulamanızın açılmasını sağlıyor. Gözünüzde büyümesin, bu işlem çok hızlı bir şekilde oluyor emin olun. Ayrıc ufak bir yanıt gelme süresi de koyuyor. Yanıt gelmezse "Bu uygulama internet bağlantısı gerektirir" hatası verip sizi uygulamadan atıyor.

Kodu ekledikten sonra resimde gördüğünüz gibi altı çizili iki kod görüyoruz. Bunlar dan biri uygulamadan atılmamızı sağlayan özellik, diğeri ise internet bağlantımızı control etmek için gerekli olan sınıf. Bunun için şu using’leri ekliyoruz.

using System.Threading;

using Microsoft.Phone.Net.NetworkInformation;

Evet hepsi bu. Şimdi denemeye geldi. Ama nasıl deniycez ? Emülatör’de çalıştırdığınız anda, emülatör’ü uçak moduna da alsanız tüm wifi cellular bağlantıları da kapatsanız başarılı olamazsınız arkadaşlar. Çünkü emülatör iç ağdan ( kendi bilgisayarımızdan ) internete bağlıdır. O yüzden uygulamanızda hep internete bağlanıcaktır ve yazdığımız kod hata vermiyecektir.

Denemenin en güzel yolu, elinizde bir Lumia’nız varsa ve kendileri developer unlock(*) ise, bağlayın telefonunuzu bilgisayarınıza, kodu telefonunuza deploy edin. Daha sonra çekin kabloyu ve telefonu uçak moduna alın. İşte şimdi başarılı bir şekilde deneyebilirsiniz. =)

 

·         Telefonunuzu Developer Unlock yapmak için, Windows Phone 8 SDK’yı öncelikle bilgisayarınıza kurmanız gerekiyor. Daha sonra, mouse’u yana çektiğimizde gelen arama ekranına Windows Phone Developer Registration yazın ve hemen altta gelen ekrana tıklayın.

Bundan sonrası oldukça kolay bir kayıt işlemidir. =)

Teşekkürler…