Ộ Ộ
Ậ Ậ
Ế Ế
Ị Ị
L P TRÌNH J2ME CHO THI T B DI Đ NG L P TRÌNH J2ME CHO THI T B DI Đ NG
PH N 1ẦPH N 1Ầ
ậ
H n ( BKF)
ộ
Hà n i, 17/06/2009
ự ự
ứ ứ
ướ ướ H ng t H ng t ơ ở ề ệ ố
ế
nghiên c u (1) nghiên c u (1) 1. C s v h th ng thông tin di đ ng
ộ (liên quan đ n IT)
M ng GSM (Global System for Mobile Communication H th ng thông tin di
ệ ố
ạ ộ ầ đ ng toàn c u)
Ki n trúc m ng GSM và các th h c a nó
ế ệ ủ ế ạ
Khía c nh liên k t sóng vô tuy n (radio)
ế ế ạ
ạ ạ Khía c nh m ng
ệ 2. Hai công ngh IEEE802.11 và Bluetooth
Khái ni m IEEE802.11 ( m ng c c b ) và Bluetooth
Các mô hình OSI
Bluetooth và 802.11 dùng các scenario
Bluetooth Multiplayer Games Framework (BluetoothMGF)
ụ ộ ở ạ ệ
2
ề ấ Các v n đ khác
ướ ướ
ự ự
ứ ứ
nghiên c u (2) nghiên c u (2)
H ng t H ng t ứ ứ
ụ 3. Giao th c ng d ng không dây (Wireless Application Protocol – WAP)
Gi
ớ ứ ệ i thi u giao th c WAP
C ng WAP
WML (Wireless Markup Language)/ WML script
Web Service
ổ
4. VoiceXML
ẩ ả 5. Các s n ph m
T mình thi
ự ế ế ự t k và xây d ng
Nghiên c u các s n ph m s n có sau đó phát tri n lên
ứ ể ả ẩ ẵ
3
ự ọ 6. Các l a ch n khác
ớ ớ
ệ ề ệ ề
i thi u v J2ME i thi u v J2ME
ể ừ ế ượ
c phát tri n t ả ế ị
ươ ọ ớ c g i v i tên m i là Java 2 Micro Edition, hay vi ọ ế ắ t t ấ ế ị ớ
1.Gi 1.Gi ử ị L ch s ki n trúc Java Card, Embeded Java và Personal Java J2ME đ ờ ủ ế ế ự ủ c a phiên b n Java 1.1. Đ n s ra đ i c a Java 2 thì Sun quy t đ nh thay th ớ t là Personal Java và đ ỏ ề ả J2ME. Đúng v i tên g i, J2ME là n n t ng cho các thi t b có tính ch t nh , g n.ọ
ọ
c thi
ị ườ ế ế ế t k dành cho các máy v i tài nguyên b nh h n ch . ượ ở ộ ớ ề ủ ạ ớ ạ ế ị ư t b nh :
ộ c m r ng ra cho nhi u ch ng lo i thi ư
ạ ệ ạ ộ
ế ị ợ
Lý do ch n J2ME ầ ượ Java ban đ u đ ủ Th tr ng c a J2ME đ • Các lo i th cá nhân nh Java Card ẻ • Máy đi n tho i di đ ng • Máy PDA (Personal Digital Assistant thi • Các h p đi u khi n dành cho tivi, thi ể
4
ề ộ ụ t b tr giúp cá nhân) i trí gia d ng … ế ị ả t b gi
ủ ủ
ế ế
(1) (1)
Ki n trúc c a J2ME Ki n trúc c a J2ME
ộ
ầ
ấ
ề
ề
ng ph n m m cho
ặ
ị ộ
ạ ở ậ
ặ ả ị là đ c t ợ
ể ể ể
ế ị ư
ắ
ả
ặ ả
ả ị
ấ ể
ậ
ự t b nh Samsung, Nokia …b t bu c ph i th c thi ậ ng l p trình
ượ ạ
ụ
ộ
ộ ườ do Sun qui đ nh đ các l p trình viên có th d a vào môi tr ứ ư
ế ị
ệ
ấ
ườ Đ nh nghĩa v Configuration (C u hình): đ nh nghĩa m t môi tr ế ị ượ ụ ư t b đ m t dòng các thi c phân lo i b i t p h p các đ c tính, ví d nh : • Ki u và s l ố ượ ộ ớ ng b nh • Ki u và t c đ b vi x lý ử ố ộ ộ • Ki u m ng k t n i ế ố ạ ặ ả nên các nhà s n xu t thi Do đây là đ c t ầ ủ đ y đ các đ c t ự ấ ấ nh t quán và thông qua s nh t quán này, các ng d ng đ ạ ể ậ l p thi
ể ự ể c t o ra có th mang tính đ c t b cao nh t có th . Hi n nay Sun đã đ a ra 2 d ng Configuration: 5
ề ả ầ Các thành ph n trong n n t ng J2ME
ế ế
ủ ủ Ki n trúc c a J2ME (2) Ki n trúc c a J2ME (2)
ế ị ế ố
ế
t b k t n i gi ế ị
ị ườ
ấ
ượ c thi t ng là máy
• CLDC (Connected Limited Device ConfigurationC u hình thi ng các thi ớ
ớ ạ đ i h n): ườ t b này thông th ế
ớ ạ
ộ
ườ ử ụ
ạ
ớ
ộ i s d ng mua và t
ả ề i v
ụ ư
ụ
ấ ắ ế ể ế ị ấ k đ nh m vào th tr t b c p th p (lowend), các thi iạ di đ ng và PDA v i kho ng 512 KB b nh . Vì tài nguyên b nh h n ch nên CLDC ớ ệ ộ ả đi n tho ư ượ ắ c g n v i Java không dây (Java Wireless ), d ng nh cho phép ng đ ứ các ng d ng Java, ví d nh là Midlet.
ế
ơ
ạ
ế ị
ắ ệ ố
ữ
ơ
ả
t b k t n i): ư ớ ơ ư
ấ t b có tính năng m nh h n dòng thi ế ị ẩ
• CDC Connected Device Configuration (C u hình thi ượ ư ế ị ế ố CDC đ c đ a ra nh m đ n ơ ế ẫ ộ t b thu c CLDC nh ng v n y u h n các h th ng ề ườ ộ ng là trên 2Mb) t b này có nhi u b nh h n (thông th ấ ể ể ế
ệ
ạ
ụ
ị
ề
ể ổ ợ
ằ
ừ
ệ
ề
ữ
t. C 2 Configuration đ u có nh ng profile liên quan và t ể
ả ẫ
ế
ộ ậ
ỗ ụ
ể
ể
ợ
ữ ậ ng ta không th chuy n m t ng d ng Java vi
ạ
ộ
ộ
ấ ộ ứ ớ ỗ ợ
ể ấ
ạ ế
ụ
ạ
ẽ ổ
ầ
i dùng … vào CLDC. Profile này đ
c thi
ườ ớ ặ
ượ ế
ệ ộ
ị ạ
ể
ể
ắ
ứ ơ
ẽ
ệ
ấ
ả
ộ
ạ ả ự
ườ ổ ế
ơ ấ ở
ế
ể
ộ
ế ị các thi ể ử ụ máy đ bàn s d ng J2SE. Nh ng thi ạ ộ ử và có b x lý m nh h n. Các s n ph m này có th k đ n nh các máy PDA c p cao, đi n ế ị tho i web, các thi t b gia d ng trong gia đình … Đ nh nghĩa v Profile: ở ộ Profile m r ng Configuration b ng cách thêm vào các class đ b tr các ừ ế ị tính năng cho t ng thi t b chuyên bi ị ể nh ng profile này có th dùng các class l n nhau. Đ n đây ta có th nh n th y do m i profile đ nh ườ ế nghĩa m t t p h p các class khác nhau, nên th t ỗ ợ ộ cho m t profile này và ch y trên m t máy h tr m t profile khác. Cũng v i lý do đó, b n không ộ ứ th l y m t ng d ng vi t trên J2SE hay J2EE và ch y trên các máy h tr J2ME. Sau đây là các profile tiêu bi u:ể ư ỗ ợ ế Mobile Information Device Profile (MIDP): profile này s b sung các tính năng nh h tr k t ỗ ợ ế ế ủ ố t k ch n i, các thành ph n h tr giao di n ng ượ ọ ệ ế ng ch a y u đ nh m vào đi n th ai di đ ng v i đ c tính là màn hình hi n th h n ch , dung l ạ có h n. Do đó MIDP s cung c p m t giao di n ng i dùng đ n gi n và các tính năng m ng đ n ứ ơ ả gi n d a trên HTTP. Có th nói MIDP là profile n i ti ng nh t b i vì nó là ki n th c c b n cho ậ l p trình Java trên các máy di đ ng (Wireless Java)
6
ớ ớ
ệ ệ
i thi u MIDP (1) i thi u MIDP (1)
ị
Gi Gi Đ nh nghĩa:
ượ ị
ế ị ầ
ơ ả
ộ ế
ầ ị
ấ
ộ
c đ nh nghĩa dành riêng cho các thi ứ ạ
ấ
ổ ế ả
ượ
ư
ế
t, MIDP đ
c thi
t k cho
ệ ọ ậ ấ
ấ
ấ
ộ
Đây là Profile đ t b di đ ng và là thành ph n chính trong J2ME. MIDP cung c p các ch c năng c b n cho h u h t các dòng thiêt b di đ ng ư ộ ph bi n nh t nh các máy đi n tho i di đ ng và các máy PDA. Tuy nhiên MIDP không ế ế ầ ph i là cây đũa th n cho m i l p trình viên vì nh chúng ta đã bi các máy di đ ng có c u hình r t th p.
ự
ứ
ữ
Nh ng ch c năng MIDP không th c hi n đ
c:
ộ
ẩ
ấ
ề
ỏ ấ
ộ
ế ị
ỗ ợ
ầ ớ
ướ
ư
ệ
ẹ
ọ
ị
c khi nó b xóa
ậ
ộ ạ ớ ỗ ợ ừ c đ y v phía các l p trình viên.
khóa finalize() nh trong J2SE: Vi c “d n d p“ tài nguyên tr ề ỗ ợ
ắ ỗ
i.
ỗ ợ ạ ầ ớ
ư ệ
c trong MIDP.
ể ử ụ ể
ả
ạ
ự ế
ườ
ỗ ợ là các thi
ư ụ ế ị t b J2ME không có h tr các thi ề
ng nh ọ
ỗ ợ ạ
ọ ữ ệ
ả ươ
ươ
ứ
ấ
ọ
ượ ạ ữ ế ị ư t b l u tr thông th ấ ng đ
t máy, Sun đã cung c p m t ch c năng khác t ấ
ế ị
ư
ữ
ể
ả
ệ ượ • Phép tính d u ph y đ ng (floating point): Phép tính này đòi h i r t nhi u tài nguyên CPU và ph n l n các CPU cho các thi t b di đ ng không h tr phép tính này, do đó MIDP cũng không có. • B n p l p (Class Loader). • H tr t ượ ẩ đ • Không h tr JNI ế • H tr h n ch thao tác b t l • Ph n l n các th vi n API cho Swing và AWT không th s d ng đ ư • Không h tr các tính năng qu n lý file và th m c: Đây có th làm b n ng c nhiên nh ng ư ổ ứ c ng th c t ỗ v.v. Tuy nhiên, đi u đó không có nghĩa là b n ph i m t đi m i d li u quan tr ng m i khi ộ ắ t system (RMS) đ cung c p kh năng l u tr cho các thi
ng g i là Record Management t b này.
7
ớ ớ
ệ ệ
Gi Gi ữ
i thi u MIDP (2) i thi u MIDP (2) ứ
Nh ng ch c năng MIDP cung c p :
ấ ớ ư ớ • Các l p và ki u d li u: các l p trong gói java.util nh Stack, Vector, Hastable
ể ữ ệ cũng nh Enumeration.
ẽ ỗ ợ ộ ố ấ • H tr đ i t
ng Display: m t ch ố ượ ươ ng trình MIDP s h tr duy nh t m t đ i ệ ộ ả ể ệ ng Display,đ i t ị ữ ệ ng qu n lý vi c hi n th d li u trên màn hình đi n
ườ ệ i dùng.
ư ỗ ợ ố ượ ượ t tho i.ạ ỗ ợ ỗ ợ
ệ ư ấ • H tr Form và các giao di n ng • H tr Timer và Alert • Cung c p tính năng Record Management System (RMS) cho vi c l u tr d ữ ữ
li uệ
ạ ớ ượ c
ả ế ổ ậ ớ ả ớ
ấ ấ ả
ệ ỗ ợ ậ ơ ứ
8
• Tháng 11 năm 2003 Sun đã tung ra MIDP 2.0 v i hàng lo t tính năng khác đ ữ cung c p thêm so v i b n 1.0. Nh ng c i ti n n i b t so v i MIDP 1.0 • Nâng c p các tính năng b o m t nh : ư ạ ệ ế ố ữ ể ộ Download qua m ng an toàn h n qua vi c h tr giao th c HTTPS. Ki m soát vi c k t n i gi a máy di đ ng và server
ớ ớ
ệ ệ
Gi Gi
i thi u MIDP (3) i thi u MIDP (3)
ấ ủ ỗ ợ ấ
ẫ ỉ ỗ ợ ộ ậ ủ
• Thêm các API h tr Multimedia.C i ti n h p d n nh t c a MIDP 2.0 là t p ậ ả ế các API media. Các API này là m t t p con ch h tr âm thanh c a Mobile Media API (MMAPI).
ề ả ế ở ộ ượ ư • M r ng các tính năng c a Form. Nhi u c i ti n đã đ ủ c đ a vào API
ổ ớ ư ấ
javax.microedition.lcdui trong MIDP 2.0, nh ng các thay đ i l n nh t (ngoài API cho game) là trong Form và Item.
ả ể ớ ộ ả ự ỗ ợ ậ t code đ qu n lý các hành đ ng c a nhân
ẽ ư ả
ị ỗ ư ệ ậ ẩ ướ ượ ưở ợ V i MIDP 1.0 thì ủ ủ ả c file c a s n ấ ừ i nh t t ng l
ỉ
ậ ồ ọ ấ
ưở ợ ằ
ụ ư ậ ộ ườ
ế ằ ớ ộ
ấ ượ c cung c p các tính năng nh qu n lý các thao tác bàn
ữ ấ ẫ ộ m t trong nh ng c i ti n h p d n cho các nhà phát
ỗ ợ ể ả ể ả ế ướ ạ ệ ả
i d ng các m ng s nguyên, cho ộ ả ự ế • H tr các l p trình viên Game b ng cách tung ra Game API. ằ ậ ế mình vi các l p trình viên ph i t ệ ồ ọ v t cũng nh qu n lý đ h a. Vi c này s làm tăng kích th ạ ệ ấ ph m cũng nh vi c xu t hi n các đo n mã b l i. Đ c h Game API trong MIDP 2.0 không ch là các l p trình viên Game mà còn là các ơ ả ủ ầ ử ụ ậ l p trình viên c n s d ng các tính năng đ h a cao c p. Ý t ng c b n c a ớ ộ ả ị ệ đ nh r ng m t màn hình game là t p h p các layer (l p). Game API là vi c gi ề ộ Ví d nh : trong m t game đua xe thì màn hình n n là m t layer, con đ ng là ư c xem nh đang n m trên layer khác. V i Game API m t layer và chi c xe đ ư ả ượ ể nhà phát tri n còn đ phím. H tr ki u nh RGB: ể ố ễ tri n MIDP là vi c bi u di n hình nh d 9 ả ớ ữ ệ phép MIDlet thao tác v i d li u hình nh m t cách tr c ti p.
ườ ườ ườ
ể ả ợ ể ệ
Môi tr Môi tr ộ M t môi tr
ể ể ng phát tri n J2ME (1) ng phát tri n J2ME (1) ằ ng phát tri n tích h p (IDE) nh m đ c i thi n năng su t c a ằ
ấ ủ ợ ộ ậ ụ ậ
ườ ệ ấ ồ ọ i dùng đ h a (GUI)
M t IDE cho J2ME c n ph i cung c p các ti n ích sau:
ậ l p trình viên b ng cách cung c p m t t p các công c l p trình tích h p ộ thông qua m t giao di n ng ả ộ ệ ấ ầ
ả ả ố ồ
ạ ả ạ ồ
ầ
t trong class (nh tên
ế ệ ả
ươ
ệ
ư ng th c,..). Ngoài vi c b o v mã ngu n,
ứ ậ
ồ ướ ủ ậ
c c a các t p tin class, làm cho kích th
c c a t p tin
ẽ ạ ỏ ỳ ọ obfuscate (tu ch n): s lo i b các thông tin không c n thi ớ ế ụ ộ ủ c a các bi n c c b , các l p, ph ướ ủ ả obfuscate còn gi m kích th JAR cũng gi m đi…ả
ề
ể
preverify (ti n ki m tra)
ị • Qu n lý project Qu n lý các t p tin ngu n và các thông s MIDlet ậ • Trình so n th o So n th o mã ngu n và các tài nguyên ả • Build (Biên d ch)
ậ
ả ậ ự ộ ớ l p (emulation) Th c thi các MIDlet v i m t trình gi ả ậ l p
10
ỡ ố ỡ ố • Đóng gói (package) Đóng gói các MIDlet thành các t p tin JAR và JAD • Gi • G r i (debugger) G r i MIDlet
ườ ườ
Môi tr Môi tr
ể ể ng phát tri n J2ME (2) ng phát tri n J2ME (2) ổ ế
Các J2ME IDE ph bi n và n i ti ng sau:
ổ ế
Sun J2ME Wireless Toolkit 2.5 (WTK)
ụ
• WTK là m t b công c phát tri n Java J2ME (Java Development Kit JDK) cung c p
ả ậ
ụ ầ
ụ
ệ
ậ
l p, công c , tài li u và các ví d c n thi
ể ng gi
ấ ế ể t đ
ụ
ể
ộ ộ ườ cho các l p trình viên môi tr ứ phát tri n các ng d ng MIDP.
ả
ộ
ỏ
ỉ
• WTK không ph i là m t IDE hoàn ch nh, vì nó đã b các tính năng so n th o và g r i ỡ ố ấ
ượ
ư
ộ
ạ c xem là b t bu c ph i có trong m t IDE. Nh ng KToolbar, đ
ả ườ
ắ ộ
ấ
ả c cung c p ệ
ộ i thi u cung c p m t GUI dành cho vi c
ộ ể ố ng phát tri n t ụ
ứ
ị
ố ượ v n đ ể ộ trong b WTK là m t môi tr ự biên d ch, đóng gói và th c thi các ng d ng MIDP.
ộ ả ậ
ả ậ
ấ
ớ
• WTK 2.5 cũng cung c p các b gi
c c i ti n v i các tính năng gi
l p,
ủ
ế
l p đã đ ộ ơ ế ượ ộ ự
ệ
ượ ả ế ể ớ monitor và debug m i. Có m t c ch đ c thêm vào ti n trình build c a KToolbar đ ợ cho phép vi c tích h p và th c thi b obfuscate Java byte code khi đóng gói MIDlet suite.
11
IntelliJ IDEA 3089 ớ • Sun J2ME Wireless Toolkit 2.5 • Borland Jbuilder • NetBeans IDE • • Eclipse v i EclipseME plugin
ườ ườ
Môi tr Môi tr
ể ể ng phát tri n J2ME (3) ng phát tri n J2ME (3)
ỉ ả i J2SE
Cài đ t b J2SE vào máy tính, Cài đ t J2ME Wireless Toolkit,
ặ ộ ặ ị đ a ch t ị Đ a ch http://java.sun.com/j2se/ ỉ http://java.sun.com/j2me/download.html
ộ
ậ ư ụ ậ ớ JAR và tên c a th m c project m i), nh p tên
ủ ứ ụ
ứ ẽ
ư ụ ụ ấ ỳ ươ ể ạ ơ ả ạ ả ủ ng trình so n th o văn b n nào đ so n ể ng d ng. Có th dùng b t k ch
12
ươ Ch nọ "New Project..." đ t o m t project m i. ể ạ ớ Nh p tên project (tên c ủ ủ a file ủ c a MIDlet class (là main class c a ng d ng) Th m c : “C:\WTK25Beta2\apps\Vidu2\src”, đây s là n i ch a source c a ứ code. Ti n hành build và run ch ế ng trình
ườ ườ
ể ể ng phát tri n J2ME (4) ng phát tri n J2ME (4)
Môi tr Môi tr ấ
Nh n vào "Settings..." trên toolbar đ vào menu c u hình cho project.
ể ấ
ừ ế ớ ị ể Đ ng đ ý đ n tr ng "MIDletJarSize" (v i giá tr là "100" bytes), Chúng
ẽ ế ậ ườ ta s làm cho giá tr t ị ự ượ đ t l p đúng.
ủ ấ
ọ ổ ể c thi ử ổ Ch n ọ MIDlets tab trong c a s dialog c u hình c a porject. ả Ch nọ hàng duy nh t trong b ng ("MIDlet1") đ làm n i nó và ch n. Sau đó
ấ ấ nh n vào nút "Edit“.
Xoá tr
ườ ể ặ ế ậ ậ
Ch p nh n các thay đ i.
ấ ng "Icon" n u không có t p tin *.PNG đ đ t vào t p tin JAR. ậ ổ
ấ ả ậ t c t p tin *.class. ấ ả ậ t c t p tin *.class và preverify.
ậ
ể ẵ ế ậ ả
ư ể c trên, t p tin *.JAR và *.JAD k t qu đã có th s n sàng đ ng trình mô ph ng, hay đ a lên WWW site đ download. Tr ự c th c ng
ướ ươ ướ ủ ẽ ự ỏ ậ (1) Project > Clean: Xoá t (2) Build : Build t (3)Project > Package > Create Package: Sinh ra t p tin *.JAR và *.JAD. ượ Khi làm 3 b ườ thi trong ch kích th c c a *.JAR trong t p tin *.JAD s t đúng.
Đ ng quên th c hi n b
13
ệ ướ ừ ự ỗ c 3 m i khi rebuild
ờ
ươ ươ
Ch Ch
ơ ơ ng trình đ n gi n : ng trình đ n gi n :
ả HelloHello(L i chào) ờ(L i chào) ả
import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class TestMidlet extends MIDlet {{ private Form mForm; public TestMidlet() { mForm = new Form("Lap trinh voi J2ME"); mForm.append(new StringItem(null, "Hello world!, MIDP!")); }
public void startApp() {
Display.getDisplay(this).setCurrent(mForm); } public void pauseApp() {} public void destroyApp(boolean unconditional) {}
14
}}
ờ ủ ờ ủ
ộ ộ
Vòng đ i c a m t MIDlet Vòng đ i c a m t MIDlet
ố ươ
ế ừ
ấ ơ ả
ở ạ
ầ
ng khác,
c g i
ẽ ựợ ọ ng ng khi user ươ ng
15
Gi ng nh d ng ch ư ạ ng trình Applet trên J2SE, m t ộ Midlet luôn luôn k th a javax.microedition.midlet Hàm c b n nh t trong m i ọ Midlet là startApp(), hàm này ư ẽ s kh i t o Midlet cũng nh ậ v n hành các thành ph n ặ ố ượ ho c đ i t M i Midlet còn có ỗ pauseApp() và destroyApp(), ỗ m i hàm này s đ ươ ứ ự th c thi t ặ ọ ừ ch n d ng ho c thoát ch trình.
import javax.microedition.lcdui &midlet import javax.microedition.lcdui &midlet
import javax.microedition.lcdui
•
• Classes: Alert, AlertType, Canvas,ChoiceGroup, Command, CustomItem,
Interfaces: Choice, CommandListener, ItemCommandListener, ItemStateListener
DateField, Display,Displayble, Font, Form,Gauge, Graphics, Image, ImageItem,Item, List, Screen, StringItem, TextBox, TextField,Ticker..
• Ví d ta có th khai báo:
ụ ể
Ho c khai chi ti
import javax.microedition.midlet
• Classes: MIDlet
import javax.microedition.lcdui.*; ế ặ t import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.StringItem; import javax.microedition.lcdui.TextField; //..............
ể
16
Ta có th khai báo: import javax.microedition.midlet.*; Hay : import javax.microedition.midlet.MIDlet;
ệ ở ứ ệ ở ứ
ụ ụ
ầ ầ
2. Các thành ph n giao di n 2. Các thành ph n giao di n
ủ ứ ủ ứ m c cao c a ng d ng m c cao c a ng d ng
MIDPMIDP
ụ ể ệ
ỉ ố ượ ề ố ượ
ể ấ
ng này ng trình
M t ng d ng MIDlet ch có 1 đ i ộ ứ ố ượ ng th hi n Display. Đ i t t dùng đ l y thông tin v đ i t bày.
ị ứ
ớ
M t đ i t ộ ố ượ ng Displayable ầ ượ ể ộ là m t thành ph n đ c hi n ế ị ộ t b . MIDP th trên m t thi ủ ớ ch a 2 l p con c a l p Displayable là Screen và Canvas.
ả
ệ
ớ
ng Screen không ph i là m t cái gì hi n ra trên thi
t b ,
ể
ế ị l p Screen s ẽ ẽ ầ m c cao, chính các thành ph n này s
ừ ế ở ị ể
ộ ộ ố ượ ị ở ứ c th a k b i các thành ph n hi n th c hi n th ra trên màn hình
ầ .
M t đ i t ượ đ ượ đ
17
ạ ạo Form TT o Form
ạ Form(String title, Item[] items);
form.append("Tat ca cac ban"); form.append("\nChung ta bat dau lam viec nao!\n
Mot dong moi\n");
form.append("Day la mot dong rat dai chung ta khong viet chung tren mot dong duoc"); form.append(new TextField("Ho va ten:", "Le Thi
Cham Chi", 32, TextField.ANY));
import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.StringItem; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.MIDlet; public class CreateForm extends MIDlet { protected Display display; // Flag indicating first call of startApp protected boolean started; protected void startApp() { if (!started) { display = Display.getDisplay(this); Form form = new Form("Tieu de Form"); form.append("Chao");
form.append("Dia chi:"); form.append(new TextField(null, null, 32, TextField.ANY)); display.setCurrent(form); started = true; } } protected void pauseApp() {} protected void destroyApp(boolean unconditional) {} }
18
T o Form : Ví d : ụ TaoForm TaoForm
Các hành đ ngộ Các hành đ ngộ
Các hành đ ng (Command) nh : Thoát (EXIT), tr l
ở ạ ư ọ ộ ươ i (BACK) và g i m t ph ng
ứ ộ th c ..Các Type: BACK, EXIT,CANCEL,HELP,ITEM,SCREEN,STOP,OK
Command(String label, int commandType, int priority);
ạ
ộ
ư
ộ
ự
private Command cmExit; // khai báo cmExit = new Command("Exit", Command.EXIT, 1); // t o hành đ ng thoát fmMain.addCommand(cmExit); // đ a hành đ ng vào Form fmMain.setCommandListener(this); // Listen for Event public void commandAction(Command c, Displayable s) { // Th c thi nó if (c == cmExit){ destroyApp(false); notifyDestroyed(); } }
Ví d : ụ CacHanhDong CacHanhDong
19
Ví d :ụ
ầ ầ Thành ph n Form Thành ph n Form
Khai báo: import javax.microedition.lcdui.Screen
ỉ ơ ứ ầ ầ ộ ỗ M t Form ch đ n gi n là m t khung ch a các thành ph n, mà m i thành ph n
• StringItem • TextField • DateField • Gauge • ChoiceGroup • Image and ImageItem • CustomItem • Spacer
20
ộ ượ ừ ế ừ ớ đ c th a k t ả l p Item
ộ
ườ
ượ
ả
M t thành ph n
i dùng
ầ StringItem
StringItem và TextField StringItem và TextField StringItem đ ổ
ị ộ ươ
ỗ ạ
ng trình đang ch y. StringItem không
ể ể ả ủ ớ
ươ
ậ
ng th c d ng c a l p StringItem
c dùng đ hi n th m t nhãn hay chu i văn b n. Ng ỗ ể không th thay đ i nhãn hay chu i văn b n khi ch ứ ự ự ệ nh n ra s ki n. Ph StringItem(String label, String text)
Ví d StringItem :
ể
ậ
ộ
ể ỉ ng nh p văn b n tiêu bi u nào. Có th ch
ụ
M t thành ph n ộ
c phép nh p. V ượ
ự
ẩ
ự ậ
ầ TextField ự ố i đa đ t ậ
ậ ở c che b i các ký t
ạ ữ ệ ượ nh p vào đ
ủ ớ
ứ ự
ng th c d ng c a l p TextField
ể
ượ
ậ
ộ
ị
ự
ố nào
ợ ệ
ị
chuoi, chuoi2, chuoi3 chuoi, chuoi2, chuoi3 ư ấ ỳ ượ à
ậ ố
ậ ố ệ
bên trong URL
ỉ ậ ấ ả
ự ợ ệ h p l ự ậ nh p vào
ập các đ a ch email h p l ỉ
Ví d TextField :
ả ố ượ TextField nh b t k các đ i t ậ ố ị c phép nh p, và lo i d li u đ đ nh m t nhãn, s ký t à các ký t ậ TextField còn cho phép nh p vào m t kh u m ặ ạ m t n . ươ Ph TextField(String label, String text, int maxSize, int constraints) ạ ữ ệ ị c phép nh p vào TextField constraints: đ xác đ nh lo i d li u nào đ ầ MIDP đ nh nghĩa các tham s ràng bu c sau cho thành ph n TextField: ậ ấ ỳ • ANY: nh p b t k ký t ỉ • EMAILADDR: ch cho phép nh ỉ • NUMERIC: ch cho phép nh p s ạ • PHONENUMBER: Ch cho phép nh p s đi n tho i ỉ • URL: Ch cho phép nh p các ký t t c các ký t • PASSWORD: che t
21
ụ ONhapLieu, TextField1,Login, ONhapLieu, TextField1,Login
DateField , Gauge DateField , Gauge
Thành ph n ầ DateField
ạ ị ng Date, đ nh nghĩa trong java.util.Date. T o
ươ ứ ủ ố ượ ử ộ ố ượ ả ờ hay c hai. Các ph ng th c c a DateField: thao tác đ i t ỉ ng DateField: ch nh s a ngày, gi
ươ ứ ng ng c a l p DateField g m:
ờ
ụ
m t đ i t ồ ớ l p DateField g m: DateField(String label, int mode) DateField(String label, int mode, TimeZone timeZone) ồ ủ ớ Các mode t ổ DateField.DATE_TIME: cho phép thay đ i ngày gi ờ ỉ DateField.TIME: ch cho phép thay đ i gi ỉ DateField.DATE: ch cho phép thay đ i ngày
ệ ạ ộ Gauge: mô t m c đ hoàn thành m t công vi c. Có 2 lo i Gauge là
Ví d :hien thoi Thành ph n ầ Gauge ng tác(thay
ậ
ậ
p nh t Gauge)
ươ và không t ng tác(c .Hàm ổ ổ ,thay doi: ThoiGian ThoiGian, ả ứ ộ ổ đ i Gauge)
ạ ươ lo i t ủ ớ ự d ng c a l p Gauge: Gauge(String label, boolean interactive, int maxValue, int initialValue)
private Gauge gaVolume; // Đi u ch nh âm l
ề ỉ ượ ng
Ví d : ụ HoanThanh
22
gaVolume = new Gauge("Sound Level", true, 100, 4); HoanThanh ; T ngổ h pợ cả hai: bai4 bai4 ho cặ ktra4 ktra4
ChoiceGroup ChoiceGroup
Thành ph n ầ ChoiceGroup
ầ ọ ừ ChoiceGroup: ch n t ượ ị c đ nh
ChoiceGroup(String label, int choiceType, String [] stringElements, Image [] imageElements);
ChoiceType có 2 lo i: ạ
ướ ộ m t danh sách đ u vào đã đ nghĩa tr c.
ộ ụ
ế
ề
• EXCLUSIVE (ch n ọ m t m c): nhóm này liên quan đ n các radio button • MULTIPLE (ch n ọ nhi u m c): ụ nhóm này liên quan nhóm các checkbox
private ChoiceGroup radio1; private int defaultIndex; private int RadioGroup; radio1 = new ChoiceGroup(“Moi ban chon:", Choice.EXCLUSIVE); radio1.append(“Chon 1", null); radio1.append(“Chon 2", null); defaultIndex = radio1.append(“Chon 3", null); radio1.setSelectedIndex(defaultIndex, true); radioButtonsIndex = form.append(radio1); public void itemStateChanged(Item item){ if (item == radio1){ StringItem msg = new StringItem(“Ban da chon: ", radio1.getString(radio1.getSelectedIndex())); form.append(msg); } } NhomChon NhomChon
ụ
23
ktra6 (exclusive) Ví d :chon nhieu muc (CheckBox): Chon mot muc (Radio): NhomChonRadio, NhomChonRadio1 NhomChonRadio, NhomChonRadio1 T ngổ h pợ : ktra5 ktra5 (multile); ktra6
Image and ImageItem Image and ImageItem ả ớ
ị
ạ
ộ ố ượ
ể Hai l p hi n th hình nh:
ổ
ế
ấ
ả ng hình nh và thông tin chi u cao, chi u r ng, và dù nh có bi n đ i hay không. L p ImageItem: t m
ị
ề ể
ImageItem. Image dùng t o m t đ i t ớ ủ
ả ặ ở trung tâm, bên trái, bên trên c a màn hình. ế
ổ
ạ ả
ế ượ ọ ừ ộ ậ
ữ ẽ ượ nh s đ ư lúc nó đ
ộ ả ộ ả ủ ấ ả
ộ
ộ
ế ổi và bi n đ i. M t nh không bi n đ i ổ ổ ơ ả m t t p tin. M t nh bi n đ i c b n c đ c t ằng cách ghi ệ ạ ạ
ớ
ng th c d ng cho l p Image và ImageItem
Image và ImageItem Image ề ộ gi ụ ấ ả ả c hi n th , ví d t m nh đ t ạ ạ ả MIDP đ a ra 2 lo i hình nh là lo i không bi n đ ượ ạ ế ể ừ c t o ra. Lo i nh này đ k t ề ớ ộ là m t vùng nh . Đi u này tùy thu c vào vi c b n t o n i dung c a t m nh b nó lên vùng nh .ớ ứ ự ươ Các ph • Image createImage(String name) • Image createImage(Image source) • Image createImage(int width, int height) • Image createImage(Image image, int x, int y, int width,int height, int transform)(TOP|LEFT) •I mageItem(String label, Image img, int layout, String altText)
Form fmMain = new Form("Images");
// Tao mot image Image img = Image.createImage("/terrain1.png"); // Them vao form fmMain.append(new ImageItem(null, img, ImageItem.LAYOUT_CENTER, null));
Ví dụ: HinhAnh HinhAnh
24
ầ ầ
Thành ph n List, Textbox Thành ph n List, Textbox
ListList không t
ườ ể ể ệ ự ơ ọ ự ộ ợ ng minh đu c dùng đ th hi n m t th c đ n các ch n l a.
List(String title, int listType, String[] stringElements, Image[] imageElements);
Ví d : Danh sách c ph n image
ụ ả ầ DanhSach DanhSach
ể ọ Danh sách ch n ki u checkbox DanhSachCheckBox DanhSachCheckBox
ủ ọ ch n các mode (listType) c a danh sách DanhSach1 DanhSach1
ể
ề ụ ươ ệ
ộ
ộ ậ TextBox dùng đ cho phép nh p nhi u dòng. TextBox và TextField có ràng bu c TextBox ứ ự ố gi ng nhau cho phép nhâp li u. Ví d ANY, EMAIL, URI… Ph ng th c d ng ủ c a m t TextBox: TextBox(String title, String text, int maxSize, int constraints)
Ví d : Vi
ụ ế ờ t ra l i chào dùng TextBox – HelloTextBox HelloTextBox
25
Nhap du lieu NhapTextBox NhapTextBox
Alert, và Ticker Alert, và Ticker
ộ ộ
ạ
M t ộ AlertAlert đ n gi n là m t h p tho i r t nh . Có 2 lo i Alert:
ơ ộ
ả ạ
ế
ượ
ườ
ạ ấ ỏ c trình bày đ n khi ng
ấ ộ ố
ồ ấ ị
ỉ ượ
i dùng n nút đ ng ý c trình bày trong m t s giây nh t đ nh
ủ
ạ ng th c d ng c a Alert:
ộ ự ệ
ườ
ế
ể
ả
i dùng bi
ẵ
ậ ể
ế
ế
i, thông báo và t là Alert có th bao g m 1 tham chi u
• Modal: h p tho i thông báo đ ộ • Nonmodal: h p tho i thông báo ch đ ứ ự ươ Các ph Alert(String title) Alert(String title, String alertText, Image alertImage, AlertType alertType) ử ụ t có m t s ki n x y ra. AlertType s d ng âm thanh đ thông báo cho ng ỗ ị ạ ồ AlertType bao g m 5 lo i âm thanh đ nh s n là: thông báo, xác nh n, báo l ồ ủ ả c nh báo. Các ph ng th c d ng c a Alert cho bi ộ ố ượ ế đ n m t đ i t
ươ ứ ự ng AlertType. ử ụ ả
ụ
Ví d : Thông báo có s d ng nh –
ThongBao1 ThongBao1
ề
ỗ
ạ
ạ Hai lo i thông báo – ạ Các lo i thông báo ể ệ Ticker
ố ượ
ấ ủ ệ
ố ị
ặ
ở
ThongBao2 ThongBao2 HopThoaiBao HopThoaiBao ạ ộ ố ộ ả ượ c trình bày. T c đ và chi u cu n đ
ạ ế ị ươ
ủ
ng th c d ng c a Ticker
ủ ớ
ấ
ộ
ớ ể ượ ắ
ấ ứ ớ
ủ ớ
ấ ộ
ế ủ c g n vào b t c l p con c a l p Screen bao
Ticker th hi n m t đo n chu i ch y theo chi u ngang. Tham s duy nh t c a Ticker là ề đo n văn b n đ c xác đ nh b i vi c cài đ t trên thi t b nào. ứ ự Ph Ticker(String str) ừ T cây phân c p,ta th y Ticker không là l p con c a l p Screen mà Ticker là m t bi n c a ớ l p Screen. Nghĩa là m t Ticker có th đ ả ồ g m c Alert.
Ví d : Chụ
26
ạ y dòng ch ữ ChuoiChay, Ticker1, ChuoiChay,Ticker1