1
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Khúc Thanh Sơn
LẬP TRÌNH ỨNG DỤNG TRÊN THIẾT BỊ DI ĐỘNG
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
HÀ NỘI – 2010
2
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Khúc Thanh Sơn
LẬP TRÌNH ỨNG DỤNG TRÊN THIẾT BỊ DI ĐỘNG
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
Cán bộ hướng dẫn: ThS Đào Ngọc Phong
Cán bộ đồng hướng dẫn: PGS TS Hồ Sĩ Đàm
HÀ NỘI – 2010
3
LỜI CẢM ƠN
Sau một thời gian tập trung nghiên cứu và thực hiện, em đã hoàn thành xong luận
văn của mình. Đây là kết quả của một quá trình lao động và học tập nghiêm túc dựa
trên kiến thức mà em đã thu thập được dưới sự truyền dạy của quý thầy cô. Em xin gửi
lời tri ân sâu sắc nhất đến toàn thể quý thầy cô khoa Công nghệ thông tin – Đại học
Công nghệ – Đại học Quốc Gia Hà Nội trong suốt thời gian qua
Hơn ai hết, em có thể ý thức rằng luận văn của mình khó có thể hoàn thành tốt
nếu thiếu sự đôn đốc, hướng dẫn tận tình của thầy – Thạc sỹ Đào Ngọc Phong và thầy
– PGS TS Hồ Sĩ Đàm. Em xin gửi lời cám ơn chân thành nhất tới sự chỉ bảo của hai
thầy.
Em cũng xin cảm ơn các anh chị đi trước cùng toàn thể bạn bè vì sự động viên
ủng hộ trong suốt thời gian nghiên cứu và thực hiện đề tài.
Mặc dù đã nỗ lực hết mình để hoàn thành đề tài tốt nhất trong khả năng cho
phép, nhưng do kiến thức của bản thân còn hạn hẹp và qui mô của khối lượng công
việc mà thời gian có hạn nên những thiếu sót là không thể tránh khỏi. Rất mong nhận
được sự chỉ bảo cũng như góp ý chân thành của quý thầy cô, anh chị và các bạn.
Hà Nội, 5/2010
Khúc Thanh Sơn
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
4
TÓM TẮT NỘI DUNG
Ngày nay, ngôn ngữ J2ME và lập trình trên thiết bị di động nói chung đang ngày
càng phát triển rộng rãi đi kèm với sự bùng nổ về thị trường điện thoại di động. Cùng
với sự gia tăng về số lượng di động thì các tính năng dành cho di động cũng tăng theo
tương ứng. Hàng loạt các tính năng cao cấp được giới thiệu như chụp hình, nghe
nhạc… và đặc biệt là sử dụng các chương trình không phải do nhà sản xuất điện thoại
cung cấp. Đây được coi là cuộc cách mạng trong lĩnh vực di động, nó biến chiếc điện
thoại nhỏ bé thành một chiếc máy tính thu nhỏ, với những chủng loại điện thoại này ta
có thể đọc báo, tiểu thuyết, tra từ điển, bản đồ và nhất là mang cả thế giới giải trí đến
bên cạnh, những bản nhạc hay, những game hay luôn luôn sẵn sàng để sử dụng. Để
góp phần cho sự phát triển đó ngoài yếu tố phần cứng thì nền tảng phần mềm là yếu tố
quyết định vì các hãng sản xuất di động khác nhau thì sử dụng công nghệ khác nhau.
Làm sao để các thiết bị phần cứng khác nhau có thể sử dụng chung một nền tảng phần
mềm? Đó chính là nền tảng J2ME. Và đây cũng được coi là một trong những lợi thế
rất lớn của J2ME.
Trong đề tài của mình,em sẽ đi nghiên cứu về công nghệ J2ME và cách thức sử
dụng J2ME để lập trình trên di động.Bản báo cáo khóa luận của em được trình bày
theo 4 chương với nội dung cụ thể như sau:
1. Chương 1: Tổng quan về lập trình trên thiết bị di động
Chương này sẽ nói sơ lược về thực tại các ứng dụng trên di động, các đặc điểm cũng
như công nghệ, các công cụ lập trình khác nhau.
2. Chương 2: Giới thiệu về ngôn ngữ J2ME
Chương này sẽ nói về lịch sử hình thành, các phiên bản và các đặc điểm của ngôn
ngữ J2ME.
3. Chương 3: Công nghệ lập trình trên di động J2ME
Chương này sẽ giới thiệu về kiến trúc của J2ME, các lớp dùng trong J2ME.
4. Chương 4: Xây dựng ứng dụng thử nghiệm trên di động.
Chương này sẽ giới thiệu về ứng dụng sẽ làm, quá trình làm, cách cài đặt và sử dụng.
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
5
Mục lục
Bảng các chữ viết tắt và thuật ngữ được sử dụng 7
Danh sách hình vẽ 8
Danh sách các bảng 9
Chương 1. TỔNG QUAN VỀ LẬP TRÌNH TRÊN THIẾT BỊ DI ĐỘNG 10
1.1 Thực tế các ứng dụng trên thiết bị di động 10
1.2 Đặc điểm của lập trình ứng dụng trên thiết bị di động 11
1.3 Các công nghệ khác 11
Chương 2. GIỚI THIỆU VỀ J2ME 13
2.1 Lịch sử hình thành 13
2.2 Các phiên bản, đặc điểm 14
2.3 Các đặc điểm khác 15
2.4 Lý do chọn J2ME 16
Chương 3. CÔNG NGHỆ LẬP TRÌNH TRÊN DI ĐỘNG J2ME 18
3.1 Kiến trúc của J2ME 18
3.1.1 Configurations 18
3.1.2 Định nghĩa về Profile: 21
3.1.3 Máy ảo Java 22
3.2 Các lớp thông dụng trong J2ME 24
3.2.1 Cấu trúc cơ bản 24
3.2.2 Xây dựng một ứng dụng MIDlet 26
3.2.3 Lớp MIDlet 26
3.2.4 Lớp MIDletStateChangeException 28
3.2.5 Lớp Display 29
3.2.6 Lớp Displayable 30
3.2.7 Lớp Command và CommandListener 31
3.2.8 Lớp Item và ItemStateListener 34
3.3 Các lớp giao diện trong J2ME 36
3.3.1 Screen 37
3.3.2 Form 38
3.3.3 Item 39
3.3.4 StringItem 40
3.3.5 Image and ImageItem 40
3.3.6 Canvas 43
3.3.7 Graphics 45
Chương 4. XÂY DỰNG ỨNG DỤNG THỬ NGHIỆM TRÊN DI ĐỘNG 47
4.1 Giới thiệu về ứng dụng 47
4.2 Các chức năng chính 47
4.2.1 Xem album 48
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
6
4.2.2 Xem slide 48
4.2.3 Trợ giúp 49
4.2.4 Liên hệ 49
4.2.5 Download 49
4.3 Cách thức làm chương trình 49
4.4.1 Yêu cầu phần mềm 52
4.4.2 Cài đặt phần mềm 53
4.4.2.1 Cài đặt JDK 53
4.4.2.2 Cài đặt Sun J2ME Wireless Toolkit 2.5 (WTK 2.5) 55
4.4.3 Chạy thử nghiệm chương trình 57
4.4.3.1 Cách tạo một Project trên Sun J2ME Wireless Toolkit 2.5 57
4.4.3.2.1 Giao diện khi khởi động xong chương trình 60
4.4.3.2.2 Giao diện Menu chính của chương trình 61
4.4.3.2.3 Giao diện Xem Album 62
4.4.3.2.4 Giao diện Xem Slide 63
4.4.3.2.5 Giao diện Trợ giúp 64
4.4.3.2.6 Giao diện Liên hệ 65
4.4.3.2.7 Giao diện Download 66
4.4.3.2.8 Giao diện khi tắt chương trình 67
4.4.4 Tạo file Jar dùng để lưu trữ và chia sẻ 68
KẾT LUẬN 69
Tài liệu tham khảo 70
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
7
Bảng các chữ viết tắt và thuật ngữ được sử dụng
API Application Program Interface
CDC Connected Device Configuration
CLDC Connected Limited Device Configuration
Configuration
Đặc tả quy định các thư viện gốc J2ME phải hỗ trợ cho một
dòng phần cứng
J2EE Java 2 Enterprise Edition,dành cho các dự án lớn
J2ME Java 2 Micro Edition,dành cho các thiết bị nhỏ
J2SE Java 2 Standard Edition,dành cho PC thông thường
JDK Java Development Kits
KVM K Virtual Machine-máy ảo cho môi trường CLDC
MIDlet Tên gọi chung của các ứng dụng J2ME
MIDP Mobile Information Device Profile
PDA Personal Digital Assistant
Profile Các tập thư viện cấp cao định nghĩa trên nền Configuration
WTK Wireless ToolKits
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
8
Danh sách hình vẽ
Hình 1. Các đặc điểm của ngôn ngữ J2ME 15
Hình 2. Các thành phần của J2ME 18
Hình 3. Configurations và các thiết bị 20
Hình 4. So sánh Profile thông thường và Profile mở rộng 22
Hình 5. Cấu trúc chương trình J2ME 23
Hình 6. Cấu trúc chương trình MIDP 24
Hình 7. Mô hình vòng đời của một MIDlet 25
Hình 8. Command Exit 32
Hình 9. Ví dụ về cách khởi tạo của hàm Command 32
Hình 10. Sơ đồ các lớp giao diện của J2ME 37
Hình 11. Sơ đồ tổng quan giao diện chương trình 48
Hình 12. Màn hình bắt đầu cài đặt JDK 53
Hình 13. Quá trình JDK đang tiến hành cài đặt 54
Hình 14. Quá trình cài đặt kết thúc 54
Hình 15. Màn hình khi bắt đầu cài đặt WTK 2.5 55
Hình 16. Bước cài đặt WTK tiếp theo 55
Hình 17. Đường dẫn cài đặt WTK 2.5 56
Hình 18. Quá trình xử lý khi cài đặt WTK 2.5 56
Hình 19. Quá trình cài đặt WTK 2.5 kết thúc 57
Hình 20. Màn hình mở WTK 2.5 57
Hình 21. Giao diện ban đầu của WTK 58
Hình 22. Cửa sổ tạo New Project trong WTK 58
Hình 23. Cửa sổ cấu hình cho MIDlet 59
Hình 24. Giao diện khi Build và Run chương trình 59
Hình 25. Giao diện khi khởi động chương trình 60
Hình 26. Giao diện Menu chính của chương trình 61
Hình 27. Giao diện Xem Album 62
Hình 28. Giao diện Xem Slide 63
Hình 29. Giao diện Trợ giúp 64
Hình 30. Giao diện Liên hệ 65
Hình 31. Giao diện Download 66
Hình 32. Giao diện khi tắt chương trình 67
Hình 33. Cửa sổ WTK khi tạo file Jar 68
Hình 34. Cửa sổ Build file Jar của WTK 68
Hình 35. Hình ảnh thư mục bin chứ file Jar của Chương trình 68
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
9
Danh sách các bảng
Bảng 1. So sánh thông số kỹ thuật của CDC và CLDC 20
Bảng 2. Các hàm thường dùng trong MIDlet 27
Bảng 3. Một số hàm quan trọng của lớp Display 29
Bảng 4. Các hàm chính của Displayable 31
Bảng 5. Các TYPE hỗ trợ của lớp Command 33
Bảng 6. Các hàm chính của lớp Command và CommandListener 34
Bảng 7. Các hàm quan trọng của lớp Item 35
Bảng 8. Các phương thức và chức năng tương ứng của lớp Screen 38
Bảng 9. Các phương thức và chức năng tương ứng của lớp Form 39
Bảng 10. Các phương thức và chức năng tương ứng của lớp Item 40
Bảng 11 Các phương thức và chức năng tương ứng của StringItem 40
Bảng 12. Các phương thức và chức năng của lớp Image 41
Bảng 13. Các phương thức và chức năng của lớp Image 42
Bảng 14. Các phương thức hỗ trợ vẽ của lớp Canvas: 44
Bảng 15. Các phương thức và chức năng của lớp Graphics: 46
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
10
Chương 1. TỔNG QUAN VỀ LẬP TRÌNH TRÊN THIẾT BỊ DI ĐỘNG
1.1 Thực tế các ứng dụng trên thiết bị di động
Mạng điện thoại di động xuất hiện đầu tiên ở Việt Nam vào đầu những năm
1990 và theo thời gian số lượng thuê bao cũng như các nhà dịch vụ di động tại Việt
Nam cũng tăng dần. Cùng với sự phát triển về số lượng thuê bao di động là sự đa dạng
hóa các dịch vụ hướng đến thiết bị di động. Ngày nay điện thoại di động không chỉ còn
mang chức năng gọi điện hay nhắn tin thông thường nữa mà còn là một thiết bị giải trí,
tra cứu thông tin rất tiện lợi. Do đó, xây dựng các ứng dụng cho thiết bị di động đang
là một yêu cầu tất yếu trong xu thế hiện nay. Ngành công nghiệp phần mềm cho các
thiết bị di động được xem là mảnh đất màu mỡ và hứa hẹn đem lại lợi nhuận rất cao.
Về chương trình ứng dụng, tính khả thi và thực tế ngày càng được đề cao. Với
thực trạng Việt Nam hiện nay, số người sở hữu máy tính cá nhân, đặc biệt là sở hữu
laptop chưa nhiều nhưng số người có điện thoại di dộng là rất nhiều.Vì thế việc phát
triển các ứng dụng di động sẽ là một hướng phát triển màu mỡ, nhằm tạo sự tiện lợi
cho người sử dụng, cũng như là tiết kiệm chi phí và thời gian.
Hiện nay có rất nhiều các ứng dụng trên di động ta đang sử dụng hàng ngày như
game,phần mềm chạy nhạc, phần mềm quản lý ảnh, quản lý bản đồ, chát, tin nhắn…và
đa số các ứng dụng đều chạy trên nền Java và được lập trình bằng ngôn ngữ J2ME,
một ngôn ngữ rất mạnh về lập trình ứng dụng cho thiết bị di động. Nếu máy điện thoại
có kết nối GPRS, thì ta còn có thể down về rất nhiều các tiện ích cũng như các ứng
dụng mà trong máy không có sẵn như là tải nhạc, tải hình cũng như là các game…Qua
đó ta có thể thấy tầm quan trọng của các ứng dụng trên thiết bị di động, nếu thiếu
chúng các thiết bị di động sẽ thiếu đi rất nhiều tính năng và cũng sẽ giảm đi hiệu quả
làm việc!
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
11
1
.
2 Đặc điểm của lập trình ứng dụng trên thiết bị di động
Ngôn ngữ sử dụng chủ yếu để lập trình các ứng dụng trên thiết bị di động là
J2ME. Ngôn ngữ J2ME có kích thước nhỏ gọn, tiện dụng, được hỗ trợ bởi hầu hết các
thế hệ điện thoại mới ra đời, kể cả các hệ điện thoại cũ. J2ME không những là một
ngôn ngữ hướng đến các thiết bị di động mà còn là một ngôn ngữ chính để lập trình
trên các thiết bị gia dụng, thẻ tín dụng điện tử và các thiết bị thông minh khác.
J2ME là một ngôn ngữ nhỏ, gọn nhưng rất chặt chẽ và dễ nắm bắt, với những lập
trình viên đã có kinh nghiệm với Java thì việc lập trình J2ME trở nên rất dễ dàng.
J2ME còn được các tổ chức mã nguồn mở ủng hộ mạnh mẽ và phát triển nhanh chóng.
1.3 Các công nghệ khác
Hai hướng phát triển ứng dụng trên điện thoại di động phổ biến hiện nay là C++
trên hệ điều hành Symbian và J2ME. Các ứng dụng viết trên nền Symbian có ưu thế là
truy cập trực tiếp tài nguyên của điện thoại cũng như là hỗ trợ hệ thống tập tin, thư
mục, như máy tính cá nhân vì được hỗ trợ bởi hệ điều hành. Tuy nhiên hệ điều hành
Symbian lại có kích thước khá lớn nên chỉ có ở các thế hệ điện thoại tương đối cao
cấp, và xây dựng ứng dụng dùng Symbian API cũng phức tạp hơn.
Ngoài ra còn có 1 công nghệ khác đó là lập trình trên Android."Android là một
hệ điều hành dành cho di động sử dụng Linux Kernel",nhưng nó giống 1 "nền tảng"
hơn vì ngoài các chức năng của một hệ điều hành, Google đã trang bị cho Android
những "vũ khí tối tân nhất" mà theo quan điểm của những người sáng tạo ra Android
đã từng khẳng định "đó sẽ là một nền tảng vừa mạnh mẽ vừa linh hoạt".
Năm 2005, Google mua lại công ty Android, một công ty nhỏ có trụ sở tại
California, Mỹ. Sau khi chuyển sang cho Google, nhóm phát triển do Rubin làm
Leader bắt đầu phát triển một nền tảng (Platform) dựa trên Linux Kernel dành riêng
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
12
cho di động, một nền tảng đủ mạnh mẽ và mềm dẻo để cạnh tranh với các nền tảng di
động khác. Đồng thời, Google cũng bắt đầu lên kế hoạch cho các đối tác để chế tạo
phần cứng và viết các phần mềm trên nển tảng mới của mình.
Như đã trình bày ở phần trên, J2ME có lẽ công nghệ lập trình cho di động gọn
nhẹ và tiện dụng nhất, nên hiện nay hầu hết các nhà lập trình hay các công ty về di
động đều sử dụng công nghệ J2ME là chủ yếu!
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
13
Chương 2. GIỚI THIỆU VỀ J2ME
2.1 Lịch sử hình thành
Java là một công nghệ được hãng Sun Microsystems xây dựng đầu tiên với cái
tên Oak và hiện nay đang phát triển vượt bậc với sự đóng góp của hàng vạn lập trình
viên trên thế giới. Ban đầu, Oak được kỹ sư James Gosling và các cộng sự xây dựng
với mục đích lập trình cho các mặt hàng điện dân dụng với mục tiêu nhỏ gọn và tương
thích được với nhiều loại thiết bị phần cứng khác nhau. Sau đó Oak được sử dụng
trong nhiều dự án như dự án Xanh (Blue Project), dự án Phim theo yêu cầu (Video on
demand Project). Sau một chuyến du lịch tới đảo Java của Indonesia, nhóm phát triển
Oak đã đổi tên Oak thành Java.
Java mà tiền thân là Oak được xây dựng chủ yếu dựa trên bộ công cụ phát
triển (Java Development Kit - JDK) như là bộ thư viện chuẩn trong đó chứa trình biên
dịch, trình thông dịch, trình đóng gói, tài liệu,… Đây chính là nền tảng cho việc phát
triển các ứng dụng Java.
J2ME là một nhánh của ngôn ngữ lập trình JAVA được phát triển nhằm hướng
tới việc lập trình cho các thiết bị nhỏ (micro) có bộ nhớ, khả năng hiển thị và xử lý hạn
chế.
Ban đầu Java được xây dựng chỉ có một phiên bản duy nhất, ngay nay được
biết đến với cái tên J2SE (Java 2 Standard Edition), với phương châm “viết một lần,
dùng trên mọi môi trường” (“Write one,run anywhere”). Java hình thành trên ý tưởng
xây dựng một ngôn ngữ mà lập trình viên viết một lần duy nhất nhưng ứng dụng có
thể chạy trên bất kỳ môi trường nào có hỗ trợ máy ảo Java (Java Virtual Machine). Để
làm được việc này, Java sử dụng một phương thức biên dịch mã nguồn tương đối
khác so với các ngôn ngữ lập trình truyền thống. Bộ biên dịch Java không biên dịch
mã nguồn trực tiếp sang mã máy mà biên dịch sang một dạng mã trung gian mà máy
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
14
ảo Java có thể hiểu được (mã bytecode). Khi có nhu cầu sử dụng ứng dụng, máy ảo
Java sẽ đọc mã trung gian này và dịch ra mã máy và thực thi. Nhờ quá trình trung gian
đó,một ứng dụng Java có thể chạy trên bất kỳ môi trường nào có cài đặt máy ảo Java
tương thích.
Được giới thiệu vào năm 1995, ngày nay mục tiêu của Java nhắm đến cũng thay
đổi khá nhiều. Java hiện nay không chỉ nhắm đến máy tính để bàn đơn thuần, hai năm
sau ngày đầu ra mắt, một phiên bản Java mới là J2EE (Java 2 Enterprise Edition) đã
được giới thiệu nhằm đến việc phát triển các ứng dụng có quy mô lớn hơn.
Phiên bản mới nhất được thêm vào dòng ngôn ngữ Java là J2ME (Java 2 Micro
Edition). J2ME nhắm đến việc phát triển ứng dụng cho các ứng dụng có năng lực hạn
chế như đầu giải mã kỹ thuật số TV set-top boxes,thiết bị di động…
2.2 Các phiên bản, đặc điểm
J2SE (Java 2 Platform, Standart Edition): Phiên bản chuẩn gồm bộ
công cụ thông dụng dùng để chạy trên các máy PC hoặc các mạng máy tính
nhỏ.
J2EE (Java 2 Platform, Enterprise Edition): Phiên bản dành cho các
máy chủ với bộ nhớ lớn. Bao gồm các kiến trúc nâng cao như Web, EJB,
Transaction,… dùng để xây dựng các ứng dụng có quy mô lớn
J2ME (Java 2 Platform, Micro Edition): Bao gồm môi trường và thư
viện Java dùng để phát triển các ứng dụng trên các thiết bị có bộ nhớ nhỏ như
điện thoại di động, PDA, các đồ gia dụng,…
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
15
2.3 Các đặc điểm khác
J2ME được phát triển từ kiến trúc JavaCard, EmbededJava và PersonalJava của
phiên bản Java 1.1. Đến sự ra đời của phiên bản Java 2 thì Sun quyết định thay thế
PersonalJava bằng một phiên bản mới có tên Java 2 Micro Edition, viết tắt là J2ME.
J2ME được sử dụng cho các thiết bị nhỏ gọn với dung lượng bộ nhớ bé và khả năng
xử lý thấp.
Mục tiêu của Java là cho phép người lập trình viết các ứng dụng độc lập
với thiết bị di động, không cần quan tâm đến phần cứng thật sự. Để làm được
như thế, J2ME được xây dựng bằng các tầng khác nhau để che giấu đi việc
tương tác trực tiếp với phần cứng của thiết bị. Các tầng của J2ME được xây
dựng trên CLDC (Connected Limited Device Configuration):
Hình 1. Các đặc điểm của ngôn ngữ J2ME
Tầng dưới cùng là tầng Phần cứng thiết bị - đây là tầng vật lý bao gồm phần
cứng của thiết bị di động. Các tầng bên trên tầng Phần cứng thiết bị là các tầng trừu
tượng, chúng cung cấp cho lập trình viên nhiều giao diện lập trình thân thiện và dễ
dàng hơn mà không cần quan tâm đến phần cứng. Nói cách khác chúng đóng vai trò
trung gian giúp cho lập trình viên tương tác được với phần cứng mà không cần quan
tâm đến các chi tiết thực sự của phần cứng của thiết bị.
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
16
Tầng Phần cứng thiết bị (Device Hardware Layer): Đây là thiết bị di
động thật sự với bộ nhớ và tốc độ xử lý cụ thể. Các thiết bị di động khác nhau
có thể có bộ vi xử lý và các tập lệnh rất khác nhau. Mục tiêu của J2ME là cung cấp
cho lập trình viên khả năng giao tiếp giống nhau với tất cả các loại thiết bị di động
khác nhau.
Tầng máy ảo Java (Java Virtual Machine Layer): Đây là tầng đóng vai
trò thông ngôn giữa chương trình và thiết bị. Nó sẽ thông dịch các mã bytecode (mã có
được sau khi biên dịch mã nguồn chương trình) thành mã máy của các thiết bị di động.
Tầng này bao gồm KVM (K Virtual Machine) là bộ biên dịch mã bytecode thành mã
máy. Nó cung cấp một sự chuẩn hóa cho các thiết bị di động để ứng dụng J2ME sau
khi biên dịch có thể chạy được trên bất kỳ thiết bị di động nào hỗ trợ KVM.
Tầng cấu hình (Configuration Layer): Tầng này cung cấp các hàm API cơ bản là
nhân của J2ME. Lập trình viên có thể sử dụng các lớp và các phương thức của các API
này tuy nhiên nó không thực sự phong phú bằng tập API của tầng hiện trạng.
Tầng hiện trạng (Profile Layer): Tầng này cung cấp các hàm API hữu dụng hơn
cho việc lập trình. Mục đích của tầng này xây dựng nên lớp cấu hình và cung cấp
nhiều thư viện ứng dụng hơn.
2.4 Lý do chọn J2ME
Ngày nay ngành công nghệ sản xuất thiết bị di động thế giới đang phát triển
một cách nhanh chóng. Các thiết bị di động ngày càng hiện đại hơn, thông minh hơn
và ngày càng có nhiều tính năng nổi bật hơn. Đơn cử như chiếc điện thoại di động,
ngày nay chúng không chỉ đơn thuẩn đảm nhiệm chức năng hội thoại mà còn nhiều
chức năng khác như chụp ảnh, nghe nhạc, xem phim như một trung tâm giải trí di
động. Các thiết bị khác như lò viba, TV…cũng càng ngày được trang bị nhiều tính
năng hiện đại hơn. Nhu cầu phát triển phần mềm cho các thiết bị di động, gia dụng
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
17
ngày càng tăng cao và được đánh giá là một ngành công nghệ có thể đem lại nhiều đô
la doanh thu. Một thực tế đặc ra cho các nhà phát triển trên các thiết bị này là hiện nay
không có một chuẩn hóa nào dành cho các nhà sản xuất phần cứng. Các thiết bị hiện
nay trên thị trường rất đa dạng và mang nhiều đặc điểm cũng như cấu hình khác nhau.
Trên thực tế đó, việc chạy trên nhiều môi trường là một lợi thế rất lớn của ngôn ngữ
Java. Các nhà phát triển Java đã cho ra đời ngôn ngữ J2ME hướng đến việc phát triển
phần mềm cho các thiết bị di động. Ngôn ngữ J2ME thực sự là một ngôn ngữ nhỏ gọn,
dễ nắm bắt, chặt chẽ và thích hợp với các thiết bị có khả năng hạn chế. Các thiết bị di
động trên thị trường hiện nay, đặc biệt là điện thoại di động hầu hết đều hỗ trợ rất tốt
ngôn ngữ J2ME và J2ME đã trở thành một trong những ngôn ngữ phổ biến nhất trong
lĩnh vực lập trình di động.
Một số thiết bị hỗ trợ J2ME chúng ta hay gặp như:
-Các lọai thẻ cá nhân như Java Card
-Máy điện thoại di động
-Máy PDA (Personal Digital Assistant - thiết bị trợ giúp cá nhân)
-Các hộp điều khiển dành cho tivi, thiết bị giải trí gia dụng …
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
18
Chương 3. CÔNG NGHỆ LẬP TRÌNH TRÊN DI ĐỘNG J2ME
3.1 Kiến trúc của J2ME
Hình 2. Các thành phần của J2ME
Khái niệm thiết bị di động là tương đối rộng lớn. Chúng bao hàm các thiết bị có
kích thước vật lý khác nhau nhiều lần và cho dù cùng kích thước những thiết bị này
vẫn có khả năng xử lý cũng như hiển thị khác nhau (những chiếc điện thoại hiển thị
12000pixels cho đến những PDA là 20000pixels). Để đáp ứng được nhu cầu khác
nhau của những thiết bị này,bản thân ngôn ngữ J2ME cũng được chia thành các thành
phần nhỏ hơn. Chúng ta sẽ tìm hiểu 2 khái niệm Configurations và Profiles.
3.1.1 Configurations
Định nghĩa về Configuration (Cấu hình): là đặc tả định nghĩa một môi trường phần
mềm cho một dòng các thiết bị được phân loại bởi tập hợp các đặc tính, ví dụ như:
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
19
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
Do đây là đặc tả nên các nhà sản xuất thiết bị như Samsung, Nokia …bắt buộc
phải thực thi đầy đủ các đặc tả do Sun qui định để các lập trình viên có thể dựa vào
môi trường lập trình nhất quán và thông qua sự nhất quán này, các ứng dụng được tạo
ra có thể mang tính độc lập thiết bị cao nhất có thể. Ví dụ như một lập trình viên viết
chương trình game cho điện thoại Samsung thì có thể sửa đổi chương trình của mình
một cách tối thiểu nhất để có thể chạy trên điện thọai Nokia Hiện nay Sun đã đưa ra 2
dạng Configuration:
CLDC (Connected Limited Device Configuration-Cấu hình thiết bị kết nối giới
hạn): được thiết kế để nhắm vào thị trường các thiết bị cấp thấp (low-end), các thiết bị
này thông thường là máy điện thọai 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 được gắn với Java không dây (Java Wireless ),
dạng như cho phép người sử dụng mua và tải về các ứng dụng Java, ví dụ như là
MIDlet.
CDC- Connected Device Configuration (Cấu hình thiết bị kết nối): CDC được
đưa ra nhắm đến các thiết bị có tính năng mạnh hơn dòng thiết bị thuộc CLDC nhưng
vẫn yếu hơn các hệ thống máy để bàn sử dụng J2SE. Những thiết bị này có nhiều bộ
nhớ hơn (thông thường là trên 2MB) 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 …
Cả 2 dạng Cấu hình kể trên đều chứa máy ảo Java (Java Virtual Machine) và
tập hợp các lớp (class) Java cơ bản để cung cấp một môi trường cho các ứng dụng
J2ME. Tuy nhiên, bạn chú ý rằng đối với các thiết bị cấp thấp, do hạn chế về tài
nguyên như bộ nhớ và bộ xử lý nên không thể yêu cầu máy ảo hổ trợ tất cả các tính
năng như với máy ảo của J2SE, ví dụ, các thiết bị thuộc CLDC không có phần cứng
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
20
yêu cầu các phép tính toán dấu phẩy động, nên máy ảo thuộc CLDC không được yêu
cầu hỗ trợ kiểu float và double.
Hình 3. Configurations và các thiết bị
Bảng dưới là sự so sánh các thông số kỹ thuật của CDC và CLDC:
CLDC CDC
Ram >=32K, <=512K >=256K
Rom >=128k, <=512k >=512k
Nguồn Năng
Lượng
Có Giới Hạn (nguồn pin) Không giới hạn
Network Chậm Nhanh
Bảng 1. So sánh thông số kỹ thuật của CDC và CLDC
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
21
3.1.2 Đị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ệt. Cả 2 Configuration đều có những profile liên quan
và từ 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ường ta không thể
chuyển một ứng dụng Java viế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 nối, các thành phần hỗ trợ giao diện người dùng … vào CLDC. Profile
này được thiết kế chủ 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ượng chứa 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)
-PDA Profile: tương tự MIDP, nhưng với thị trường là các máy PDA với màn
hình và bộ nhớ lớn hơn
-Foundation Profile: cho phép mở rộng các tính năng của CDC với phần lớn các
thư viện của bộ Core Java2 1.3 Ngoài ra còn có Personal Basis Profile, Personal
Profile, RMI Profile, Game Profile.
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
22
Hình 4. So sánh Profile thông thường và Profile mở rộng
3.1.3 Máy ảo Java
Như chúng ta đã biết, một chương trình Java sẽ được biên dịch thành mã trung
gian sau đó chính máy ảo Java sẽ biên dịch phần mã này sang mã máy để thực thi.
Máy ảo Java sẽ chịu trách nhiệm việc cung cấp tính năng bảo mật, cấp phát và thu hồi
bộ nhớ và quản lý điều phối các tiến trình. Chúng ta có thể nói chính máy ảo làm cho
chương trình của chúng ta “chạy”.
Với CDC, máy ảo Java có cùng các đặc tính như J2SE.Tuy nhiên với CLDC,
Sun đã phát triển riêng một dạng máy ảo chuyên biệt được gọi là K Virtual Machine
gọi tắt là KVM. Chính những hạn chế về tài nguyên của các thiết bị di động đã đề ra
nhu cầu về sự ra đời của KVM.KVM không phải một máy ảo Java truyền thống:
Máy ảo chỉ cần 40-80kb bộ nhớ.
Chỉ đòi hỏi 20-40kb bộ nhớ động (heap).
Có thể chạy với bộ vi xử lý 16bits và xung nhịp 25MHz.
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
23
Đến đây chúng ta có thể hình dung phần nào kiến trúc tổng thể của một chương
trình J2ME như sau:
Hình 5. Cấu trúc chương trình J2ME
Nếu chương trình được biên dịch với CDC, chương trình sẽ chạy trên các máy ảo
truyền thống và mang các đặc tính như chương trình J2SE.
Nếu chương trình được biên dịch với CLDC, chương trình sẽ chạy với máy ảo
chuyên biệt KVM và những đặc tính riêng do CLDC đòi hỏi.
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
24
Với chương trình xây dựng bởi MIDP,chúng ta có cấu trúc chuyên biệt sau:
Hình 6. Cấu trúc chương trình MIDP
Tầng dưới cùng là hệ điều hành có hỗ trợ máy ảo KVM, bên trên là CLDC và
trên cùng là MIDP Profile. Lúc này khái niệm “Viết một lần, chạy bất cứ môi trường
nào” của Sun không còn đúng hoàn toàn vì đã xuất hiện máy ảo chuyên biệt KVM.
Một số chương trình viết bằng MIDP sẽ không chạy được trên J2SE và ngược lại. Tuy
nhiên chúng ta phải cảm kích các nỗ lực của Sun đã giúp Java trở thành một ngôn ngữ
có khả năng độc lập với môi trường bên dưới nhất hiện nay, điều này đúng với cả thiết
bị di động.
3.2 Các lớp thông dụng trong J2ME
3.2.1 Cấu trúc cơ bản
Chúng ta gọi chung các chương trình J2ME là MIDlet (Mobile Information
Device applet). Các chương trình MIDlet này đều được kế thừa từ lớp MIDlet. Không
giống như các chương trình trên máy PC, các chương trình MIDlet không cần hàm
main() để thực thi. Trước hết chúng ta sẽ xem vòng đời của các ứng dụng MIDlet.
Lập trình ứng dụng trên thiết bị di động
Khúc Thanh Sơn-K51MMT
25
Hình 7. Mô hình vòng đời của một MIDlet
Một chương trình MIDlet khi được nạp vào thiết bị có những trạng thái sau:
-Paused:Một chương trình MIDlet sẽ được đưa về trạng thái Paused sau khi thực
hiện phương thức khởi tạo (constructor) và trước khi được chương trình quản lý ứng
dụng (application manager) trên thiết bị gọi thực thi. Trong quá trình hoạt động,
chương trình MIDlet cũng có thể trở lại trạng thái Paused bởi thiết bị (khi trả lời cuộc
gọi đến hoặc bởi chính chương trình MIDlet)
-Active:chương trình đang thực thi
-Destroyed:Chương trình MIDlet đã giải phóng tất cả tài nguyên và đã được tắt
bởi trình quản lý trên ứng dụng trên thiết bị.