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.

 

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;

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.

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;

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.