Android i Bluetooth Low Energy Laboratorium 4 Niestacjonarne
Agenda Stworzymy dwie aplikacje działające jako klient-serwer komunikujące się poprzez Bluetooth LE Ze względu na ograniczenia emulatora potrzebne będą państwa telefony Nie każdy telefon posiada BLE
Klient Tworzymy nowy projekt typu Basic Activity o nazwie BLEClient z API na poziomie Androida 6. Wygląd aktywności kopiujemy stąd: https://pastebin.com/t0bymgea
Klient Do manifestu dodajemy wpisy: Do projektu dodajemy klasę Constants, której kod jest tutaj: https://pastebin.com/hsghtvua
Klient Będziemy potrzebować wiele importów (powinny dodawać się automatycznie)
Klient W klasie zdefiniujemy pola:
Klient W metodzie onresume sprawdzimy, czy BLE jest dostępne
Klient Modyfikujemy metodę oncreate
Klient Dodajemy metody obsługi przycisków Start/Stop - odpowiednio startscanning i stopscanning oraz dla przycisku Wyślij - sendmessage
Klient Dodajemy metodę sprawdzającą, czy mamy uprawnienia
I jej metody pomocnicze Klient
Klient Zaczynamy pisać metodę startscan Skanując musimy zdefiniować filtry (na razie puste) i tryb pracy (Low Power)
Klient Ponieważ proces skanowania jest asynchroniczny musimy zdefiniować klasę, która obsłuży CallBack wewnątrz naszej klasy aktywności
Klient W metodzie addscanresult dodamy znalezione urządzenia do listy Na koniec metody startscan dodajemy
Klient Gdybyśmy teraz uruchomili aplikację, skanowanie działałoby bez końca Dlatego dodamy zatrzymanie procesu po określonym czasie na koniec metody startscan
Klient Musimy jeszcze dodać metodę stopscan
I metodę scancomplete Klient
Klient Możemy teraz uruchomić aplikację Po wciśnięciu przycisku Start i upływie 5s powinna wyświetlić się lista znalezionych urządzeń BLE w otoczeniu (checkbox wszystkie musi być zaznaczony)
Serwer Tworzymy nowy projekt typu EmptyActivity dla Androida 6 o nazwie BLEServer Tworzymy te same wpisy w manifeście i dodajemy klasę Constants Serwer będzie dosyć podobny do klienta
Potrzebne importy Serwer
Pola w klasie aktywności Serwer
Serwer Piszemy metodę oncreate, w której tworzymy adapter Bluetooth
Serwer I onresume, gdzie najpierw sprawdzamy dostępność BLE
Serwer Dalej tworzymy obiekt Bluetooth Advertiser, który będzie odpowiedzialny za rozgłaszanie wokół naszej obecności Oraz tworzymy klasę CallBack dla usługi GattServer
Serwer Samą klasę CallBack zdefiniujemy wewnątrz klasy aktywności Na razie ją tak zostawiamy
Serwer Na koniec metody onresume dodamy teraz wywołanie metody setupserver, którą musimy dopisać
Serwer Nasz serwer jest identyfikowane przez pewne UUID oraz oferuje 1 tzw. charakterystykę, też identyfikowaną przez inny UUID, która oferuje usługę typu write
Serwer Dodamy teraz jeszcze następującą metodę, która uruchamia proces rozgłaszania
Serwer Metoda ta wymaga też CallBack u, który również zdefiniujemy w klasie aktywności
Serwer Wywołanie startadvertising dodajemy oczywiście na koniec metody onresume Musimy jeszcze móc zatrzymać proces rozgłaszania - dodamy metody stopadvertising i stopserver
Serwer I przeciążymy metodę onpause aktywności Wrócimy teraz do naszego CallBacku GattServer i treści jego metod
Serwer Tu serwer zarządza połączonymi urządzeniami
Serwer Nasz serwer w odpowiedzi na przesłaną informację odsyła ją odwróconą (KOT > TOK)
Klient 2 Wracamy do klienta W metodzie startscan dodamy filtr, który spowoduje, że będziemy szukać tylko naszego serwera
Klient 2 W klasie BtleScanCallback modyfikujemy metodę addscanresult
Klient 2 Dodajemy metodę connectdevice do aktywności I nową klasę wewnętrzną GattClientCallback
Klient 2 W klasie GattClientCallback przeciążamy metodę onconnectionstatechange
Klient 2 I podobnie metodę onservicesdiscovered
Klient 2 Dodajemy też do aktywności metodę do rozłączania się z serwerem disconnectgattserver Możemy teraz wysłać do serwera komunikat
Klient 2 Dodajemy do aktywności metodę sendmessage i upewniamy się, że jest podpięta pod guzik Wyślij
Klient 2 Serwer nam odpowie, więc musimy przechwycić odpowiedź Przeciążamy metodę oncharacteristicchanged w klasie GattClientCallback
Teraz powinno działać :-)
Dziękuję