Android Manuel ve Otomatik (BroadcastReceiver) İnternet Bağlantısı Kontrolü

Merhaba arkadaşlar,
mobilhanem.com sitemizden anlattığımız/yayınladığımız derslerimize Androidde İnternet Bağlantısı Kontrolü ile devam ediyoruz.Bugün uygulamalarımızın bir çoğu internet bağlantısı gerektirmektedir.Özellikle sunucu ile veri alış verişinde bulunurken internet kullanmamız şarttır.

Uygulamalarımızı yazarken sanki her zaman internet bağlantısı olduğunu düşünerek yazarız ve bundan dolayıdır ki internet bağlantısı gereken bir durumda cihaz internete bağlı değilse uygulamamız patlamakta yani crash olmaktadır. İşte bunu önlemek için bu dersimizde nasıl internet bağlantısı kontrolü yapacağımızı anlatacağım.

İnternet bağlantısı kontrolünü iki yolla yapabilmekteyiz.
1- Manuel Kontrol
2-Otomatik Kontrol

[wpdm_file id=23]

MANUEL KONRTOL

Manuel kontrol bizim istediğimiz zamanlarda yaptığımız kontroldür.Mesala butona bastığımızda sunucuyla bağlantı kuracağımızı farzedelim. İşte burda butona basılınca önce internet bağlımı kontrolü yapılır eğer bağlıysa sunucu bağlantısı gerçekleştirilir.Bağlı değilsede kullanıcıya uyarı verdirilir.Bunu nasıl yapacağımızı kod üzerindede anlatmaya çalıştım.

Anasayfa.java

package com.mobilhanem.otomatikinternetkontrol;

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class Anasayfa extends Activity {
	Button manuel;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.anasayfa);
		
		manuel = (Button)findViewById(R.id.button1);
		
		manuel.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if(internetKontrol()){ //internet kontrol methodu çağırılıyor
					Toast.makeText(getApplicationContext(), "İnternet Bağlı!", Toast.LENGTH_LONG).show();
				}else{
					Toast.makeText(getApplicationContext(), "İnternet Yok!", Toast.LENGTH_LONG).show();
				}
				
			}
		});
	}
	protected boolean internetKontrol() { //interneti kontrol eden method
		// TODO Auto-generated method stub
		ConnectivityManager cm =
		        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		    NetworkInfo netInfo = cm.getActiveNetworkInfo();
		    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
		        return true;
		    }
		    return false;
	}
}

Manifestte ise verilecek izinler:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Yukardaki kodda internetKontrol() methodu interneti bağlı olup olmadığını kontrol eden methoddur.Kendi projenizde kullanırken bu methodu static method yapıp istediğiniz yerden çağırarak kullanabilirsiniz.

OTOMATİK KONRTOL

Otomatik kontrol de ise sizin kontrol etmenize gerek kalmadan yazdığımız bir Broadcast Receiver sınıfı ile ağı dinliyor ve internet bağlantısı koptuğu zaman kullanıcıya haber veriyoruz. Açıklamaları kod üzerinde yapmaya çalıştım.

Anasayfa.java

package com.mobilhanem.otomatikinternetkontrol;

import android.net.ConnectivityManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.IntentFilter;
import android.util.Log;

 
public class Anasayfa extends Activity {
 
 private static final String LOG_TAG = "Otomatik internet Kontrol¸";
 private NetworkChangeReceiver receiver;//Network dinleyen receiver objemizin referans˝
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_anasayfa);
 
  //Receiverımızı register ediyoruz
  //Yani Çalıştırıyoruz
  IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  receiver = new NetworkChangeReceiver();
  registerReceiver(receiver, filter);
   
 }
 

 @Override
 protected void onDestroy() { //Activity Kapatıldığı zaman receiver durduralacak.Uygulama arka plana alındığı zamanda receiver çalışmaya devam eder
  Log.v(LOG_TAG, "onDestory");
  super.onDestroy();
   
  unregisterReceiver(receiver);//receiver durduruluyor
 
 }
 
 
}

NetworkChangeReceiver.java

package com.mobilhanem.otomatikinternetkontrol;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;

public class NetworkChangeReceiver extends BroadcastReceiver {
	 private static final String LOG_TAG = "Otomatik internet Kontrol¸";
	 static boolean isConnected = false;

	  @Override
	  public void onReceive(final Context context, final Intent intent) {
	 
	   isNetworkAvailable(context); //receiver çalıştığı zaman çağırılacak method
	 
	  }
	 
	 
	  private boolean isNetworkAvailable(Context context) {
	   ConnectivityManager connectivity = (ConnectivityManager) 
	     context.getSystemService(Context.CONNECTIVITY_SERVICE); //Sistem ağını dinliyor internet var mı yok mu
	   
	   if (connectivity != null) {
	    NetworkInfo[] info = connectivity.getAllNetworkInfo();
	    if (info != null) {
	     for (int i = 0; i < info.length; i++) {
	      if (info[i].getState() == NetworkInfo.State.CONNECTED) {
	       
	    	if(!isConnected){ //internet varsa
		        isConnected = true;
		        Log.v(LOG_TAG, "internete Bağlandınız!");
		        Toast.makeText(context, "internete Bağlandınız!", Toast.LENGTH_LONG).show();
	       }
	       return true;
	      }
	     }
	    }
	   }
	   isConnected = false;
       Toast.makeText(context, "İnternet Yok", Toast.LENGTH_LONG).show();
	   Log.v(LOG_TAG, "İnternet Yok!");
	   return false;
	  }
	 }

manifestte verilecek izinler:

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

BroadcastReceiver’mızı bir kere çalıştırmamız yeterlidir.Her activity de ayrı ayrı çalıştırmaya gerek yoktur. Burdada sunucuyla bağlantı yapmadan static değer olan isConnected değerini kontrol edip ondan sonra sunucu ile bağlantımızı gerçekleştirebiriz.

Evet arkadaşlar kaynak kodu indirip çalışan halini inceleyebilirsiniz.Bu dersimde anlatmak istediklerim bu kadar. Sizlerden ricamız facebook.com/mobilhanem sayfamızı beğenmenizdir.

Bir dahaki dersimizde görüşmek dileğiyle kendinize iyi bakın.

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

[wpdm_file id=23] 5

Taha Kırca

iOS & Android & Apple Watch Developer, Mobilhanem.com yazarı, Karadeniz Uşağu, Ordu Sevdalısı

17 Yorum

  • anlatımın için çok tşk ederim bir çok uygulamada işimize yarayacak bir konu olmuş bazıları ne işime yarıyacak diyor belki mesela int siz bir uygulama yaptınız ama reklam koydunuz int olmadığı için reklam görünmüyor ama reklamnın arka planı orda sırıtıyor bunu önlemenize olan verir int varsa reklamı göster internet yoksa gösterme gibi 🙂 herkese kolay gelsin iyi çalışmalar

  • Merhaba. Bir servis aktivitesinde, kişi ilgili uygulamayı kapatsa bile internet bağlantısı değişikliği hakkında bilgi sahibi olmak istiyorum bunu nasıl yapabilirim?

  • Hocam Merhabalar;

    Yukarıda Bahsettiğiniz Konuda webview ile hazırladığım uygulamayı her sayfada internet bağlantısını kontrol etme işlemini nasıl yapabiliriz. yani sadece uygulama ilk açıldığında deil tıklanan tüm sayfalarda sayfa açılırken kontrol edip internet yoksa internet bağlantınızı kontrol edin diye uyarı versin internet varsa bağlantı devam etsin.

  • Hocam bi sorum olucak
    Loading Screende kullandım bu projenizi ancak her girişte internete bağlı olmasam bile internete bağlısınız yazıyo

  • Webview ile internet kontrolünü sağladım fakat internet yokken beyaz bir sayfada webviewin içerisindeki link gösteriliyor. Bunun yerine internet yok yazan bir sayfaya yönlendirmesini istiyorum yada boş bir sayfa fark etmez webviewin içerisine yazdığım linkin görünmesini istemiyorum nasıl yapabilirm ?

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?