Android Studio Bluetooth İşlemleri #1: Etkinleştirme ve İzinler
Merhabalar, bu yazı aslında bir serinin başlangıcı niteliğinde olacak. Android programlamada “Bluetooth İşlemleri”ni anlatacağım bu seride ilk işlem olarak android telefonumuzun bluetoothunu açıp etraftaki cihazlara görünür hale getirilmesi daha sonra da kapatılması işlemlerini gerçekleştireceğiz.
Bluetooth ile veri alma, gönderme vb. işlemlerden önce yapacağımız ilk iş ne olurdu? Tabii ki bluetoothumuzun kapalı ise aktif hale getirilmesi. Bluetoothu aktifleştirmek ise bir sistem ayarına müdahale etmek olacağından uygulama üzerinden bunu gerçekleştirirken kullanıcıdan izin almamız gerekiyor. Olayımızın akışı bu şekilde. (Konu bütünlüğü açısından etraftaki cihazları listeleme ve bir cihaza bağlanma olayı bir sonraki yazının konusu olacak.) Şimdi bluetoothu açıp kapatmak için basitçe bir switch buton koyalım. Bir de ayarın açık ya da kapalı olduğunu yazan bir text viewımız olsun. Tasarımımız bu yazı için bundan ibaret.
Başlayalım…
Artık bluetooth ayarını aktifleştirme olayını kodlayabiliriz.
İhtiyaçlarımız:
- Kullanıcı izni
- Bluetooth Adapter (Cihazın bluetooth adaptörüdür ve açma, kapama, keşfetme gibi temel işlemlerin gerçekleştirilmesi için kullanılır.) https://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html
- Bluetooth Socket (Sunucu ve istemci cihaz arasındaki arayüzün oluşturulması için kullanılır. Veri aktarımı soketler üzerinden gerçekleştirilir.) https://developer.android.com/reference/android/bluetooth/BluetoothSocket
- Bluetooth Device (Alanda keşfedilen bluetooth cihazlarını ve bağlanmak istenen cihazı temsilen kullanılır.) https://developer.android.com/reference/android/bluetooth/BluetoothDevice
Olay Örgüsü: Bluetooth’u aç tuşuna bastık. Sistem kullanıcıdan izin isteyecek. Eğer kullanıcı izin verirse cihazımızın bluetoothAdapterına erişeceğiz. Adapterımız boşsa demek ki cihazımızda bluetooth teknolojisi desteklenmiyor. Doluysa etraftaki cihazları tarayacağız. Cihazları bir listeye aldık. Bu listeden bağlanmak istediğimiz cihazın adresini bluetoothSoketimize veririz. Soket yardımıyla iki taraf arasında bir bağlantı oluşur. Programlamada genel anlamıyla soketler bir iletişim kanalı kurmak için kullanılır. Bağlantı kanalı oluşturulduktan sonra veri alış-verişi -gerçekleştiririz. Bu yazı için izin isteyip bluetoothAdapterı kullanacağız.
Kodlayalım…
Mükemmel önyüzümüzü kodladıktan sonra asıl işlemlerin yapılacağı arkaplana artık geçebiliriz. İlk işimiz izin almak olacaktı. Android’de uygulama izinleri “Manifest” dosyasında düzenlenir. Şimdi biz de uygulamamızın manifest dosyasına bluetooth işlemleri için gerekli “permission”ları ekleyelim.
Kullanacağımız izinler :
android.permission.BLUETOOTH -> Bluetooth’un kullanılması için android.permission.BLUETOOTH_ADMIN -> Bluetooth ayarlarını keşfetmek ve etraftaki cihazları keşfedebilmek için
Artık MainActivity’de asıl işlemleri kodlayabiliriz.
Bluetooth işlemleri için bir bluetoothAdapter tanımlıyoruz ve bu adaptera telefonun yerel bluetooth adapterını atıyoruz (18). Daha sonra switch butonundaki değişiklikleri takip etmek için bir listener oluşturuyoruz (29). Eğer bir değişiklik meydana geldiyse duruma göre işlemleri gerçekleştiriyoruz (31). Eğer “Off” durumundaysa durum yazısını değiştirip (37) bluetooth adapterımızı pasif hale getiririyoruz (38). Eğer “On” durumuna geldiyse (32) durumumuzu TextView’da gösteriyoruz (33). Sonrasında kullanıcıdan izin istiyoruz. (İzin istemeden önce “On” durumunda adapterın null olup olmadığı kontrolü gerçekleştirilebilir ancak günümüzde bluetooth teknolojisini neredeyse tüm cihazlar desteklediğinden ben gerek duymadım.) İzin istemek için bir intent tanımlıyoruz (34). Intentler sonuç dönen bir activity gerçekleştirmek için ya da yeni bir activity’e geçmek için kullanılabilmektedir. Biz sonucu olan bir activityi başlatacağız. Bu activity BluetoothAdapter’ın bir özelliği olan ACTION_REQUEST_ENABLE activitysi ve kullanıcının bluetoothu etkinleştirmesine izin veren bir sistem eylemidir. Intent’imiz ile başlatmak istediğimiz activityi belirledikten sonra activityimizi başlatabiliriz (35). Sonuç dönmesini istediğimiz için startActivityForResult(Intent, Sonuç Değişkeni) yapısını kullanıyoruz. Eğer direkt olarak yeni bir activity başlatmak isteseydik startActivity(Intent) yapısını kullanacaktık.
startActivityForResult dedikten sonra yukarıdaki kod blogu çalışmaya başlar. Android dokümanlarındaki yapı birebir yukarıdaki gibidir. requestCode ile hangi izni istediğimizi belirtiyoruz. Bunun için 19. satırda REQUEST_ENABLE_BT değişkenine 1 değerini atadık. Bu değere 2,3,4.. istediğiniz değeri verebilirsiniz. Burada esas amaç onActivityResult metodu hangi istek için bir dönüş sağlayacak bunu bildirmek (45). Intent’imizi oluştururken activitye adapter’ın bir metodu olan ACTION_REQUEST_ENABLE’ı vermiştik. Eğer bu istek başarılı olursa (46) kullanıcı izin vermiş ve bluetooth başlatılmış demektir (47). Aksi taktirde bluetoothumuz başlatılamaz (49).
Evet, her şey aslında oldukça basit… Olayın mantığını anlamanız ve ezbere kod yazmamanız adına her şeyi olabildiğince açıklamaya çalıştığımdan yazı haddinden fazla uzun oldu. Neyse ki tam şu an burada bitti :)