Burak. | Stay With Tech

ANDROID İLE BLUETOOTH UYGULAMASI – PART 1

Herkese merhaba. İlk projem ile karşınızdayım. Yaz dönemi boyunca staj yaptığım şirkette bir Bluetooth projesi üzerinde çalıştım. Bu yaptığım projenin  aynısı olmasa da – şirketin gizlilik politikası nedeniyle projeyi aynen paylaşamıyorum – bir benzerini, temel fikirlerini vererek sizlerle paylaşacağım. Uygulamada yaptıklarımı göz önünde bulundurarak, karmaşayı önlemek adına projemi parça parça paylaşmaya karar verdim. Önce size projemin genel açıklamasını yapayım.

AÇIKLAMA

Temel olarak uygulama üzerinden dört adet işlem gerçekleştiriyoruz:

  1. Bluetooth’u açıp kapatma
  2. Daha önce bağlanılmış cihazları gösterme & Etraftaki bağlanılabilir cihazları keşfetme
  3. Bir cihaza bağlanma
  4. Veri alışverişi

Bu yazımda ilk iki kısımdan detaylı bir şekilde bahsedeceğim. Uygulamayı Android Studio platformunda yazdığım için detayları verirken karışıklık olmaması açısından, öncelikle sizlere biraz platformdan bahsedeceğim. Haydi başlayalım.

ANDROID STUDIO

Android Studio, Android işletim sistemini kullanan cihazlar için uygulama yazabileceğiniz bir platformdur. Hem görsel olarak sürükle – bırak yöntemiyle çok kolay bir şekilde düzenleme yapabilir hem de platformun size sağladığı “kodu otomatik tamamlama” özelliğinden faydalanarak kodunuzu yazarken platformun sizin için hazırladığı önerilerden faydalanabilirsiniz. Projeyi detaylı inceledikçe,  gerekli yerlerde göstereceğim görseller ile platformu daha yakından tanıyacağız. Ayrıca Android programlama ile ilgili her türlü detayı developer websitesinden öğrenebilirsiniz. Sizi çok sıkmadan projeye geçmek istiyorum.

1. BAŞLANGIÇ SAYFASI & BT AÇMA – KAPAMA

Projeyi adım adım inceleyeceğiz. Öncelikle almamız gereken izinler var. Şöyle ki, uygulama üzerinden bazı işlemleri yaparken, Android bize güvenlik açısından bazı izinler almamızı zorunlu tutuyor. Örneğin uygulama içerisinde interneti kullanmak için, Bluetooth’u kullanmak için ve daha birçok özellik için izin gerekiyor. Bu işlemse çok kolay:

Android Studio’da sayfanızın solunda, yandaki gibi bir menü göreceksiniz. Burası uygulamanızdaki “activity” (uygulamadaki sayfalar diyebiliriz),  “layout” (sayfaların görselleri) gibi birçok detayın bulunduğu menüdür. İzinleri en yukarıda gördüğünüz “AndroidManifest” sayfasından alıyoruz. Çift tıklayarak sayfamızı açıyoruz.

Gördüğünüz gibi sayfamız açıldı ve beş adet iznimiz var. Bunlardan birincisi Bluetooth’u kullanmak için, ikincisi bağlantı başlatmak için,  üçüncü ve dördüncü versiyon kontrolü için – Android 6.0 Marshmallow’dan itibaren Bluetooth için bazı değişiklikler oldu – aldığımız izinler. Beşinciyi yazmasanız da olur.

İzinleri aldıktan sonra başlangıç sayfamızın yapısına bakıyoruz:

Gördüğünüz gibi sol menüden “activity_baslangic” ismini verdiğimiz başlangıç sayfamızı seçtik ve dizayn edebiliyoruz. Üç adet butonumuz var ve işlevleri tam olarak üzerinde yazdığı gibi. Eğer farklı özellikler koymak isterseniz sol yukarıdaki “Palette” kısmından istediğinizi sayfaya sürükleyebilirsiniz. Eğer isterseniz dizaynı kod ile de yapabilirsiniz. Bunun için sol aşağıdaki text sayfasını açmanız gerekiyor. O sayfayı da şöyle gösterebilirim:

Burada text sayfamızın bir kısmı gözüküyor, gördüğünüz gibi butonların bütün ayarları burada mevcut, istediğiniz gibi düzenleyebilirsiniz.
Şimdi biraz başlangıç sayfası için kodumuzu inceleyelim.

BAŞLANGIÇ AKTİVİTESİ KODLARI

Aktivitemizi sol menüden açıyoruz ve ilk olarak değişkenlerimizi tanımlıyoruz. Dikkat edin sadece tanımlıyoruz, daha değişkenimize değer atamıyoruz. (requestCode ve TAG hariç)

 Buradaki butonlar tahmin edebileceğiniz üzere ana sayfada kullandığımız butonlar,  BluetoothAdapter ise telefonda Bluetooth modülü olup olmadığını ve Bluetooth’un açık olup olmadığını kontrol edeceğimiz değişkenimizdir. Diğer değişkenler zamanı gelince açıklanacaktır.

Aktivite ile beraber “OnCreate” metodu otomatik oluşur. Bu metotta aktivite açılırken gerçekleşecek olaylar kodlanır. Biz genelde kodlarımızı buraya yazacağız. Metodumuzun içinde ilk olarak değişkenlerimize değer atıyoruz:

Gördüğünüz gibi cihazda tanımlanmış adapter’ı aldık ve butonları layout’takiler ile eşleştirdik. Yani layout’daki hangi buton, kodumuzdaki hangi butona denk onu belirledik. Daha sonra ilk olarak Bluetooth var mı yok mu; var ise açık mı, değil mi onun kontrolünü yapıyoruz:

 Burada ilk önce adapter’ın boş olup olmadığını kontrol ederek Bluetooth modülünün cihazda var olup olmadığını kontrol ettik. Eğer yoksa ekrana mesaj bırakıyoruz. “Toast” burada ekrana mesaj bırakmak için yazdığımız koddur. Eğer varsa bu sefer Bluetooth hali hazırda açık mı değil mi onu kontrol ediyoruz. Eğer Bluetooth zaten açıksa Bluetooth’u açıp kapattığımız butonumuzun rengi yeşil oluyor – Bluetooh açık manasında -, yazısı “BLUETOOTH KAPAT” şeklinde düzenleniyor, etrafta bağlanılabilir cihazları göstereceğimiz aktiviteyi açtığımız buton ve önceden bağlandığımız cihazları göstereceğimiz aktiviteyi açtığımız buton etkin oluyor – tıklanabilir manasında -, ve “BLUETOOTH AÇIK” şeklinde bir mesaj bırakıyoruz. Eğer Bluetooth kapalı ise Bluetooth’u açıp kapattığımız butonumuzun rengi kırmızı oluyor – Bluetooh kapalı manasında -, ve diğerleri açık durumda olanların tam tersi olarak belirleniyor. Burada eklemem gereken şey “customRed” ve “customGreen” olarak gördüğünüz renkler benim tanımladığım renklerdir. İlk başta bahsettiğim sol menüde, aşağıda “values” sekmesinin içinde “colors” adlı bir kısım var. Oraya tıklarsanız kendi özel renklerinizi, özel isimlerle tanımlayabilirsiniz:

 Burada gördüğünüz gibi dilediğiniz kadar rengi, kendi belirlediğiniz isimlerle tanımlayıp tüm proje boyunca kullanabilirsiniz.

Hemen arkasından, Bluetooth’u açıp kapattığımız butonumuza tıklayınca neler olacağını tanımlıyoruz: Burada tanımladığımız “setOnClickListener” butona tıkladığımızda ne olacağını kodlayacağımız metottur. Metot içerisinde, cihazımızda Bluetooth modülünün olup olmadığını kontrol ediyoruz, daha sonra yine Bluetooth’un açık olup olmadığını kontrol ediyoruz. Eğer zaten açıksa, yukarıda açık durum için belirttiğimiz durumları belirtiyoruz. Eğer kapalıysa kullanıcıya Bluetooth’u açmak isteyip istemediğimizi soruyoruz. “startActivityForResult()” metodu ile kullanıcıdan cevap beklediğimiz bir dialog oluşturuyoruz:

 Burada kullanıcıdan bir cevap alana kadar bu dialog açık kalıyor. Kullanıcının verdiği cevaba göre ise farklı işlemler yapıyoruz. Cevabı almak için ise “onActivityResult” metodunu çağırıyoruz.  Bu metodumuz sadece belli durumlarda – butona tıklandığında – olacağı için “OnCreate” metodunun içinde tanımlamıyoruz ve dışarısında tanımlıyoruz:

Burada gördüğünüz gibi metot üç adet değişken kullanıyor. “requestCode” değişkenini en başta tanımlayıp,  ‘0’ olarak belirlemiştik. Bu herhangi bir sayı olabilir. Neden kullanıldığına gelince, eğer aktivitede kullanıcıdan birden fazla cevap bekleyeceğimiz bir durum oluşursa her birinin cevaplarını ayırt etmek için kullanıyoruz. Daha açık anlatımıyla, yukarıda “startActivityForResult” çağırırken ‘0’ olan “requestCode” değişkenini argüman olarak verdik. Bunun cevabını da yine “requestCode” değişkeni ‘0’ olan “onActivityResult” metodundan alacağız. “resultCode” ise kullanıcının verdiği cevap oluyor. Metodu incelerseniz, kullanıcı Bluetooth’u aç cevabını verirse “resultCode = RESULT_OK” oluyor ve biz o durumda olacakları kodluyoruz. Eğer açma cevabını verirse “resultCode = RESULT_CANCELED” oluyor ve biz o duruma göre olacakları kodluyoruz. Yine basitçe görebileceğiniz gibi kullanıcı aç veya açma cevaplarını verirse yukarıda butonlar için bahsettiğimiz durumlar gerçekleşiyor.

Bu aktivitede son olarak diğer iki butonumuza tıklayınca ne olacağını belirtiyoruz:

Gördüğünüz gibi,  butonlara tıklayınca birinde etrafta bağlanılabilir cihazları gösterdiğimiz aktiviteyi açıyoruz, diğerinde de eskiden bağlanılmış cihazları gösterdiğimiz aktiviteyi açıyoruz. Burada “OpenActivityClass” değişkeni görüyorsunuz. Bir aktiviteden diğerini başlatmak için aslında iki satırlık kod yazmanız yeterli, ancak açacağınız aktiviteye bulunduğunuz aktiviteden bazı değerler göndermek istiyorsanız ekstralar eklemeniz gerekiyor. Her yeni aktivite açacağımız kod bloğunda – burada iki buton için iki tane – tekrar tekrar yeni aktivite açma kodlarını yazmak zor olacağı için ben bir class tanımladım. “Niye metot tanımlamadın?” dediğinizi duyar gibiyim. Bu aktivite açma işlemi diğer aktivitelerde de yapacağım bir işlem olduğu için her aktivitede yeni metot tanımlamak yerine bir adet class tanımlayıp tüm projede kullanıyorum ve büyük kolaylık sağlıyor. Android derslerini aldığım hocamın bir lafı vardır: “Bir kodun aynısını birden fazla yazıyorsan o kod hatalıdır.” Ben de bu sözden yola çıkarak böyle bir yapı kullandım:

Class şu şekilde çalışıyor: Önce hali hazırda bulunduğumuz aktiviteyi ve açacağımız aktiviteyi argüman olarak vererek class’ı tanımlıyorum. Daha sonra class’a bağlı iki metot tanımlıyorum. Kendi ihtiyaçlarım çerçevesinde ya aktiviteyi hiçbir veri göndermeden açıyorum, ya da “address” isimli bir String göndererek açıyorum. Bu address gönderme işlemini, ileride cihazlara bağlanmak için yapacağız. Gayet sade ve basit bir şekilde class’ı ve ilk aktivitemizi başarıyla tamamladık. Siz de eğleniyorsunuz değil mi 🙂

2.1. BAĞLANILABİLİR  CİHAZLAR

Bu aktivitede adından da anlayabileceğiniz üzere etrafta bağlanabileceğimiz cihazları göstereceğiz. Gelin önce bir dizaynına bakalım:

Gördüğünüz gibi oldukça sade, başlığımız için bir tane “TextView” koydum ve cihazları göstermek için bir adet “ListView” koydum. Bunlar ile ilgili bütün ayarları text kısmından istediğiniz gibi yapabilirsiniz. Burada bahsetmem gereken önemli bazı noktalar var. Öncelikle ListView ile çalışırken bazı prosedürlere uymamız gerekiyor. Şöyle ki, ListView’de gördüğünüz üzere her bir eleman için bir içerik var. Yani aslında her elemanın da bir layout’u var. Karışık mı geldi? Şöyle anlatayım, ListView bizim belirlediğimiz özel bir layout’a sahip elemanlardan oluşuyor. Mesela buradaki ListView’in elemanları için benim belirlediğim layout şu:

Dikkat ettiyseniz ListView’deki her eleman bu layout’tan oluşuyor. Bu layout’ta dört adet TextView var. İkisinde “CİHAZ ADI” ve “CİHAZ ADRESİ” yazıyorken, diğer ikisinde de bulunan cihazların adları ve adresleri yazacak.

Haydi aktivitemizin kodlarını inceleyelim.

Yine önce değişkenlerimizi tanımlıyoruz:

Neler tanımladık bir bakalım: adapter’ımızı biliyoruz artık, layout’taki ListView, göstereceğimiz cihazlar için isim ve adres Stringleri, aktivite açtığımız class’ımız, ve birkaç farklı şey daha. Bu noktada açıklamak istediğim çok önemli bir konu var. Odağınızı kaybettiyseniz bir kahve alın da buraya iyice odaklanın 🙂

ÖNEMLİ : Bildiğiniz üzere yazılım dilleri String, int gibi birçok veri tipi barındırıyor. Ama bazen öyle noktalar olur ki bunların hiçbirisi ihtiyacınızı karşılamaz ve kendi veri tipinizi oluşturmanız gerekebilir. “O nasıl oluyor ya?” dediğinizi duyar gibiyim. Gayet basit bir şekilde oluyor:

Az önce yaptığımız gibi bir class oluşturduk ve ismini MyDeviceClass olarak tanımladık. Bu class’ın da isim ve adres olmak üzere iki içeriği var. İşte !! Veri tipimizi bu kadar kolay bir şekilde tanımladık. Peki neden yaptık? Az önce bahsettiğim gibi ListView’da bağlanılabilir cihazları göstereceğiz ve her bir cihazı bir veri tipi gibi gösterebilmek için bunu yaptık. Kafalar karıştı gibi hissediyorum ve hemen bir örnek veriyorum. Mesela telefonunuz bağlanılabilir bir cihaz ve biz onu listemizde göstermek istiyoruz. Bunun için kendi hazırladığımız veri tipini kullanarak bir değişken oluşturuyoruz:

Birazdan bağlanılabilir cihazları bulmak için keşif yapacağız ve her cihaz bulunduğunda üstteki gibi bir kod çalışacak ve biz bulunan cihazın ismini ve adresini kendi veri tipimize aktaracağız. Bu sayede veri tipimizi istediğimiz gibi kullanabiliriz. Şimdilik bu konu için bu kadar yeter, birazdan tekrar geleceğiz zaten.

Diğer tanımlanan değişkenlerle devam edelim, cihazlar için bir liste tanımladık “ArrayList” ve bu liste dikkat ederseniz bizim veri tipimizdeki elemanlardan oluşuyor. Yani cihazlardan oluşan bir liste gibi düşünün. Bu liste için bir adapter oluşturduk. Listemizin veri tipi özel olduğu için adapter’ı da özel oluşturmamız gerekiyor:

Karışık gibi gelse de aslında çok sade: Adapter’ın hangi argümanları alacağını belirlediğimiz “Constructor” – Bir aktivite ve bir liste alıyor -, dört adet de metot barındırıyor. Metotlar da yine çok sade: Listemizdeki eleman sayısını aldığımız “getCount” metodu, listedeki elemanlardan ‘position’ indisindeki elemanı aldığımız “getItem” metodu, burada hiç kullanmayacağımız ama tanımlamanın zorunlu olduğu – buradaki her metodu tanımlamak zorunlu – “getItemId” metodu ve elemanın ListView’da gösterirken nasıl gösterileceğini belirttiğimiz “getView” metodu. Hatırlarsanız ListView’da eleman göstermek için özel layout tanımlıyoruz demiştim, işte o layout’u burada view’a aktarıyoruz. Onun haricinde cihazın ismini ve adresini alarak layout’ta gösteriyoruz. Bu kadar basit.

Son olarak da bir “BluetoothDevice” tanımladık, yani Bluetooth cihazlarını tanımlamak için kullanılan bir değişken.

Hemen arkasından aşağıdaki kodlar ile hali hazırda bir cihaz keşfi olup olmadığını araştırıyoruz, eğer varsa kapatıyoruz.

Daha sonra yukarıda bahsettiğim versiyon kontrolünü gerçekleştiriyorum:

Bu kodlar internetten hazır bulduğum kodlar olduğu için açıklama ihtiyacı hissetmiyorum çünkü sizin de bilmenize gerek yok. Bazen bazı kodları sadece gerektiği için bir yerden bulur ve eklersiniz 😉

Arkasından cihazlarımızın keşfine başlıyoruz. Keşif derken, etrafta bağlanılabilir cihazları yaklaşık 12 saniye boyunca tarayarak bulmaya çalışıyoruz. Keşif başladığında, cihaz bulunduğunda, keşif bittiğinde olacak olayları tanımlayarak kodumuzu düzenleyeceğiz. Önce keşif nasıl olur ona bakalım:

Öncelikle keşfi başlattık gördüğünüz gibi. Daha sonra bir IntentFilter tanımlayıp keşif sırasında, gerçekleştiğinde olmasını istediğimiz kodları yazacağımız olayları ekledik. Mesela keşif başlatıldı bir olay ve biz bu olay gerçekleştiğinde bir işlem yapmak istiyoruz, o yüzden bu olayı filter’a ekledik. Adapter’ımızı oluşturduk ve ListView’e koyduk. “registerReceiver” metodu ile birazdan göstereceğim receiver’a filter’ı ekledik. “Ne diyorsun sen ya!!” dediğinizi biliyorum. Yani şunu yaptık, gerçekleştiğinde olmasını istediğimiz kodları yazacağımız olayları eklemiştik ya, o kodları bir receiver içinde yazıyoruz. “registerReceiver” ile bir nevi ikisini birleştirmiş oluyoruz. Buyurun receiver’ı görelim de daha iyi anlaşılsın:

“onReceive” metodu çalıştığında, yani yukarıda tanımladığımız olaylardan biri gerçekleştiğinde, gerçekleşmesi gereken kodları yazdık. Önce hangi olayın olduğunu alıyoruz ve duruma göre kodları düzenliyoruz. Keşif başlatılınca (action = BluetoothAdapter.ACTION_DISCOVERY_STARTED) ve bitince (action = BluetoothAdapter.ACTION_DISCOVERY_FINISHED) sadece mesaj bıraktık. Bırakıyoruz ki kullanıcı keşif yapılıyor mu bitti mi anlayabilsin. Eğer bir cihaz bulunursa (action = BluetoothDevice.ACTION_FOUND) yukarıda bahsettiğimiz özel veri tipimizdeki bir değişkene o cihazı ekleyip daha sonra listeye ekliyoruz. Orada gördüğünüz “duplication” ile ilgili kodları da açıklayayım. Bazen aynı cihazı birden fazla kere arka arkaya buluyor. Bu durumda o cihazın iki defa gösterilmesini engellemek için böyle bir algoritma yazdım. Biraz incelerseniz basit bir algoritma olduğunu göreceksiniz.

Son olarak bulunan cihazlara tıklayınca, yani ListView’in her bir elemanına tıklayınca ne olacağını tanımlıyoruz:

Bir cihaza tıklandığında bu demektir ki aradığımızı bulduk artık keşif tamamlanabilir, o yüzden keşfi kapatıyoruz. Daha sonra tıkladığımız cihazı “get(position)” metodu ile alıyoruz ve o cihazın ismini ve adresini alıyoruz. Aşağıda yine basit bir versiyon kontrolünün ardından, aldığımız adresi göndererek bağlantı sayfasını açıyoruz. Burada kendi class’ımızı kullandığımıza dikkat edin.

Aktivitemizi tamamlamak üzereyiz, eklemem gereken ufak bir şey var. Yukarıda hatırlarsanız “registerReceiver” metodunu kullanmıştık. Onun için bir “OnDestroy()” metodu tanımlamamız gerekiyor. Yani aktivite kapandığında receiver’ın da kapanmasını istiyoruz:

Aktivitemizi bu kodları da yazdıktan sonra tamamlamış oluyoruz. “Önceden Bağlanılmış Cihazlar Aktivitesi” ile bu yazıma son vereceğim.

2.2. ÖNCEDEN BAĞLANILMIŞ CİHAZLAR

Bu aktivitede yine adından anlayabileceğiniz üzere, daha önceden bağlanılmış cihazları göstereceğiz. Burada işlerimiz diğer aktivitelere göre nispeten daha kolay. Layout ile başlayalım:

Etrafta bağlanılabilir cihazları gösterdiğimiz aktivite ile neredeyse aynı gördüğünüz gibi. Tek değişiklik başlıktaki yazı. Yine değişiklikler yapmak isterseniz sol alttaki text kısmını kullanabilirsiniz. Hadi şimdi kodumuzu inceleyelim:

Öncelikle her zamanki gibi değişkenlerimizi tanımlıyoruz:

Buradaki değişkenlerimiz de az önceki aktivitedekilere çok benziyor. Ne işe yaradıklarını da artık biliyorsunuz. Zaten bu aktivitede genel olarak 2.1’de yaptıklarımıza benzer işlemler yapacağız. Sadece göstereceğimiz cihazları etraftan bulmuyoruz da kendi cihazımızın database’inden hazır alıyoruz. Çünkü cihazlar daha önce Bluetooth ile bağlandıkları cihazları kolaylık olması açısından tutarlar.

Arkasından “OnCreate” metodumuzun içinde değişkenlerimize değer atıyoruz. Şimdi akıllara şöyle bir soru gelebilir. Bunları neden direk tanımladıktan sonra değer atamıyoruz veya niye hem tanımlamayı hem de değer atamayı OnCreate’de yapmıyoruz? Yukarıdaki aktivitelerde gördüğünüz gibi bazı değişkenleri birden fazla metot içinde kullanıyoruz. Eğer bir değişkeni bir metot içinde tanımlarsanız sadece o metotta kullanabilirsiniz. İşte biz aktivitedeki tüm metotlarda kullanabilmek adına en yukarıda (Aktivitenin oluşturulduğu yerin en başı) tanımlıyoruz. Nerede kullanacaksak da orada değer atıyoruz. Bunu tüm projelerinizde uygulamanızı tavsiye ederim. Değişkenlerimize değer atıyoruz şimdi:

Adapter, ListView ve ArrayList’imize değer atadık. Şimdi bu aktivitede yapacağımız en önemli şey olan daha önce bağlanılmış cihazları alma işlemini yapacağız:

Neler yaptığımıza bir bakalım. Öncelikle BluetoothAdapter’ın bize sağladığı “getBondedDevices” metodu ile daha önceden bağlanılmış tüm cihazları alarak BluetoothDevice’lardan oluşan bir ‘Set’in içerisine koyduk. Eğer bu Set, yani listemiz boş ise daha önce bağlanılmış hiçbir cihaz yok demektir ve bunu belirten bir mesaj bıraktık ekrana. Eğer liste dolu ise bir döngü yardımıyla her cihazın adını ve adresini kendi oluşturduğumuz veri tipini kullanarak alıyoruz ve ArrayList’imize ekliyoruz. Dikkat ederseniz ArrayList’imiz bizim oluşturduğumuz veri tipi olan ‘MyDeviceClass’tan oluşuyor. Arkasından listeyi adapter’a ekliyoruz, adapter’da değişiklik olduğunu belirtiyoruz ve adapter’ı ListView’a ekliyoruz. Son olarak ListView’da bir elemana tıklandığında, yani bir cihaza bağlanılmak istendiğinde neler olacak ona bakalım:

Her ihtimale karşı keşif işlemini kapatıyoruz. Çünkü bu aşamadan sonra bağlantı başlayacağı için keşif olmaması gerekiyor. Daha sonra listemizden tıklanan cihazın adını ve adresini alıyoruz. Her ihtimale karşı Bluetooth’un açık olup olmadığını kontrol ettikten sonra eğer açıksa bağlantı sayfasını açıyoruz, değilse de kullanıcıdan Bluetooth’u açmak için izin istiyoruz. Verilen cevaba göre ya bağlantı reddedildi mesajı bırakıyoruz ya da bağlantı sayfasını açıyoruz.

Bu şekilde projemizin ilk kısmını tamamlamış olduk. Umarım her şey yeterince açıklayıcı olmuştur. Buraya kadar anlattığım kısım ile ilgili veya Android & Android Studio ile ilgili herhangi bir sorunuz olursa benimle iletişime geçebilirsiniz. Part – 2’de görüşmek üzere, teknolojiyle kalın 🙂

RSS
LinkedIn
Share
Instagram
Twitter
Visit Us
Follow Me

Categories: ANDROİD, YAZILIM

ANDROID İLE BLUETOOTH UYGULAMASI – PART 2 »

6 Comments

  1. Merhaba burak bey, benim merak ettigim konu acaba bu programlari maclerde de rahatlikla kullanabilir miyiz?
    Tesekkurler,
    Erman Guzel

  2. Burak beyciğim emeğinize sağlık. Oldukça faydalı bir yazı olmuş. Part – 2’yi ve bu tarz deneyimlerinizi paylaştığınız yazılarınızı sabırsızlıkla bekliyoruz. Arayı açmayalım 🙂

    • Çok değerli Tahsin kardeşim yorumun için teşekkür ederim. Part – 2 de en kısa zamanda yayınlacanaktır. Çok daha değişik incelemeler ve projelerle yeniden karşınızda olacağım. Saygılar ve sevgiler dilerim. Her zaman dediğim gibi, teknolojiyle kal 🙂

  3. Hello ,

    I saw your tweets and thought I will check your website. Have to say it looks very good!
    I’m also interested in this topic and have recently started my journey as young entrepreneur.

    I’m also looking for the ways on how to promote my website. I have tried AdSense and Facebok Ads, however it is getting very expensive. Was thinking about starting using analytics. Do you recommend it?
    Can you recommend something what works best for you?

    Would appreciate, if you can have a quick look at my website and give me an advice what I should improve: http://janzac.com/
    (Recently I have added a new page about FutureNet and the way how users can make money on this social networking portal.)

    I have subscribed to your newsletter. 🙂

    Hope to hear from you soon.

    P.S.
    Maybe I will add link to your website on my website and you will add link to my website on your website? It will improve SEO of our websites, right? What do you think?

    Regards
    Jan Zac

  4. Hello Mr Jan,
    I appreciate your comment and thank you so much. Actually I’ve started my website recently so I’m not well-prepared for promoting website. As you said, I’m using analytics and pleased with that.
    I have a look at your website and should say it looks great 🙂 Instead of advising you, I need to get something from your website in my opinion.
    I would be absolutely pleased about promoting our websites. I will connect with you about this for discussing in detail.

    Best regards
    Burak

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Copyright © 2020 Burak. | Stay With Tech

Theme by Anders NorenUp ↑