how-to-manage-android-bluetooth-WidePlayer

Bluetooth teknolojisi oldukça komplekstir. Aslında bu, Bluetooth’un yapabildiği işler düşünüldüğünde çok da şaşırtıcı sayılmaz. Temel de RS 232 veri kablolarına, kablosuz alternatif üretmek için geliştirilmiş ve üç çekirdek protokolden oluşan bir seri haberleşmedir. Bu protokoller; Mantıksal link ve bağdaştırma protokolü (L2CAP – Logical Link Layer and Adaptation Protocol), Servis Keşif Protokolü (SDP – Service Discovery Protocol) ve Radyo Frekansı Haberleşme Protokolü (RFCOMM – Radio Frequency Communication) olarak bilinir.

Android Programlamada  bizim kullanacağımız Bluetooth ile ilgili dört temel sınıf var.

BluetoothAdapter: Uygulamanın üzerinde çalıştığı cihaz ile ilgili işlemler yapmak için bu sınıf kullanılır.

BluetoothDevice: Haberleşme yapılan karşı cihaz ile ilgili işlemler yapmak için ise bu sınıf kullanılır.

BluetoothSocket: Haberleşmede bağlantının kurulması ve veri transferi için bu sınıf kullanılır.

BluetoothServiceSocket: Haberleşme de kullanılan cihazın “server” gibi davranması ve diğer cihazları dileyip işlem yapması isteniyorsa bu sınıf kullanılıyor.

Aslında  eğer ingilizceniz varsa bu konu Android Studio’nun kendi web sayfasında örneklerle ve çok güzel bir şekilde anlatılmış. Buraya göz atabilirsiniz.

BluetoothAdapter sınıfını bir önceki yazımda kullanarak cihazın isim ve mac adresini sorgulayan bir örnek program vermiştim.  Bluetooth Adapter sınıfı cihazın Bluetooth özelliğini destekleyip desteklemediğini ve cihazda bluetooth kapalıysa bluetooth’u açmak için kullanılabilir. Mesela aşağıdaki kod parçası Bluetooth Kapalıysa Bluetooth’u açar.

if (!mBluetoothAdapter.isEnabled()) { // Bluetooth Kapalıysa
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); // Bluetooth'u aç
}

 

BluetoothAdapter sınıfı ile aynı zamanda haberleşme yapılacak cihazların bulunması da sağlanır.  Mesela aşağıdaki kod parçası Bluetooth üzerinde eşleşmiş cihazları bulmaya yarar;

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); // Eşleşmiş Cihazlar için bir Array Oluşturuluyor.

if (pairedDevices.size() > 0) {// Eğer eşleşmiş cihaz varsa
    
    for (BluetoothDevice device : pairedDevices) {// Eşleşmiş cihaz sayısı kadar bu loop dönecektir.
        
        mArrayAdapter.add(device.getName() + "\n" + device.getAddress());// Daha önceden belirlenmiş marrayadapter listesine bu cihazların mac adresi ve isimleri ekleniyor.
    }
}

Herhangi bir cihaza bağlanarak cihaza veri göndermek ve ya veri almak için BuetoothDevice ve BluetoothSocket sınıfları kullanılıyor.  Mesela aşağıdaki kod parçası belirli isimdeki bir cihaza bağlantı kurmak için kullanılır.

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); // Eşleşmiş Cihazlar için bir Array Oluşturuluyor.

BluetoothDevice Baglanilacak_Cihaz==null // Bağlantı kurulmak istenilen cihaz tanımlanıyor.

if (pairedDevices.size() > 0) {// Eğer eşleşmiş cihaz varsa
    
    for (BluetoothDevice device : pairedDevices) {// Eşleşmiş cihaz sayısı kadar bu loop dönecektir.
        
        if(device.getName()=="İstenilen Cihaz İsmi") // Eğer eşleşmiş cahzlar arasından istenilen cihaz ismini bulursa;
         {
              Baglanilacak_Cihaz=="İstenilen Cihaz İsmi"; // Bağlanılacak cihaz nesnesine istenilen cihaz ismini ata
              break;
         }
    }
}

Son olarak ise cihaza veri gönderme ve veri alma işlemi kaldı. Bunun için ise BluetoothSocket sınıfını kullanacağız. Burada iki cihaz arasında bir Socket oluşturulup bağlantının kurulabilmesi için bir UUID tanımlanması gerekiyor. UUID açılımı  Universally Unique Identifier olarak geçiyor. UUID 128 bit, string ID dir. Bu ID ne işimize yarıyor? Yazdığımız uygulamanın haberleşmesine verilen bir ID dir aslında. Yazdığınız uygulama üzerinden istenilen cihazla haberleşirken bu ID kullanılır ve bu ID haberleşmede sizin uygulamanızı tanımlayan bir ID olup sizin seçtiğiniz bir ID dir.  Uygulamanızın UUID sini belirlerken internette bulunan bir çok UUID generator’ü kullanabilirsiniz.  createRfcommSockettoServiceRecord() fonksiyonu uygulamamıza bu ID yi atamamıza yarıyor. Mesela Aşağıdaki kod parçası istenilen bir cihaz ile socket oluşturup veri transferi yapmaya yarar;

UUID uuid=UUID.fromString("20:13:04:24:20:51") // bir UUID seçildi

BluetoothSocket socket=createRfcommSockettoServiceRecord(UUID); //Soket bağlantısı oluşturuluyor.
socket.connect(); // Soket bağlantısı Açılıyor;,
OutputStream strm=socket.getOutputStream(); // gönderilecek veri bulutu oluşturuluyor
OutputStreamWriter osw=new OutputStreamWriter(strm); // Veriyi buluta yazacak ara nesne oluşturuluyor

osw.Write("A"); // "A" karakteri istenilen cihaza gönderiliyor.

osw.Close();
strm.close();
socket.close();

Böylece veriyi cihaz üzerine göndermiş olduk. Veri okuma işlemi için is InputStream, getInputStream() ve read(byte[]); fonksiyon ve nesneleri kullanılır.

 

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz