Programowanie w języku Java dla urządzeń BlackBerry z pomocą Blackberry JDE Plugin for Eclipse Paweł Kmiecik, III INF WSKSiM
1 Wstęp Java to narzędzie umożliwiające pisanie aplikacji na przeróżne platformy w tym również na urządzenia mobilne BlackBerry. Firma RIM przygotowała wtyczkę do Eclipse IDE umożliwiającą pisanie i testowanie aplikacji za pomocą symulatora lub urządzenia BlackBerry. Eclipse jest znanym, powszechnie używanym IDE do wielu języków programowania. Ma szeroką gamę ustawień i preferencji. Jednocześnie jest łatwy w obsłudze i intuicyjny. Zapraszam do zapoznania się z podstawami konfiguracji środowiska i programowaniem w języku Java dla BlackBerry. 2 Instalacja i konfiguracja BlackBerry JDE Plugin for Eclipse Jeżeli mamy zainstalowanego Eclipse, możemy dodać do niego wtyczkę BlackBerry JDE. W tym celu Natomiast jeśli nie mamy zainstalowanego na swoim komputerze środowiska Eclipse, najlepiej jest ściągnąć je razem z wtyczką BlackBerry JDE. Wtyczkę możemy pobrać ze strony BlackBerry dla developerów: https://developer.blackberry.com/ BlackBerry wspiera wiele platform, my na stronie wybieramy ikonę Java. W następnym kroku klikamy na ikonę Tools:
https://developer.blackberry.com/java/ Ostatnim krokiem jest ściągnięcie Eclipse'a razem z wtyczką BlackBerry JDE: https://developer.blackberry.com/java/download/
Po ściągnięciu pakietu instalacyjnego uruchamiamy go i przechodzimy przez kolejne kroki instalacji:
Po pomyślnie przeprowadzonej instalacji uruchamiamy Eclipse. Na ekranie komputera powinno pojawić się logo: Przy pierwszym uruchomieniu program zapyta nas o ścieżkę do przestrzeni roboczej:
Dobrze jest zaznaczyć opcję Use this as the default and do not ask again. W ten sposób unikniemy pokazywania się tego okna w przyszłości. Następnie pojawi nam się główne okno środowiska Eclipse z ekranem powitalnym:
3 Pierwsze kroki Po zainstalowaniu BlackBerry JDE Plugin for Eclipse możemy przystąpić do tworzenia aplikacji. Jak zwykle podczas poznawania nowego środowiska zaczniemy od legendarnego, przykładowego programu HelloWorld. Z menu File wybieramy New a następnie Project. W kolejnym oknie wybieramy rodzaj naszego projektu BlackBerry Project: W następnym oknie wpisujemy nazwę naszej aplikacji. Pozostałe ustawienia pozostawiamy domyślnie:
Klikamy Finish. W tym momencie, przy pierwszym naszym projekcie Eclipse zostanie zrestartowany. Po ponownym uruchomieniu zobaczymy ekran z opisem naszej aplikacji. Możemy go teraz uzupełnić formularz:
Kiedy rozwiniemy drzewo naszej aplikacji w Package Explorerze, zobaczymy pliki źródłowe naszej aplikacjii testowej: Klasa MyApp jest klasą, w której znajdziemy główną funkcję main. Natomiast klasa MyScreen jest rozszerzeniem klasy MainScreen z pakietu net.rim.device.api.ui.container.mainscreen. To w niej definiujemy wygląd naszej aplikacji.
Kody tych klas wyglądają następująco: MyApp.java: package mypackage; import net.rim.device.api.ui.uiapplication; /** * This class extends the UiApplication class, providing a * graphical user interface. */ public class MyApp extends UiApplication { /** * Entry point for application * @param args Command line arguments (not used) */ public static void main(string[] args) { // Create a new instance of the application and make the currently // running thread the application's event dispatch thread. MyApp theapp = new MyApp(); theapp.entereventdispatcher(); } /** * Creates a new MyApp object */ public MyApp() { // Push a screen onto the UI stack for rendering. pushscreen(new MyScreen()); } } MyScreen.java: package mypackage; import net.rim.device.api.ui.container.mainscreen; /** * A class extending the MainScreen class, which provides default standard * behavior for BlackBerry GUI applications. */ public final class MyScreen extends MainScreen { /** * Creates a new MyScreen object */ public MyScreen() { // Set the displayed title of the screen settitle("mytitle"); } }
Aby skompilować projekt wybieramy z głównego menu Project -> Build Project. Teraz możemy załadować i przetestować naszą aplikację na symulatorze dołączonym do wtyczki BlackBerry JDE lub na fizycznym urządzeniu. Aby uruchomić projekt na symulatorze klikamy prawym przyciskiem na nasz projekt w Package Explorerze a następnie Run As -> BlackBerry Simulator: Po chwili pojawi się okno symulatora. Ładowanie zajmie trochę czasu, w zależności od zasobów naszego komputera.
Na symulatorze klikamy na All i znajdujemy ikonę naszej aplikacji. Uruchamiamy ją przez kliknięcie lub klawiszem Enter:
Jeżeli posiadamy urządzenie BlackBerry możemy załadować naszą aplikację bezpośrednio na nie. Podłączamy je najpierw za pomocą kabla USB do komputera a następnie po kliknięciu prawym przyciskiem myszy na Package Explorera BlackBerry -> Load Project(s) on Device: 4 Dokumentacja Wiemy już jak utworzyć nowy projekt, poruszać się po nim, a także testować go za pomocą symulatora lub urządzenia BlackBerry. Następnym krokiem będzie zapoznanie się z możliwościami urządzeń blackberry i napisanie własnej aplikacji. W tym celu pomocne będzie skorzystanie z dokumentacji, tutoriali i przykładowych aplikacji.
Dokumentację dla BlackBerry Java znajdziemy na stronie: https://developer.blackberry.com/java/documentation/ Przykładowe aplikacje znajdziemy na stronie: https://developer.blackberry.com/java/samples/
Natomiast Spis wszystkich klas, ich pól i metod: http://www.blackberry.com/developers/docs/7.1.0api/ 5 Aplikacje przykładowe BlackBerry w JDE Plugin for Eclipse Przykładowe aplikacje są bardzo pomocne kiedy mamy problem z wykorzystaniem i zrozumieniem poszczególnych klas w praktyczny sposób ukazują jak kod przekłada się na działanie. W BB JDE Plugin for Eclipse możemy pobrać wszystkie przykładowe programy z poziomu interfejsu tego środowiska. Klikamy na File -> Import:
W kolejnym kroku wybieramy z drzewa Import BlackBerry Samples Klikamy Next i w następnym oknie upewniamy się że wszystkie przykładowe aplikacje są zaznaczone (lub wybieramy te, które nas interesują). Klikamy Finish.
Środowisko zaimportuje teraz przykładowe aplikacje. Pojawią się one w Package Managerze. Przykładowe aplikacje możemy załadować na symulator lub urządzenie BlackBerry podobnie jak naszą poprzednią aplikację. 6 Najważniejsze informacje o API Blackberry API BlackBerry oferuje nam dostęp do najróżniejszych elementów i funkcji urządzenia, począwszy od obsługi czujników, np. żyroskopu, modułu GPS, przez obsługę ekranu, a kończyszszy na ustawieniu okna i elementów interfejsu graficznego. Niesposób objąć wszystkich elementów API w jednym tutorialu, ale zostanie w nim pokazane, jak utworzyć aplikację z obsługą ekranu dotykowego.
Na początek Tworzymy nową klasę, np. public class DisplayScreen extends FullScreen {...} Jak widzimy klasa ta dziedziczy po klasie FullScreen oznacza to, że nasza aplikacja będzie działać w trybie pełnoekranowym. Inna opcją jest dziedziczenie po klasie MainScreen wtedy zostanie utworzone na ekranie okno. W następnym kroku zajmiemy się konstruktorem naszej klasy do obsługi ekranu. Wygląda on następująco: public DisplayScreen(Data data) { //Allow the screen to detect swipe gestures InputSettings inputsettings = NavigationDeviceSettings.createEmptySet(); inputsettings.set(navigationdevicesettings.detect_swipe, 1); this.addinputsettings(inputsettings); //Allow to detect Pinch - this should be enabled InputSettings inputtouchsettings = TouchscreenSettings.createEmptySet(); inputtouchsettings.set(touchscreensettings.detect_pinch, 1); this.addinputsettings(inputtouchsettings); _displayheight = Display.getHeight(); _displaywidth = Display.getWidth(); }// end constructor W naszym konstruktorze powołujemy do życia nowy obiekt typu InputSettings jest to obiekt z ustawieniami dla naszego ekranu. Wykorzystamy go, aby móc odczytywać z naszego ekranu tzw. Gesty. Gest typu Swipe jest to po prostu przeciągnięcie palcem po ekranie. Gest typu Pinch wykrywa odległość pomiędzy przesuwającymi się dwoma palcami na ekranie. W naszym konstruktorze wykorzystaliśmy też metody klasy Display: getheight oraz getwidth. Służą one do pobrania rozmiaru ekranu w pikselach. Kolejną ważną metodą jest obsługa zdarzenia typu Touch. Wygląda ona następująco: public boolean touchevent(touchevent event) { int eventid = event.getevent(); switch (eventid) { case TouchEvent.UP: case TouchEvent.MOVE: case TouchEvent.DOWN: case TouchEvent.GESTURE: TouchGesture gesture = event.getgesture(); int gestureid = gesture.getevent(); switch (gestureid) { case TouchGesture.SWIPE: case TouchGesture.NAVIGATION_SWIPE: case TouchGesture.PINCH_BEGIN: case TouchGesture.PINCH_END:
case TouchGesture.PINCH_UPDATE: case TouchGesture.TAP: case TouchGesture.HOVER: case TouchGesture.DOUBLE_TAP: default: } case TouchEvent.CANCEL: default: } return super.touchevent(event); }// end touchevent Obsługa ekranu polega na zdefiniowaniu poszczególnych reakcji na dany rodzaj interakcji/gestu. Z obiektu typu TouchEvent, przekazywanego jako parametr do metody touchevent(), odczytujemy rodzaj interakcji (metoda getevent()). Następnie za pomocą instrukcji warunkowej switch (oczywiście możemy zastosować też serię instrukcji if) obsługujemy poszczególne rodzaje zdarzeń. Podstawowe to UP uniesienie palca, DOWN dotknięcie ekranu, MOVE przesunięcie palcem po ekranie oraz GESTURE odpowiada ze wykrycie gestu. W tym miejscu zagnieżdżona jest kolejna instrukcja switch. Tym razem w kolejnych jej krokach definiujemy reakcje na poszczególne gesty m. in. TAP - stuknięcie, DOUBLE_TAP podwójne stuknięcie, SWIPE przeciągnięcie palcem po ekranie, PINCH odległość między dwoma palcami, itp. Przy pisaniu kodu obsługi poszczególnych zdarzeń przydadzą się nam metody służące do odczytu pozycji palca na ekranie: event.getx(1) event.gety(1) W parametrze funkcji możemy podać, o który palec nam chodzi 1 lub 2 (typ int) Do odczytu odległości między palcami służy metaoda: gesture.getpinchmagnitude() Kolejną metodą naszej klasy jest funkcja paint. Służy ona do rysowania obiektów na ekranie. Jej metody wyglądają podobnie jak przy innych API do rysowania. Jej deklaracja wygląda następująco: public void paint(graphics g) Teraz pozostaje już tylko zabawa w rysowanie. Niektóre użyteczne metody: g.setcolor(color.lightgray); g.fillrect(0, 0, getwidth(), getheight()); g.drawtext(this.getgesturetext(), 10, 300); fillarc(int x, int y, int width, int height, int startangle, int arcangle)
Wszystkie metody do rysowania można znaleźć w dokumentacji, na stronie: http://www.blackberry.com/developers/docs/4.1api/net/rim/device/api/ui/graphics.html Pozostaje nam jedynie powołać do życia obiekt Naszej klasy DisplayScreen w metodzie main: public static void main(string[] args) { DisplayScreen testscreen = new DisplayScreen(); testscreen.entereventdispatcher(); } Wywołujemy w niej metodę entereventdispatcher(), która będzie "nasłuchiwać", czy miało miejsce jakieś zdarzenie, np. stuknięcie palcem czy przesunięcie po ekranie.