Tem 07

Daha önce Android’de Bluetooth özelliğini nasıl açıp kapatacağımızı, nasıl görünür yapacağımızı göstermiştik. Bu konu ile ilgili bilgileri aşağıdaki linkten bulabilirsiniz.

http://huseyinbodur.net/?p=166

Şimdi ise Bluetooth aç, kapa görünür yap özelliklerinin yanısıra tarama işlemi nasıl yapılıyor. Bunları inceleyelim.
Öncelikle yeni bir sayfa oluşturalım.Daha sonra sayfamıza üç adet buton ekleyelim. Butonlardan birine “Bluetooth’u Aç”, birine “Görünür Yap”, diğerine ise “Bluetooh’u Kapat” isimlerini verelim ve butonların click metodlarını oluşturalım.

Her zamanki tanımlamalarımızı yapalım.

Button gorunurYap;
TextView durum;
ListView listele;
Switch SwitchAcKapa;
ArrayAdapter btArrayAdapter;

Ardından onCreate() metoduna girelim.

gorunurYap =(Button)findViewById(R.id.button2);
SwitchAcKapa=(Switch)findViewById(R.id.switch1);	
durum=(TextView)findViewById(R.id.textView1);
listele=(ListView)findViewById(R.id.listView1);
btArrayAdapter = new ArrayAdapter(MainActivity.this,
android.R.layout.simple_list_item_1);
listele.setAdapter(btArrayAdapter);

tanımlamalarını yapalım.

final BluetoothAdapter BluetoothAdaptoru = 
BluetoothAdapter.getDefaultAdapter();

komutuyla bir Bluetooth Adaptörü oluşturalım.Bu sayede Bluetooth’a erişebileceğiz.

Bluetooth’u açmak ve kapatmak için aşağıdaki kodu yazalım.

 

SwitchAcKapa.setOnCheckedChangeListener(new OnCheckedChangeListener() 
              {
		//Switch butonunun aç kapa işlemlerinde sırasıyla bluetooth'u açıp kapatalım.
		@Override
		public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
                      {
			if(isChecked==true) 
				BluetoothAc();  

			else if(isChecked==false) 
				BluetoothKapat();

		      }       

	      });

BluetoothAc() ve BluetoothKapat() metodlarını yazalım.


public void BluetoothKapat() 
	              { 

                        //bluetooth u kapatma metodu.
		        if(BluetoothAdaptoru.isEnabled())
		            {
		              BluetoothAdaptoru.disable();
		              durum.setText("Bluetooth Kapatıldı.");
		              btArrayAdapter.clear();
		              btArrayAdapter.notifyDataSetChanged();
		            }

		        else 
			    durum.setText("Olum Zaten Kapalı.");
	              }

public void BluetoothAc() 
	             {
		        //bluetooth u açma metodu
		         if(BluetoothAdaptoru == null) 	
			       durum.setText("Bluetooth Aygıtı Bulunamadı.");
		        else 
		          {
			     if(!BluetoothAdaptoru.isEnabled()) 
			          {
Intent bluetoothBaslat = new Intent(BluetoothAdaptoru.ACTION_REQUEST_ENABLE);
				    startActivityForResult(bluetoothBaslat, 1);
				    durum.setText("Bluetooth Açıldı.");
			          }
			     else 
				    durum.setText("Bluetooth Zaten Açık.");
		           }
	              }

Eğer BluetoothAdaptoru null değeri dönüyorsa demek ki telefonun bluetooth özelliği yoktur. Yok eğer telefonun bluetooth özeliiği varsa yeni bir bluetoothBaslat Intent’i oluşturalım ve bu Intent’i startActivityForResult metodu ile çalıştıralım.

Görüldüğü gibi Intent içerisinde BluetoothAdaptoru.ACTION_REQUEST_ENABLE özelliğini başlatarak bluetooth’u aktif ettik.

Şimdi gorunurYap butonunun Click metodunu yazalım.


gorunurYap.setOnClickListener(new View.OnClickListener() 
               {
//bluetooh 'u görünür yapmayı sağlayan işlemler.

	            @Override
		    public void onClick(View v) {

		        if(BluetoothAdaptoru.isEnabled())
			   { 
Intent gorunurYap = new Intent(BluetoothAdaptoru.ACTION_REQUEST_DISCOVERABLE);
gorunurYap.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
				startActivity(gorunurYap);		    
				btArrayAdapter.clear();
				durum.setText("Tarama İşlemi Başlatıldı.");

				if (BluetoothAdaptoru.isDiscovering()) 
                                       {
					 BluetoothAdaptoru.cancelDiscovery();
				       }

				else
					BluetoothAdaptoru.startDiscovery();

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
					registerReceiver(mReceiver, filter); 	
				}

				else 
				       durum.setText("Önce Bluetooth'u Aç.");	

		      }
			});

Eğer dikkat ettiyseniz gorunurYap metodunun altında mReceiver isimli bir yapıyı aktif ettik. Aslında bu bizim BroadcastReceiver türünde fonksiyonumuz. Bu fonksiyon tarama işlemi yapıp sonuçlarını sayfadaki listeye eklememizi sağlıyor.

Şimdi o metodun kod yapısını da ekleyelim.


// Tarama işlemi için bir metod oluşturalım.
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

	        public void onReceive(Context context, Intent intent) 
                {
	            durum.setText("...");
	    	    String action = intent.getAction();
// Eğer tarama sırasında aygıt bulursa if döngüsüne girer.

	          if (BluetoothDevice.ACTION_FOUND.equals(action)) 
                    {
// Bulduğu aygıtı listeye ekler.
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
btArrayAdapter.add(device.getName() + "n" + device.getAddress());	

// Tarama işlemi sonucu bulanan cihazların  isimleri ve mac adresleri listeye eklenir.
	             btArrayAdapter.notifyDataSetChanged();
	            }

	          else 
	        	durum.setText("Girmedi.");
	        }

	        };

Programdan çıkmak istenildiğinde yada geri butonuna basıldığında mesaj gösterilmesi ve mesaj sonucunda programdan çıkılmak isteniyorsa Bluetooth’un kapatılması işlemlerinin nasıl kodlandığını inceleyelim.

       
@Override
public void onBackPressed() 
             {
		super.onBackPressed();
		//geri butonuna basıldığında bluetooth kapatılsın.

		if(BluetoothAdaptoru.isEnabled()) 
		   {
		     BluetoothAdaptoru.cancelDiscovery();
		     BluetoothAdaptoru.disable();
		     unregisterReceiver(mReceiver);
	           }
	     }

@Override
protected void onDestroy() 
            {
	       //programdan çıkıldığında bluetooth kapatılsın.
		 super.onDestroy();
	
	       if(BluetoothAdaptoru.isEnabled()) 
		     {
	               BluetoothAdaptoru.cancelDiscovery();
	               BluetoothAdaptoru.disable(); 
	               unregisterReceiver(mReceiver);
		     }
	          }
          
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
                  {
//Eğer programdan çıkılmak isterse çıkmadan önce kullanıcıya uyarı mesajı vermeyi sağlayan metod.

if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)
        {
          try
              {
AlertDialog.Builder alertDialogBuilder=new AlertDialog.Builder(this); 
//Mesaj Penceresini Yaratalım.
alertDialogBuilder.setTitle("Bluetooth Açıksa Kapatılacak?").setCancelable(false).setPositiveButton("Evet", new OnClickListener() {

public void onClick(DialogInterface dialog, int id) { 
//Eğer evet butonuna basılırsa

		if(BluetoothAdaptoru.isEnabled()) 
			{	
			  BluetoothAdaptoru.cancelDiscovery();
			  BluetoothAdaptoru.disable();
			  unregisterReceiver(mReceiver);
			}
			  dialog.dismiss();
android.os.Process.killProcess(android.os.Process.myPid());
 //Uygulamamızı sonlandırıyoruz.
					                            }
}).setNegativeButton("Hayır", new OnClickListener() { 
		       //Eğer hayır butonuna basılırsa

@Override
public void onClick(DialogInterface dialog, int which) 
                       {
Toast.makeText(getApplicationContext(), "Bluetooth'u Kapat Fazla Yakmasın..", Toast.LENGTH_SHORT).show();                 
		       }
			});

			alertDialogBuilder.create().show();
//son olarak alertDialogBuilder'ı oluşturup ekranda görüntületiyoruz.

			return super.onKeyDown(keyCode, event);
					        }
			catch(IllegalStateException e){  
//yapımızı try-catch blogu içerisine aldık hata ihtimaline karşı.
			e.printStackTrace();
					        }
					    }
		           return true;
	              }

Son olarak Bluetooth’a erişebilmemiz için AndroidManifest dosyası içerisinde Bluetooth izni vermemiz gerekir.

Bunun için AndroidManifest dosyası içerisine girelim.

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

İzinlerini

<application> </application>

tag’ının üzerine ekleyelim.
Kodumuzu emülatör üzerinde denediğimizde büyük ihtimalle çalışamayacaktır. Fakat projemizi export eder ve apk dosyasını telefonumuza kurarsak projemizin çalıştığını göreceksiniz.

6 Yorum “Bluetooth ile Tarama İşlemi”

  1. avatar Burak Can diyor ki:

    Hüseyin bey anlatımınızı çok faydalı buldum, işime de yaradı. Lakin listview’deki seçtiğim aygıta bağlanmayı bir türlü yapamadım. Sizden ricam bu konuya da değinirseniz çok makbule geçer. Başarılarınızın devamını dilerim. Saygılar… :)

  2. avatar Fatih diyor ki:

    Hüseyin bey anlatımınız çok güzel.. özellikle bluetooth u açma kapamı ile ilgili dersiniz çok işime yaradı. activity_main.xml kısmında switch yok. Onu nereden ekleyebilirim? değiştiyse yenisi nedir?

    • avatar Hüseyin Bodur diyor ki:

      Evet o kısmı atlamışım.

      Form Widgets kontrolü altında, en alttaki element olan Switch i ekleyebilirsin.

  3. avatar filiz diyor ki:

    Hüseyin bey anlatımınız çok faydalı oldu. Benim projemde bluetooth cihazdan arduino ya bir bitlik(daha fazlada olabilir) veri alışverişi yapılması gerekiyor bunun için ne yapmam gerekir?

    • avatar Hüseyin Bodur diyor ki:

      Bluetooth dan hc-05 veya hc-06 tarzı bir bluetooth modülü ile cep telefonu eşleştikten sonra Google’ın Android developer sayfasındaki örnek kodlara bakarak veri gönderen kısmı almak yeterli oluyor.
      Arduino tarafında telefondan basılan veriyi seri portla alır gibi almak gerekiyor, ekstra bir işleme gerek yok.

      Bu konu hakkında oldukça bilgili arkadaşım Güray Yıldırım’a soru sorabilirsiniz.
      Web sayfası : http://www.gurayyildirim.com.tr/

Yorum Yaz