2010.08_Java na BlackBerry _[Java].pdf
(
1114 KB
)
Pobierz
441667526 UNPDF
PROGRAMOWANIE JAVA
Java na BlackBerry
Podstawy pisania aplikacji
Artykuł przedstawia podstawy programowania aplikacji
w języku Java pod system BlackBerry. W podstawowym
zakresie omówione zostały cztery tematy: ogólne sposoby
tworzenia aplikacji, budowanie interfejsu użytkownika,
programowanie menu telefonu oraz zagadnienie utrwalania
danych.
Dowiesz się:
• Jakie są sposoby tworzenia aplikacji w języku Java na telefony
BlackBerry;
• Jak tworzyć komponenty interfejsu użytkownika i rozmiesz-
czać je na ekranie;
• Jak dodawać elementy do Menu telefonu;
• Jak zapisywać i odczytywać dane.
Powinieneś wiedzieć:
• Podstawowa znajomość języka Java;
• Znajomość Eclipse IDE;
• Znajomość standardu J2Me może być pomocna.
zaliczanych do segmentu tzw.
smartphone'ów
.
Jest to produkt kanadyjskiej firmy Research In
Motion produkowany już od 11 lat. Cechą charaktery-
styczną urządzeń BlackBerry jest łatwa obsługa wia-
domości e-mail. Stoi za tym technologia „push-mail”,
polegająca na współpracy terminali (telefony komór-
kowe) z serwerami pocztowymi BlackBerry. Współ-
praca ta przejawia się w „wypychaniu” emaili z serwe-
ra na terminale, co daje możliwość odbioru poczty po-
dobnie jak w przypadku odbioru sms'ów. Funkcjonal-
ność ta stała się znakiem firmowym BlackBerry i w du-
żym stopniu przyczyniła się do sukcesu rynkowego
w USA. W Europie technologia ta jest mniej popular-
na. W USA natomiast udziały firmy RiM w rynku smart-
phon'ów wynoszą ponad 50%. Drugie miejsce zajmu-
je dopiero iPhone.
bluetooth, mają szeroki wybór komponentów do two-
rzenia interfejsu użytkownika. Platforma BlackBer-
ry oferuje również trwałe źródła danych, w związku
z czym możliwy jest zapis danych. To wszystko spra-
wia, że bardzo proste staje się rozwijanie aplikacji wy-
posażonych w najbardziej zaawansowane funkcje i
odpowiadających najbardziej wyszukanym gustom
użytkowników.
Sposoby tworzenia aplikacji
Platforma BlackBerry umożliwia tworzenie aplikacji
w Javie na dwa sposoby. Pierwszy, o którym wspo-
mnieliśmy wyżej, polega na korzystaniu z wbudowa-
nego API i tworzeniu aplikacji uruchamianych bezpo-
średnio na platformie BlackBerry (na systemie opera-
cyjnym). Drugi sposób wiąże się z rozwojem aplikacji
webowych. Wykorzystuje się tu możliwości wbudowa-
nej przeglądarki internetowej. Sam proces tworzenia
aplikacji webowych przebiega identycznie jak w przy-
padku tworzenia aplikacji pod zwykłe przeglądarki
stron internetowych, czyli wykorzystuje się tu techno-
logie takie jak: html, css itd.
Twórcy oprogramowania nie mogą narzekać na ze-
staw narzędzi developerskich dostarczonych przez
firmę RiM. Zarówno proces budowania aplikacji bez-
pośrednio na platformę BlackBerry, jak i tzw. web de-
velopment mają swoje wsparcie w odpowiednich na-
BlackBerry i Java
BlackBerry ma długą historię współpracy z technolo-
gią Java. Od modelu 5810 (2002 rok) większość
co-
re’owych
aplikacji jest napisanych w tym języku. Pro-
ducent telefonów stworzył również API, przy pomo-
cy którego każdy programista może tworzyć aplikacje
w języku Java. Najnowsza wersja API (ver. 5.0) udo-
stępnia zaawansowany zestaw funkcjonalności. De-
veloperzy mogą programować obsługę m.in. GPS,
36
8/2010
B
lackBerry jest rodziną telefonów komórkowych
Java na BlackBerry
rzędziach. Są to wtyczki do popularnych środowisk
developerskich (IDE), np. do Eclipse'a, lub też cał-
kiem odrębne środowiska programistyczne stworzone
od podstaw przez producenta.
Istotnym udogodnieniem jest także liczna gama
emulatorów poszczególnych modeli telefonów Black-
Berry. Po instalacji Java Development Environment
(JDE) w którejkolwiek wersji, instalowane są domyśl-
ne emulatory. Użytkownik może jednak ściągnąć i za-
instalować emulator praktycznie każdego dostępne-
go na rynku telefonu BlackBerry. Trzeba jednak przy-
znać, że emulatory nowszych modeli działają dość
wolno, stąd też do developmentu wygodne jest korzy-
stanie ze starszych modeli.
W przeciwieństwie do np. platformy Android jest
możliwe jedynie programowalne deiniowanie UI, de-
klaratywne (ustawianie komponentów UI w np. pli-
kach
xml
) nie jest obsługiwane. Jest to z pewno-
ścią pewna luka w API. Pozycjonowanie elementów
UI w odseparowanych plikach jest rozwijającym się
trendem w programowaniu interfejsów użytkownika.
Tworzenie GUI przebiega więc podobnie jak w przy-
padku programowania z użyciem biblioteki Swing
z podstawowego pakietu Javy (J2SE). Klasa każde-
go komponentu jest tworzona „ręcznie” przez progra-
mistę, zwykle w konstruktorach lub blokach statycz-
nych.
BlackBerry JDE
W artykule zajmiemy się tylko pierwszym sposobem
tworzenia aplikacji. Będziemy korzystać z wtyczki do
środowiska Eclipse (BlackBerry Java Plug-in for Eclip-
se v1.1) oraz z Java Development Environment w wer-
sji 4.5 (JDE 4.5). Wskazanie wszystkich elementów
potrzebnych do konfiguracji całego środowiska develo-
perskiego BlackBerry znajduje się w ramce „W sieci”.
Listing 1.
Główna klasa przykładowej aplikacji
public
class
Notepad
extends
UiApplication
{
public
Notepad
()
{
pushScreen
(
new
UICreator
()
.
createMainScreen
()
)
;
}
public
static
void
main
(
String
[]
args
)
{
Notepad
notepad
=
new
Notepad
()
;
notepad
.
enterEventDispatcher
()
;
}
}
Prosta aplikacja
Zakładamy, że czytelnik posiada poprawnie zainstalo-
wane JDE, plugin do Eclipse'a oraz emulator. Zajmie-
my się więc utworzeniem prostej aplikacji będącej for-
mą notatnika. Z racji tego, że artykuł obejmuje pod-
stawy programowania na platformie BlackBerry, w ilu-
strującej go aplikacji zastosowaliśmy dość stare JDE
w wersji 4.5. Jednakże zawarte tam API w pełni za-
spokaja potrzeby tak prostego programu.
W procesie tworzenia aplikacji poruszymy trzy za-
gadnienia. Pierwszym będzie programowanie pro-
stego interfejsu użytkownika (UI), drugim – zaimple-
mentowanie jednej funkcji w „Menu” telefonu, trzecim
– oprogramowanie zapisu danych wprowadzonych
przez użytkownika do trwałego źródła.
Na platformie BlackBerry każda klasa generują-
ca interfejs użytkownika musi dziedziczyć z klasy
UIApplication
. Klasa ta zawiera metody powołujące
do życia m.in. układ wszystkich elementów UI. Taką
metodą jest
pushScreen()
. W naszej aplikacji główną
klasą jest
Notepad
(Listing 1).
Jak widać, punktem startowym aplikacji jest meto-
da
main()
, w której tworzony jest obiekt klasy
Notepad
i tym samym inicjalizowana jest cała aplikacja.
Listing 2.
Metoda
createMainScreen() tworząca układ i
wygląd głównego ekranu aplikacji
public
MainScreen
createMainScreen
()
{
initMainScreenAndComponents
()
;
addComponentsToMainLayoutManager
()
;
addLayoutManagerToMainScreen
()
;
return
mainScreen
;
}
Listing 3.
Inicjalizacja VerticalFieldManagera oraz dodawanie
do niego komponentów
private
void
addComponentsToMainLayoutManager
()
{
mainVfm
=
new
VerticalFieldManager
(
Manager
.
VERTI
CAL_SCROLL
)
;
mainVfm
.
setMargin
(
10
,
0
,
0
,
10
)
;
Tworzenie interfejsu użytkownika
BlackBerry API udostępnia szeroki wachlarz kompo-
nentów służących do budowania interfejsu użytkowni-
ka. Klasy komponentów znajdują się w pakiecie
mainVfm
.
add
(
notesText
)
;
mainVfm
.
add
(
saveButton
)
;
mainVfm
.
add
(
vfm
)
;
}
net.rim.device.api.ui.
www.sdjournal.org
37
PROGRAMOWANIE JAVA
W naszej przykładowej aplikacji za zarządzanie
komponentami UI odpowiada klasa
UICreator
. Kla-
sa ta posiada pola będące referencjami do poszcze-
gólnych komponentów oraz jedną metodę publiczną
createMainScreen()
służącą do stworzenia głównego
ekranu aplikacji. Metoda ta przedstawiona jest na Li-
stingu 2.
Z klasy
UICreator
korzysta główna klasa aplikacji
Notepad
.
Jak każde API dostarczające komponentów do two-
rzenia UI, platforma BlackBerry zawiera komponen-
ty do rozmieszczania innych komponentów na ekra-
nie. Są to tzw. managery (
layout managers
) i w naszej
aplikacji wykorzystamy dwa ich podstawowe rodzaje.
Będzie to
HorizontalFieldManager
(jak sama nazwa
wskazuje, rozmieszcza elementy poziomo) i
Verti-
calFieldManager
(rozmieszcza pionowo). Spójrzmy na
fragment kodu, gdzie wykorzystane jest użycie tych
managerów (Listing 3).
Listing 3 pokazuje inicjalizację głównego manage-
ra layoutu zawierającego wszystkie pozostałe kompo-
nenty graficznego interfejsu użytkownika.
Użyta stała
Manager.VERTICAL_SCROLL
powoduje po-
jawienie się paska przewijania w sytuacji, gdy wy-
świetlane dane nie mieszczą się na ekranie.
Ustawiony margines
mainVfm.setMargin(10, 0, 0,
10);
oznacza przesunięcie całej zawartości ekranu
w pionie i poziomie o 10 pikseli, tak aby komponenty
UI nie były wyświetlane tuż przy krawędzi ekranu.
Lista dostępnych komponentów interfejsu użytkow-
nika jest podobna do tej, którą oferują konkurencyjne
platformy (Android OS). Znajdziemy tam: komponen-
ty odpowiedzialne za przyciski (buttony), pola teksto-
we, listy rozwijane, tzw. radio buttony, check-boxy i in-
ne. Na Listingu 4 pokazujemy inicjalizację większości
komponentów użytych w aplikacji.
Z listingu tego widać podobieństwa do biblioteki
Swing. Akcje wykonywane po naciśnięciu komponentu
ButtonField
(przycisk) obsługują listenery. W tym kon-
kretnym przypadku jest to
FieldChangeListener
.
Występujący w prawie każdej bibliotece GUI ele-
ment
Dialog
odpowiedzialny jest za wyświetlenie okna
dialogowego z odpowiednim komunikatem. Jego rola
na platformie BlackBerry jest taka sama.
Z Listingu 3 i Listingu 4 wyłania się powoli cało-
kształt prostego interfejsu użytkownika. Głównym kon-
Listing 4.
Inicjalizacja VerticalFieldManagera oraz dodawanie
do niego komponentów
private
void
initMainScreenAndComponents
()
{
mainScreen
=
new
MainScreen
()
;
mainScreen
.
setTitle
(
new
LabelField
(
"Notatnik"
))
;
notesText
=
new
EditField
(
"Notatka: "
,
""
)
;
saveButton
=
new
ButtonField
(
"Zapisz"
)
;
saveButton
.
setChangeListener
(
new
FieldChangeListener
()
{
public
void
ieldChanged
(
Field
ield
,
int
context
)
{
NotesInfo
notesInfo
=
new
NotesInfo
()
;
notesInfo
.
setElement
(
notesText
.
getText
())
;
pm
.
persist
(
notesInfo
)
;
Dialog
.
inform
(
"Zapisano!"
)
;
notesText
.
setText
(
null
)
;
}
})
;
vfm
=
new
VerticalFieldManager
()
;
}
Rysunek 1.
Ogólny widok interfejsu użytkownika
38
8/2010
Java na BlackBerry
tenerem jest
VerticalFieldManager
, który posiada trzy
elementy: pole tekstowe z opisem, button do zapisu
notatki oraz zagnieżdżony
VerticalFieldManager
słu-
żący do wyświetlenia w formie pionowej listy zacią-
gniętych ze źródła danych notatek. Efekt tych usta-
wień widać na Rysunku 1.
sto wiąże się z koniecznością zaprogramowania tzw.
menu telefonu, mającego najczęściej postać listy roz-
wijanej pokazującej się z boku ekranu. Również i plat-
forma BlackBerry posiada API pozwalające na stwo-
rzenie menu. W naszej aplikacji za obsługę menu
odpowiada klasa
UICreator
. Posiada ona pole typu
MainItem
odpowiadające za stworzenie jednego ele-
mentu w menu telefonu. Na Listingu 5 jest przedsta-
wiony kod tej klasy.
Możemy tam znaleźć kilka interesujących fragmen-
tów kodu. Kod w metodzie
run()
wykonuje się po wy-
braniu pozycji w menu.
Zmienna
pm
jest referencją do
PersistentManagera
,
klasy omówionej dokładnie w dalszej części arty-
kułu, a służącej do zarządzania trwałością obiek-
tów (notatek). Widzimy tam zaciągnięcie ze źró-
dła danych wszystkich dotychczas zapisanych nota-
tek, wykonanie iteracji, w końcu wyświetlenie nota-
tek na ekranie po uprzednim umiejscowieniu ich w
Menu telefonu
Programowanie aplikacji na smartphony bardzo czę-
Listing 5.
Komponent MenuItem tworzący element w menu:
„Pobierz Notatki”
private
MenuItem
getItem
=
new
MenuItem
(
"Pobierz
notatki"
,
110
,
11
)
{
public
void
run
()
{
Vector
data
=
pm
.
load
()
;
boolean
dataWasLoaded
=
!
data
.
isEmpty
()
;
if
(
dataWasLoaded
)
{
displayNotes
(
data
)
;
}
}
private
void
displayNotes
(
Vector
data
)
{
Enumeration
enumeration
=
data
.
elements
()
;
vfm
.
deleteAll
()
;
index
=
1
;
while
(
enumeration
.
hasMoreElements
())
{
putNotesToLayoutManager
(
enumeration
)
;
}
notesText
.
setText
(
null
)
;
}
private
void
putNotesToLayoutManager
(
Enumeratio
n
enumeration
)
{
NotesInfo
nf
=
(
NotesInfo
)
enumeration
.
next
Element
()
;
hfm
=
new
HorizontalFieldManager
()
;
hfm
.
setMargin
(
10
,
0
,
0
,
0
)
;
hfm
.
add
(
new
LabelField
(
index
++
+
"."
))
;
hfm
.
add
(
new
LabelField
(
nf
.
getElement
()))
;
vfm
.
add
(
hfm
)
;
}
}
;
}
Rysunek 2.
Menu telefonu z opcją „Pobierz notatki”
www.sdjournal.org
39
PROGRAMOWANIE JAVA
HorizontalFieldManager
. Te zadania oczywiście reali-
zują dwie prywatne funkcje
displayNotes(Vector data)
i
putNotesToLayoutManager(Enumeration enumeration)
.
Na Rysunku 2 jest przedstawiony widok aplikacji
z rozwiniętym menu telefonu.
Listing 6.
Klasa jedynej encji w aplikacji - NotesInfo
public
inal
class
NotesInfo
implements
Persistable
{
public
static
inal
int
ID
=
0
;
public
static
inal
int
NAME
=
1
;
private
Vector
elements
;
Zapis danych
Jedną z podstawowych funkcji praktycznie każdej
aplikacji jest przechowywanie danych, na których
aplikacja działa. BlackBerry umożliwia zapis danych
w systemie i odtwarzanie ich zarówno po ponownym
uruchomieniu aplikacji, jak i po restarcie całego sys-
temu operacyjnego (restart telefonu). Od wersji JDE
5.0 istnieje możliwość zapisu danych w bazie danych
SQLite. Ten niewielki silnik bazodanowy znany jest
także m.in. z systemu Android i świetnie sprawdza się
w zastosowaniach mobilnych.
Na platformie BlackBerry, każdy obiekt, któ-
ry chcemy zapisać, musi implementować interfejs
Persistable
. W naszym projekcie klasą encji jest
NotesInfo
przechowująca informację o zapisanym
tekście notatki. Na Listingu 6, z racji jego niewielkiej
objętości, umieściliśmy kod całej klasy.
Oczywiście klasa ta opakowuje kilka funkcjonalno-
ści. Na przykład zmienna typu
Vector
może służyć
do przechowywania kilku właściwości danej notatki.
W naszym przykładzie korzystamy jednak tylko z za-
pisu jednej właściwości – samego tekstu notatki.
Samą logiką zapisu zajmuje się stworzona przez
nas klasa
PersistentManager
. Zawiera ona od-
wołanie do dostarczonej przez BlackBerry klasy
PersistentObject
. Stanowi ona faktyczne opakowa-
nie dostępu do źródła danych i interfejs komunika-
cji z nim. Sam obiekt uzyskuje się, korzystając z klas
API:
PersistentObject store = PersistentStore.getP
ersistentObject(0xdec6a67096f133cL);
W metodzie
getPersistentObject(long key)
użyliśmy
dedykowanego klucza identyfikującego. Każdy obiekt
zapisywany do źródła danych (czyli w naszym przypad-
ku –
NotesInfo
) musi mieć unikalny klucz jednoznacz-
nie identyfikujący go w źródle danych i pozwalający na
wykonywanie na nim akcji zapisu lub pobrania.
Bazując na tych założeniach, utworzyliśmy dwie me-
tody w
PersistentManager
– jedną do zapisu notatki,
drugą do jej odczytu. Pokazane jest to na Listingu 7.
public
NotesInfo
()
{
elements
=
new
Vector
(
1
)
;
for
(
int
i
=
0
;
i
<
elements
.
capacity
()
;
++
i
)
{
elements
.
addElement
(
new
String
(
""
))
;
}
}
public
String
getElement
()
{
return
(
String
)
elements
.
elementAt
(
NAME
)
;
}
public
void
setElement
(
String
value
)
{
elements
.
addElement
(
value
)
;
}
}
Listing 7.
Metody do zapisu i odczytu notatek ze źródła
danych
public
void
persist
(
NotesInfo
notesInfo
)
{
data
.
addElement
(
notesInfo
)
;
synchronized
(
store
)
{
store
.
setContents
(
data
)
;
store
.
commit
()
;
}
}
public
Vector
load
()
{
synchronized
(
store
)
{
data
=
(
Vector
)
store
.
getContents
()
;
}
return
data
;
}
W Sieci
• Eclipse IDE do ściągnięcia:
http://www.eclipse.org/downloads/
• BlackBerry Plugin do Eclipse'a:
http://na.blackberry.com/eng/developers/javaappdev/devtools.jsp
• BlackBerry JDE – różne wersje:
http://na.blackberry.com/eng/developers/javaappdev/javadevenv.jsp
• Dostępne emulatory:
http://na.blackberry.com/eng/developers/resources/simulators.jsp
• Opis instalacji i koniguracji środowiska developerskiego:
http://na.blackberry.com/developers/resources/A1_Setting_up_neces-
sary_tools_v5.0.pdf
• Dokumentacja BlackBerry API ver. 4.5 (JavaDoc):
http://www.blackberry.com/developers/docs/4.5.0api/index.html
40
8/2010
Plik z chomika:
Kapy97
Inne pliki z tego folderu:
2006.12_Java 6.0 – nowości w Mustangu_[Java].pdf
(793 KB)
2006.12_Integracja platform przenośnych w oparciu o HTTP_[Java].pdf
(732 KB)
2006.10_Edytor tekstowy w Javie _[Java].pdf
(936 KB)
2006.10_Programowanie urządzeń przenośnych w Javie_[Java].pdf
(675 KB)
2006.08_Java Modeling Language_[Java].pdf
(636 KB)
Inne foldery tego chomika:
Algorytmy
Antyhaking
Aplikacje Biznesowe
Aspekty
Bazy Danych
Zgłoś jeśli
naruszono regulamin