2012-09-15 24 views
5

Bu kod her zaman doğru döner. Bu bir Giriş düğmesine basıldığında çağrılır. İlk önce bağlı wifi ile çalıştı (emülatörde). Doğru ve sonra wifi bağlantısı kesildi ve sonra denedim. hala doğru döner.Android networkinfo, İnternet mevcut olmasa bile her zaman doğru döner

public static boolean isNetworkAvailable(Context context) { 

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
      // if no network is available networkInfo will be null 
      // otherwise check if we are connected 
      if (networkInfo != null && networkInfo.isConnected()) { 
       State network = networkInfo.getState(); 
       Log.d("here", "true"); 
       return (network == NetworkInfo.State.CONNECTED || network == NetworkInfo.State.CONNECTING); 

      } 
      Log.d("here1", "false"); 
      return false; 
} 

cevap

14

Bu kod, uygulamalardan birinde çok benzer bir şey kullandığım için cihazda çalışır. Bağlandığınız ağın İnternet bağlantısına sahip olup olmadığını değil, bu kodun bir ağa bağlı bağlı olup olmadığını söyleyeceğini unutmayın. Emülatörü kullanıyorsanız, her zaman 3G simülasyonu ile bağlanır, bu nedenle bilgisayarınızın wifi bağlantısını kesmek bunu değiştirmez. Emülatörü, sizi aradığınız "yanlış" vermesi gereken uçak modunda bırakabilirsiniz.

Uygulamalarımda yaptığım şey, ağ değişim yayınlarını alan bir hizmet oluşturmaktır. Bir ağ bağlandıktan sonra, internet üzerinden bilinen (küçük) bir dosyayı indirmeye çalışır. Ancak bu başarılı olursa, tüm aktivitelere internet üzerinden erişilebilecek bir niyet yayınlanacak ve ardından bu duruma göre durumu değiştirebilecek.

+0

İnternet'in mevcut olup olmadığını anlamanın doğrudan bir yolu yok mu? –

+0

Yok. Sorun şu ki, "ağ", burada bir tanım meselesidir. Bir intranete tam erişim ile kablosuz ağa bağlanabilir ve bu sizin uygulamanız için uygun olabilir. Ayrıca, çalışan verimliliğini korumak için www.facebook.com adresini engelleyen çok kısıtlayıcı bir güvenlik duvarının arkasına da oturabilirsiniz. İlgilendiğiniz servise veya ortak bir url'ye açık bir kontrol yapmanız gerekir. ConnectivityService roket bilimi değildir ve biraz zamanım olduğunda (muhtemelen Pazartesi gününden önce olmasa bile) temizlerim ve buraya yüklerim. – 323go

+1

büyük cevap eğer bana çılgınlık +1 sürdü çünkü uygun olduğunda cevabını alıntı eğer – shareef

İlgili konular