Android Bluetooth Bağlantısı – 1

Merhaba arkadaşlar,

Bu yazı dizimde sizlere Android ile Bluetooth bağlantı işlemleri nasıl yapılır, cihazda bluetooth nasıl aktif edilir, bluetooth bağlantısı ile veri alışverişi nasıl gerçekleştirilir konularından bahsedeceğim. 

Öncelikle belirtmek isterim ki, bluetooth özelliği simülatör üzerinde çalışmayacağı için yazmış olduğunuz kodları bluetooth desteği olan bir cihaz üzerinde test etmeniz gerekmektedir.

Android SDK güçlü bir bluetooth desteği ile sunmaktadır. Bu destek bizlere cihazın bluetooth özelliklerini yönetmeyi, çevrede erişilebilen diğer bluetooth cihazları bulmayı ve eşleştirilen cihazlar arasında veri transferi yapmayı sağlamaktadır. Bu yazımda sizlere cihazın bluetooth özelliği nasıl aktif edilir konusundan bahsedeceğim.

Android bluetooth özelliklerini android.bluetooth paketi altında toplamıştır. Projemizde bluetooth API’sini kullanabilmek için öncelikle bluetooth paketini eklememiz gerekmektedir.

import android.bluetooth.*;

Ayrıca cihazda bluetooth kullanımı kullanıcı izni gerektirdiğinden gerekli izinleri yazmamız gerekmektedir.

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

Gerekli paketi ve izinleri projemize ekledikten sonra arayüze bir Switch ekleyerek devam ediyoruz. (Bu adımda ToggleButton veya Button kullanılabilir, tamamen tasarım yapan kişinin tercihine bağlı bir durum).

<Switch
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:id="@+id/btSwitch"
   android:layout_alignParentRight="true"
   android:layout_marginRight="15dp"
   android:checked="false"
   android:textOff="Off" />

Bu eklemiş olduğumuz Switch nesnesi ile cihazın bluetooth özelliğini açıp kapatacağız. MainActivity içerisinde gerekli tanımlamaları yapıyor ve Switch nesnesine görev atıyoruz.

Switch bluetoothOnOff;

bluetoothOnOff = (Switch)findViewById(R.id.btSwitch);
bluetoothOnOff.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
   @Override
   public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
      if(isChecked) {
         //Switch On moduna geldiğinde yapılacaklar...
         Log.d(TAG, "Switch degeri On modunda");
      } else { 
         //Switch Off moduna geldiğinde yapılacaklar...
         Log.d(TAG, "Switch degeri Off modunda");
      }
   }
});

Bu adımda arayüzde yapılan değişikliği test etmek için simülator yardımı ile projeyi çalıştırıyor ve logCat kontrol ediyoruz. Eğer loglar düzgün bir şekilde düşüyor ise bluetooth özelliğini kullanmak için devam ediyoruz.

BluetoothAdapter btAdapter;

btAdapter = BluetoothAdapter.getDefaultAdapter();
if(btAdapter != null) {
   //Cihaz bluetooth desteklemekte...
} else {
   //cihaz bluetooth desteklememekte...
}

BluetoothAdapter sınıfından getDefaultAdapter nesnesi null dönüyor ise kullanılan cihaz Bluetooth özelliğini desteklemiyor demektir. Uygulamanın geri kalanı bu tip cihazlar için çalışmayacaktır. Eğer nesne null değilse bluetooth özelliğinin durumunu sorgulayarak devam ediyoruz.

//Bluetooth özelliği aktif değilse...
if(!btAdapter.isEnabled()) {
   Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
   startActivityForResult(enableBTIntent, BT_REQUEST_ENABLE);
   Toast.makeText(getApplicationContext(), "Bluetooth is turning on!", Toast.LENGTH_LONG).show();
}

Cihazda bluetooth özelliğinin açık yada kapalı olduğunu sorguluyor, eğer kapalı ise ACTION_REQUEST_ENABLE ile startActivityForResult() Intent’ini çalıştırıyoruz. Bu istek doğrultusunda telefon ekranında istek izin ekranı belirir ve cihazda bluetooth özelliğini aktif etmek için izin istenir. Eğer kullanıcı cihazın bluetooth özelliğinin aktif edilmesini kabul ederse startActivityForResult() methodu, 0’dan büyük olarak tanımlanan ACTION_REQUEST_ENABLE değeri onActivityResult() methoduna requestCode değeri olarak gönderilir. Bluetooth başarılı bir şekilde aktif edilirse RESULT_OK, aktif edilirken bir hata ile karşılaşılır veya kullanıcı izin ekranında isteği kabul etmezse RESULT_CANCELED değeri resultCode olarak onActivityResult() methoduna döner.

bluetooth02

onActivityResult methodunu aşağıdaki şekilde oluşturuyoruz.

public void onActivityResult(int requestCode, int resultCode, Intent data) {
   if(requestCode == ACTION_REQUEST_ENABLE) {
      if(resultCode == Activity.RESULT_OK) {
         Toast.makeText(getApplicationContext(), “Bluetooth baslatildi.”, Toast.LENGTH_SHORT).show();
      } else {
         Toast.makeText(getApplicationContext(), “Bluetooth baslatilamadi!”, Toast.LENGTH_SHORT).show();
      }
   }
}

Son olarak bluetooth özelliğini kapatmak istediğimizde ise,

if(btAdapter.disable()) {
   Toast.makeText(getApplicationContext(), "Bluetooth kapatildi.", Toast.LENGTH_SHORT).show();
}

kodlarını kullanıyoruz.

Örnek kodun tamamına GitHub üzerinden ulaşabilirsiniz.

Bir sonraki yazımda cihazımızdaki Bluetooth özelliğinin diğer cihazlar tarafından görünebilmesini ve cihazın server-client yapısını oluşturmasını sağlayacak kodları anlatacağım.

Yazı dizisinin sonraki bölümüne buradan ulaşabilirsiniz.

Konuyla ilgili her türlü soru ve yorumlarınızı aşağıdaki form aracılığı ile bana ulaştırabilirsiniz.

2

Eren Başaran

Software Developer
Mobilhanem Yazarı

5 Yorum

  • Teşekkürler ancak ben pc ile android cihazı bluetooth ile nasıl bağlıcam bilmiyorum umarım en yakında zamanda bilgi verirsiniz projemin bitim süresine çok az kaldı ve bu konu üzerine projem.

    • Fatih unused aslında hata değil uyarıdır. Yani android.bluetooth.* paketi içinden herhangi bir sınıfı kullanmadığın için bu tarz bir uyarı veriyor Android Studio. Eğer bu paketten bir sınıf kullanırsan (örn. BluetoothAdapter btAdapter; gibi.) uyarının kalktığını göreceksin.

  • Merhaba,
    hocam söyleyeceğim şeyin fazla bu konu ile alakası yok ama arayan arkadaşlar içinde kaynak olur.
    konu şu bende bir android tv box var ve bunda bluetooth yok ben bir usb bluetooth adaptör alsam bunu android tv box a taksam usb portundan cihazda bluetooth özelliği aktif olur mu mantıken olur diye düşünüyorum ama donanım olarak cihazda destek yok o yüzden olmaz diyenlerde var bu konuda yazabilirseniz çok memnun olurum.
    şimdiden çok teşekkür ederim.

Haftalık Bülten

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