Tải bản đầy đủ (.docx) (37 trang)

LẬP TRÌNH JAVA TRÊN MOBILE J2ME

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (762.85 KB, 37 trang )

HỌC VIỆN KỸ THUẬT MẬT MÃ

ĐỀ TÀI
LẬP TRÌNH JAVA TRÊN MOBILE - J2ME
Môn học: NGUYÊN LÝ HỆ ĐIỀU HÀNH
Nhóm thực hiện:
Hà Nội, 9/2014
MỤC LỤC
Lập trình Java trên mobile - J2ME
ALH Team – AT8B Page 2
Lập trình Java trên mobile - J2ME
LỜI MỞ ĐẦU
Số lượng thiết bị di động ngày càng tăng ở Việt Nam, nhiều người đã coi điện
thoại di động như một vật không thể thiếu trong cuộc sống hằng ngày. Cùng với sự
gia tăng số lượng người dùng thì các tính năng dành cho điện thoại 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 số, nghe
nhạc và đặc biệt nhất là có thể sử dụng các chương trình không phải do nhà sản xuất
điện thọai cung cấp. Đây có thể được coi là một cuộc cách mạng trong lĩnh vực di
động, nó biến chiếc điện thọai nhỏ bé của bạn 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 bạn có thể đọc báo, tiểu thuyết, tra từ điển, bản đồ và
nhất là mang thế giới giải trí đến bên cạnh, những bản nhạc hay, những games hay sẽ
luôn sẵn sàng mỗi khi bạn cần đến.
Đặc biệt hơn, với sự hỗ trợ của nền tảng phần mềm sử dụng cho thiết bị di động,
nhà thiết kế còn có thể biến những đồ vật dùng trong gia đình thành những “cỗ máy
biết suy nghĩ” như lò vi sóng, hộp điều khiển ti-vi, hệ thống xem DVD, VCD, các
máy PDA dùng cho cá nhân và trên xe hơi… Để 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à nhân tố quyết định vì chúng ta đã biết, có
hàng chục hãng sản xuất điện thoại khác nhau và 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? Đây là nội dung chúng ta sẽ tìm hiểu trong bài viết hôm nay, đó là nền tảng
J2ME - Java 2 Platform, Micro Edition.


ALH Team – AT8B Page 3
Lập trình Java trên mobile - J2ME
CHƯƠNG I: GIỚI THIỆU VỀ JAVA VÀ J2ME
1.1. Giới thiệu về Java
Java là một công nghệ được hãng Sun Microsystems xây dựng từ cuối năm 1990
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. Hiện nay, cộng đồng Java trên thế giới mà đi đầu là hãng
Sun Microsystems đã xây dựng nhiều nhánh mới cho Java như: JavaMail (thư điện
tử), Java TAPI (viễn thông), Java3D (đồ họa 3 chiều), J2ME (ứng dụng cho thiết bị di
động),…
Hiện nay Java có các phiên bản sau:
- J2SE
TM
(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
TM
(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

TM
(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,…
1.2. Lịch sử của J2ME
J2ME (Java 2 Micro Edition) được phát triển từ kiến trúc Java Card, Embeded
Java và Personal Java của phiên bản Java 1.1. Đến sự ra đời của Java 2 thì Sun quyết
định thay thế Personal Java và đươc gọi với tên mới là Java 2 Micro Edition, hay viết
tắt là 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
(Micro có nghĩa là ‘nhỏ’ trong tiếng Anh)
ALH Team – AT8B Page 4
Lập trình Java trên mobile - J2ME
Hình 1.2. Lịch sử J2ME
1.3. Các phiên bản và đặc điểm
Có 2 phiên bản MIDP (Mobile Information Device Profile) chính trong ngôn
ngữ J2ME.
1.3.1. MIDP 1.0
Phiên bản này xuất hiện đầu tiên vào năm 2001, và phổ biến rộng rãi ở Mĩ (lần
đầu là Motorola). Với thế hệ ban đầu này các chương trình chỉ được hỗ trợ cơ bản
như giao diện chương trình, giao thức HTTP và các tính năng hỗ trợ âm thanh hay
khả năng viết game chưa được hỗ trợ.
 Các lớp và kiểu dữ liệu: Phần lớn các lớp mà các lập trình viên Java quen thuộc vẫn
còn được giữ lại (ví dụ như các lớp trong gói java.util như Stack, Vecto và Hastable
cũng như Enumeration).
 Hỗ trợ đối tượng Display: Đúng như tên gọi một chương trình MIDP sẽ hỗ trợ duy
nhất một đối tượng Display là đối tượng quản lý việc hiển thị dữ liệu trên màn hình
điện thoại.
 Hỗ trợ From và các giao diện người dùng.
 Hỗ trợ Timer và Alet.
 Cung cấp tính năng Record Management System (RMS) cho việc lưu trữ dữ liệu.

1.3.2. MIDP 2.0
Phiên bản MIDP 2.0 được Sun hỗ trợ đầy đủ, cộng với các API (Application
Program Interface) chính quy. Các tính năng về gửi SMS, kết nối với các tập tin âm
thanh, hình ảnh được hỗ trợ tốt. Ngoài ra, lập trình viên còn có thể viết các ứng dụng
kết nối bluetooth hay viết game trên thiết bị di động với J2ME.
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 (ví dụ như các chương trình không
thể kết nối tới server nếu thiếu sự chấp thuận của người sử dụng).
 Thêm các API hỗ trợ Multimedia: Một trong những cải tiến hấp dẫn nhất của MIDP
2.0 là tập các API media của nó. Các API này là một tập con chỉ hỗ trợ âm thanh của
Mobile Media API (MMAPI).
ALH Team – AT8B Page 5
Lập trình Java trên mobile - J2ME
 Mở rộng các tính năng của forrm. Nhiều cải tiến đã được đưa vào
APIjavax.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.
 Hỗ trợ các lập trình viên game bằng cách tung ra game API: Với MIDP 1.0 thì lập
trình viên phải tự mình viết code để quản lý các hành động của nhân vật cũng như
quản lý đồ họa. Việc này làm tăng kích thước file của sản phẩm cũng như việc xuất
hiện các đoạn mã bị lỗi. Được hưởng lợi nhất từ 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 tính năng đồ họa
cao cấp. Ý tưởng cơ bản của game API là việc giả định rằng một màn hình game là
một tập hợp các layer (lớp). Với game API nhà phát triển còn cung cấp các tính năng
như quản lý các thao tác bàn phím.
 Hỗ trợ kiểu ảnh RGB: một trong những cải tiến hấp dẫn cho các nhà phát triển MIDP
là việc biểu diễn hình ảnh dưới dạng các mảng số nguyên,cho phép MIDlet thao tác
với dữ liệu hình ảnh một cách trực tiếp.
1.4. Các đặc điểm khác của J2ME
Về bản chất J2ME là ngôn ngữ kế thừa và tinh lược của J2SE.

Bên cạnh đó, MIDP vì được viết cho thiết bị có cấu hình lẫn bộ nhớ thấp nên nó
không hỗ trợ:
 Phép tính đấu phẩy động (floating point): phép tính đò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 vậy
MIDP cũng không có.
 Bộ nạp class (Class Loader).
 Hỗ trơ từ khóa finalize như trong J2SE: việc “dọn dẹp” tài nguyên trước khi bi xóa
được đẩy về phía các lập trình viên.
 Hỗ trợ hạn chế thao tác bắt lỗi.
 Phần lớn các thư viện API cho swing và AWT (Abstract Window ToolKit) không thể
sử dụng được trong MIDP.
 Không hỗ trợ các tính năng quản lí file và thư mục.
1.5. Ưu điểm và nhược điểm của J2ME
1.5.1. Ưu điểm
• Cho phép phát triển các ứng dụng portable.
• Cộng đồng developer lớn.
• Có thể cung cấp được các nội dung động, trong khi WAP chỉ cung cấp các nội dung
tĩnh.
• Rich Client Application.
• Tính thống nhất của các ứng dụng trên các nền tảng.
• Tái sử dụng mã nguồn.
ALH Team – AT8B Page 6
Lập trình Java trên mobile - J2ME
1.5.2. Nhược điểm
• Ứng dụng Midlet sẽ không tác động được lên các ứng dụng khác trên cùng 1 thiết bị
hoặc hệ điều hành của nó.
• Không giống như J2SE, J2ME không có command-prompt.
• Một ứng dụng Midlet được kiểm soát bởi Application Management Software(AMS).
• AMS tương tác với các hoạt động của một ứng dụng Midlet và kiểm soát vòng đời
của nó. Nó có trách nhiệm bắt đầu, xử lý, dừng và hủy các midlets của ứng dụng khi

chạy.
• Nó có bộ nhớ rất hạn chế, vì vậy tốc độ xử lý tương đối chậm.
• Ứng dụng J2SE sử dụng cấu trúc Data Persistence, J2ME lưu dữ liệu thông qua hệ
thống quản lý các bản ghi RMS, thao tác duy nhất trên các mảng byte.
• Thiết bị J2ME không hỗ trợ bàn phím đầy đủ cho các phím ký tự đặc biết và số.
• Đồ họa không được đẹp, trải nghiệm người dùng kém.
• Thời gian, chi phí thiết kế giao diện khá tốn kém.
Core API(s) đã cũ so với chuẩn của các công nghệ hiện tại.
ALH Team – AT8B Page 7
Lập trình Java trên mobile - J2ME
CHƯƠNG II: KIẾN TRÚC J2ME
Hình 2.1a. Kiến trúc J2ME
2.1. Tổng quan kiến trúc J2ME
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ư:
• 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ể 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 thoại Nokia Qua đây ta thấy
khẩu hiệu “Write Once, Run Everywhere” của Java đã không còn đúng nữa, nhưng ta
cũng phải đánh giá cao sự nỗ lực của Sun trong việc tạo ra một môi trường phần mềm
chung cho vô số chủng loại thiết bị di động có trên thị trường.
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.
ALH Team – AT8B Page 8
Lập trình Java trên mobile - J2ME
 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 – JMV (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
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 2.1b. Phân khúc dòng thiết bị với các ngôn ngữ Java
Bảng so sánh các thông số kỹ thuật của CDC và CLDC
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
ALH Team – AT8B Page 9
CLDC CDC
RAM >=32Kb, <=512Kb >=256Kb
ROM >=128kb, <=512kb >=512kb
Nguồn năng lượng Có giới hạn (nguồn pin) Không giới hạn
Network Chậm Nhanh
Lập trình Java trên mobile - J2ME

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.
Hình 2.1c. Vị trí các profile trong kiến trúc J2ME
2.2. Các tầng của J2ME
J2ME được xây dựng bằng các tầng (layer) khác nhau để giấu đi việc thực hiện
phần cứng khỏi nhà phát triển nhằm giúp các lập trình viên viết các ứng dụng độc lập
với thiết bị di dộng, viết một lần đúng mọi chỗ, không cần quan tâm đến phần cứng
ALH Team – AT8B Page 10
Lập trình Java trên mobile - J2ME
thực sự. Các tầng của J2ME được xây dựng trên CLDC (Connected Limited Device
Configuration).
Hình 2.2. Các tầng kiến trúc J2ME
Mỗi tầng trên tầng hardware là tầng trừu tượng hơn cung cấp cho lập trình viên

nhiều giao diện lập trình ứng dụng (API – Application Program Interface) thân thiện
hơn.
2.2.1. Tầng cứng thiết bị (Device Hardware Layer)
Đây chính là cấu hình thực sự của thiết bị di dộng với cấu hình phần cứng như
bộ nhớ hay cấu hình của nó. Đây độc lập với J2ME nhưng nó là nơi xuất phát. Mỗi
thiết bị di động và các nhà sản xuất khác nhau thì thường có các bộ vi xử lý khác
nhau cùng với các tập mã lệnh khác nhau. Mục tiêu của J2ME là cung cấp một chuẩn
chung cho tất cả các thiết bị di động khác nhau này.
2.2.2. Tầng máy ảo Java (Java Virtual Machine Layer)
Vai trò của máy ảo Java hay KVM (K Virtual Machine) là dịch mã bytecode
được sinh ra từ chương trình Java đã biên dịch sang ngôn ngữ máy. Chính KVM sẽ
chuẩn hóa output của các chương trình Java cho các thiết bị di động khác nhau có thể
có bộ vi xử lý và tập lệnh khác nhau. Không có KVM, các chương trình Java phải
được biên dịch thành tập lệnh cho mỗi thiết bị di động. Như vậy lập trình viên phải
xây dựng nhiều đích cho mỗi loại thiết bị di động. Hình dưới đây biểu diễn tiến trình
xây dựng ứng dụng MIDlet hoàn chỉnh và vai trò của KVM.
ALH Team – AT8B Page 11
Lập trình Java trên mobile - J2ME
Hình 2.2.2. Tiến trình xây dựng MIDlet
Quá trình phát triển ứng dụng MIDlet vói IDE (Intergrated Development
Environment)
Lập trình viên: Bước đầu tiên là lập trình viên phải tạo mã nguồn Java, có thể
có nhiều tập tin (*.java).
Tr ê n IDE:
• Bộ biên dịch Java (Java Compiler): Biên dịch mã nguồn thành mã bytecode. Mã
bytecode này sẽ được KVM dịch thành mã máy. Mã bytecode đã biên dịch sẽ được
lưu trong các tập tin *.class và sẽ có một tập tin *.class sinh ra cho mỗi lớp Java.
• Bộ tiền kiểm tra (Preverifier): Kiểm tra tính hợp lệ của mã bytecode. Một trong
những yêu cầu an toàn của J2ME là bảo đảm mã bytecode chuyển cho KVM là hợp
lệ và không truy xuất các lớp hay bộ nhớ ngoài giới hạn của chúng. Do đó tất cả các

lớp đều phải được tiền kiểm tra trước khi chúng có thể được download về thiết bị di
động. Việc tiền kiểm tra được xem là một phần của môi trường phát triển làm cho
KVM có thể được thu nhỏ hơn. Bộ tiền kiểm tra sẽ gán nhãn lớp bằng một thuộc tính
(attribute) đặc biệt chỉ rằng lớp đó đã được tiền kiểm tra. Thuộc tính này tăng thêm
khoảng 5% kích thước của lớp và sẽ được kiểm tra bởi bộ kiểm tra trên thiết bị di
động.
• Trên IDE: Tạo tập tin JAR. IDE sẽ tạo một tập tin JAR chứa:
 Tất cả các tập tin *.class
 Các hình ảnh của ứng dụng. Hiện tại chỉ hỗ trợ tập tin *.png.
 Các tập tin dữ liệu có thể được yêu cầu bởi ứng dụng.
ALH Team – AT8B Page 12
Lập trình Java trên mobile - J2ME
 Một tập tin kê khai (manifest.mf) cung cấp mô tả về ứng dụng cho bộ
quản lý ứng dụng (application manager) trên thiết bị di động.
 Tập tin JAR được bán hoặc được phân phối đến người dùng đầu cuối.
Sau khi đã gỡ rối và kiểm tra mã lệnh trên trình giả lập (simulator), mã lệnh đã
sẵn sàng được kiểm tra trên điện thoại di động và sau đó được phân phối cho người
dùng.
Ngưòi dùng: Download ứng dụng về thiết bị di động. Người dùng sau đó
download tập tin JAR chứa ứng dụng về thiết bị di động. Trong hầu hết các điện thoại
di động, có ba cách để download ứng dụng:
• Kết nối cáp dừ liệu từ PC sang cổng dữ liệu của điện thoại di động: Việc này yêu cầu
người dùng phải có tập tin JAR thật sự và phần mềm truyền thông để download ứng
dụng sang thiết bị thông qua cáp dừ liệu.
• Cổng hồng ngoại IR (Infra Red) Port: Việc này yêu cầu người dùng phải có tập tin
JAR thật sự và phần mềm truyền thông để download ứng dụng sang thiết bị thông
qua cổng hồng ngoại.
• OTA (Over the Air): Sử dụng phương thức này, người dùng phải biết địa chỉ URL chỉ
đến tập tin JAR.
Tr ê n thiết bi di đông:

• Bộ tiền kiểm tra: Kiểm tra mã bytecode.
Bộ tiền kiểm tra kiểm tra tất cả các lớp đều có một thuộc tính hợp lệ đã được
thêm vào bởi bộ tiền kiểm tra trên trạm phát triển ứng dụng. Nếu tiến trình tiền kiểm
tra thất bại thì ứng dụng sẽ không được download về thiết bị di động.
• Bộ quản lý ứng dụng: Lưu trữ chương trình.
Bộ quản lý ứng dụng trên thiết bị di động sẽ lưu trữ chương trình trên thiết bị di
động. Bộ quản lý ứng dụng cũng điều khiển trạng thái của ứng dụng trong thời gian
thực thi và có thể tạm dừng ứng dụng khi có cuộc gọi hoặc tin nhắn đến.
• Ngưòi dùng: Thực thi ứng dụng.
Bộ quản lý ứng dụng sẽ chuyển ứng dụng cho KVM để chạy trên thiết bị di
động.
• KVM: Thực thi mã bytecode khi chương trình chạy.
KVM dịch mã bytecode sang ngôn ngữ máy của thiết bị di động để chạy.
2.2.3. Tầng cấu hình
Tầng J2ME kế trên tầng KVM là CLDC hay cấu hình thiết bị kết nối giới hạn.
Mục đích của tầng này là cung cấp một tập tối thiểu các thư viện cho phép một ứng
dụng Java chạy trên thiết bị di động. Nó cung cấp cơ sở cho tầng Hiện trạng, tầng này
sẽ chứa nhiều API chuyên biệt hơn.
ALH Team – AT8B Page 13
Lập trình Java trên mobile - J2ME
CLDC - Connected Limited Device Configuration:
Phạm vi: Định nghĩa các thư viện tối thiểu và các API.
Định nghĩa:
 Tương thích ngôn ngữ JVM
 Các thư viện lõi
 I/O
 Mạng
 Bảo mật
 Quốc tế hóa
Không định nghĩa:

 Chu kỳ sống ứng dụng
 Giao diện người dùng
 Quản lý sự kiện
 Giao diện ứng dụng và người dùng
Các lớp lỗi Java cơ bản, input/output, mạng, và bảo mật được định nghĩa trong
CLDC. Các API hữu dụng hơn như giao diện người dùng và quản lý sự kiện được
dành cho hiện trạng MIDP.
2.2.4. Tầng hiện trạng
Tầng J2ME cao nhất là tầng hiện trạng và mục đích của nó là định nghĩa các API
cho các thiết bị di động. Một thiết bị di động có thể hỗ trợ nhiều hiện trạng. Một hiện
trạng có thể áp đặt thêm các giới hạn trên các loại thiết bị di động (như nhiều bộ nhớ
hơn hay độ phân giải màn hình cao hơn). Hiện trạng là tập các API hữu dụng hơn cho
các ứng dụng cụ thể. Lập trình viên có thể viết một ứng dụng cho một hiện trạng cụ
thể và không cần quan tâm đến nó chạy trên thiết bị nào.
ALH Team – AT8B Page 14
Lập trình Java trên mobile - J2ME
CHƯƠNG III: MIDLET
Các ứng dụng J2ME được gọi là MIDlet (Mobile Information Device Applet).
Hình 3.1a. MIDlet
Thông báo import dùng để truy xuất các lớp của CLDC và MIDP.
Lớp chính của ứng dụng được định nghĩa là lớp kế thừa lớp MIDlet của MIDP.
Có thể chỉ có một lớp trong ứng dụng kế thừa lớp này. Lớp MIDlet được trình quản
lý ứng dụng trên điện thoại di động dùng để khởi động, dừng, và tạm dừng MIDlet
(ví dụ, trong trường hợp có cuộc gọi đến).
3.1. Bộ khung MIDlet
Một MIDlet là một lớp Java kế thừa (extend) của lớp trừu tượng
java.microedition.midlet.MIDlet và thực thi (implement) các phương thức startAppO,
pauseAppO, và destroyApp().
Hình 3.1b. Bộ khung yêu cầu tối thiểu cho một ứng dụng MIDlet
Bộ khung MIDlet

1) Phát biểu import
Các phát biểu import được dùng để include các lớp cần thiết từ các thư viện
CLDC và MIDP.
2) Phần chính của MIDlet
MIDlet được định nghĩa như một lóp kế thừa lớp MIDlet. Trong ví dụ này
MIDletExample là bắt đầu của ứng dụng.
3) Hàm tạo (Constructor)
ALH Team – AT8B Page 15
Lập trình Java trên mobile - J2ME
Hàm tạo chỉ được thực thi một lần khi MIDlet được khởi tạo lần đầu tiên. Hàm
tạo sẽ không được gọi lại trừ phi MIDlet thoát và sau đó khởi động lại.
4) startApp()
Phương thức startApp() được gọi bởi bộ quản lý ứng dụng khi MIDlet được khởi
tạo, và mỗi khi MIDlet trở về từ trạng thái tạm dừng.
5) pauseApp()
Phương thức pauseApp() được gọi bởi bộ quản lý ứng dụng mỗi khi ứng dụng
cần được tạm dừng (ví dụ, trong trường họp có cuộc gọi hoặc tin nhắn đến). Cách
thích họp để sử dụng pauseApp() là giải phóng tài nguyên và các biến để dành cho
các chức năng khác trong điện thoại trong khi MIDlet được tạm dừng, cần chú ý rằng
khi nhận cuộc gọi đến hệ điều hành trên điện thoại di động có thể dừng KVM thay vì
dừng MIDlet. Việc này không được đề cập trong MIDP mà đó là do nhà sản xuất
quyết định sẽ chọn cách nào.
6) destroyApp()
Phương thức destroyApp() được gọi khi thoát MIDlet. (ví dụ khi nhấn nút exit
trong ứng dụng). Nó chỉ đơn thuần là thoát MIDlet. Nó không thật sự xóa ứng dụng
khỏi điện thoại di động. Phương thức destroyApp() chỉ nhận một tham số Boolean.
Nếu tham số này là true, MIDlet được tắt vô điều kiện. Nếu tham số là false, MIDlet
có thêm tùy chọn từ chối thoát bằng cách ném ra một ngoại lệ
MIDletStateChangeException.
Tóm tắt các trạng thái khác nhau của MIDlet:

 Tạo (Created) => Hàm tạo MIDletExample() được gọi một một lần.
 Hoạt động (Active) => Phương thức startApp() được gọi khi chương trình bắt đầu
hay sau khi tạm dừng.
 Tạm dừng (Paused) => Phương thức pauseApp() được gọi. Có thể nhận các sự kiện
timer.
 Hủy (Destroyed) => Phương thức destroy() được gọi.
ALH Team – AT8B Page 16
Lập trình Java trên mobile - J2ME
3.2. Chu kỳ sống của MIDlet
Hình 3.2. Chu kỳ sống của MIDlet
Chu kỳ sống của MIDlet
Khi người dùng yêu cầu khởi động ứng dụng MIDlet, bộ quản lý ứng dụng sẽ
thực thi MIDlet (thông qua lớp MIDlet). Khi ứng dụng thực thi, nó sẽ được xem là
đang ở trạng thái tạm dừng. Bộ quản lý ứng dụng gọi hàm tạo và hàm startApp().
Hàm startApp() có thể được gọi nhiều lần trong suốt chu kỳ sống của ứng dụng. Hàm
destroyApp()chỉ có thể gọi từ trạng thái hoạt động hay tạm dừng.
Lập trình viên cũng có thể điều khiển trạng thái của MIDlet.
Các phương thức dùng để điều khiển các trạng thái của MIDlet:
 resumeRequest(): Yêu cầu vào chế độ hoạt động (Ví dụ: Khi MIDlet tạm dừng, và
một sự kiện timer xuất hiện)
 notifyPaused(): Cho biết MIDlet tự nguyện chuyển sang trạng thái tạm dừng (Ví dụ:
Khi đợi một sự kiện timer)
 notifyDestroyed(): Sẵn sàng để hủy (Ví dụ: Xử lý nút nhấn Exit)
Lập trình viên có thể yêu cầu tạm dừng MIDlet trong khi đợi một sự kiện timer
hết hạn. Trong trường hợp này, phương thức notifyPaused() sẽ được dùng để yêu cầu
bộ quản lý ứng dụng chuyển ứng dụng sang trạng thái tạm dừng.
3.3. Tập tin JAR
Các lớp đã biên dịch của ứng dụng MIDlet được đóng gói trong một tập tin JAR
(Java Archive File). Đây chính là tập tin JAR được download xuống điện thoại di
động.

Tập tin JAR chứa tất cả các tập tin class từ một hay nhiều MIDlet, cũng như các
tài nguyên cần thiết. Hiện tại, MIDP chỉ hỗ trợ định dạng hình .png (Portable
ALH Team – AT8B Page 17
Lập trình Java trên mobile - J2ME
Network Graphics). Tập tin JAR cũng chứa tập tin kê khai (manifest file) mô tả nội
dung của MIDlet cho bộ quản lý ứng dụng. Nó cũng phải chứa các tập tin dữ liệu mà
MIDlet cần. Tập tin JAR là toàn bộ ứng dụng MIDlet. MIDlet có thể load và triệu gọi
các phương thức từ bất kỳ lớp nào trong tập tin JAR, trong MIDP, hay CLDC. Nó
không thể truy xuất các lóp không phải là bộ phận của tập tin JAR hay vùng dùng
chung của thiết bị di động.
3.4. Tập tin kê khai và JAD
Tập tin kê khai (manifest.mf) và tập tin JAD (Java Application Descriptor) mô tả
các đặc điểm của MIDlet. Sự khác biệt của hai tập tin này là tập tin kê khai là một
phần của tập tin JAR còn tập tin JAD không thuộc tập tin JAR. Ưu điểm của tập tin
JAD là các đặc điểm của MIDlet có thể được xác định trước khi download tập tin
JAR. Nói chung, cần ít thời gian để download một tập tin văn bản nhỏ hơn là
download một tập tin JAR. Như vậy, nếu người dùng muốn download một ứng dụng
không được thiết bị di động hỗ trợ (ví dụ, MIDP 2.0), thì quá trình download sẽ bị
hủy bỏ thay vì phải đợi download hết toàn bộ tập tin JAR.
Mô tả nội dung của tập tin JAR:
Các trường yêu cầu
 Manifest-Version//Phiên bản tập tin Manifest
 MIDlet-Name // Tên bộ MIDlet (MIDlet suite)
 MIDlet-Version // Phiên bản bộ MIDlet
 MIDlet-Vendor // Nhà sản xuất MIDlet
 MIDlet-<n> for each MIDlet // Tên của MIDlet
 MicroEdtion-Profile // Phiên bản hiện trạng
 MicroEdtion-Configuration // Phiên bản cấu hình
Ví dụ một tập tin manifest.mf:
MIDlet-Name: CardGames

MIDlet-Version: 1.0.0
MIDlet-Vendor: Sony Ericsson
MIDlet-Description: Set of Card Games
MIDlet-Info-URL:
MIDlet-Jar-URL: />MIDlet-Jar-Size: 1063
MicroEdtion-Profíle: MIDP-1.0
MicroEdtion-Configuration: CLDC-1.0
MIDlet-1: Solitaire, /Sol.png, com.semc.Solitaire
MIDlet-2: BlackJack, /Blkjk.png, com.semc.BlackJack
ALH Team – AT8B Page 18
Lập trình Java trên mobile - J2ME
Tập tin JAD chứa cùng thông tin như tập tin manifest. Nhưng nó nằm ngoài tập
tin JAR.
Các thuộc tính MIDlet-Name, MIDlet-Version, và MIDlet-Vendor phải được lặp
lại trong tập tin JAD và JAR. Các thuộc tính khác không cần phải lặp lại. Giá trị
trong tập tin mô tả sẽ đè giá trị của tập tin manifest.
3.5. Bộ MIDlet
Một tập các MIDlet trong cùng một tập tin JAR được gọi là một bộ MIDlet
(MIDlet suite). Các MIDlet trong một bộ MIDlet chia sẻ các lớp, các hình ảnh, và dữ
liệu lưu trữ bền vững. Để cập nhật một MIDlet, toàn bộ tập tin JAR phải được cập
nhật.
Hình 3.5. Hai bộ MIDlet
Các bộ MIDlet
Trong hình trên, một bộ MIDlet chứa MIDletl, MIDlet2, và MIDlet3. Bộ kia chỉ
chứa MIDlet4. Ba MIDlet trong bộ đầu tiên truy xuất các lớp và dữ liệu của nhau
nhưng không truy xuất đến các lớp hay dữ liệu của MIDlet4. Ngược lại, MIDlet4
cũng không truy xuất được các lớp, hình ảnh, và dữ liệu của chúng.
ALH Team – AT8B Page 19
Lập trình Java trên mobile - J2ME
CHƯƠNG IV: ĐỐI TƯỢNG DISPLAY

4.1. Khái niệm và phân loại
Mỗi MIDlet có 1 tham chiếu đến 1 đối tượng Display. Đối tượng này cung cấp
các thông tin về màn hình cũng như một số phương thức dùng cho việc hiển thị các
đối tượng khác trên màn hình. Có thể xem Display có nhiệm vụ quản lý việc hiển thị
của màn hình. Chức năng của nó là quyết định danh sách các thành phần cần xuất
hiện trên màn hình cũng như thời điểm phù hợp để hiển thị chúng.
Mỗi đối tượng Display có rất nhiều đối tượng Displayable. Đối tượng
Displayable là đối tượng có thể nhìn thấy trực tiếp qua màn hình. Bản thân MIDP
chứa 2 lớp con của đối tượng Displayable là Screen và Canvas:
 Public abstract class Displayable
 Public abstract class Screen extends Displayable
 Public abstract class Canvas extends Displayable
Phân cấp đối tượng dùng để thể hiện giao diện người dùng MIDP
Hình 4.1. Phân cấp đối tượng dùng để thể hiện giao diện người dùng MIDP
Các lớp MIDP cung cấp hai mức giao diện người dùng: giao diện người dùng
cấp thấp và giao diện người dùng cấp cao. Giao diện người dùng cấp thấp dùng cho
các ứng dụng trò chơi yêu cầu phải vẽ lên màn hình. Giao diện người dùng cấp cao
dùng cho văn bản hay form.
4.2. Giao diện người dùng cấp cao
Giao diện người dùng cấp cao là lớp con của lớp screen. Nó cung cấp các thành
phần như textbox, from, list, và alert.
4.2.1. TextBox
ALH Team – AT8B Page 20
Lập trình Java trên mobile - J2ME
Lớp TextBox cho phép người dùng nhập và soạn thảo văn bản. Có thể định
nghĩa số ký tự tối đa, giới hạn loại nhập dữ liệu (số học, mật khẩu, email…) và hiệu
chỉnh nội dung của textbox.
Phương thức dụng 1 TextBox:
 TextBox ( String title, String text, int maxSize, int constraints)
4.2.2. List

Lớp List là một Srceen chứa các danh sách lựa chọn chẳng hạn như radio,
button. Người dùng có thể tương tác với list và lựa chọn một hay nhiều item.
4.2.3. Alert
Một Alert đơn giản là 1 hộp thoại nhỏ . Có 2 loại Alert là :
 Modal: loại thông báo được trình bày cho tới khi người dùng ấn đồng ý.
 Non-Modal: loại thông báo chỉ được trình bày trong 1 vài giây nhất định.
Các phương thức dựng Alert:
 Alert (String title)
 Alert (String title, String alertText, Image alertImage, AlertType
alertType)
Thành phần AlertType dùng âm thanh để thông báo cho người dùng biết sự kiện
xảy ra như: thông báo, xác nhận, báo lỗi và cảnh báo cùng với 1 đoạn âm thanh nào
đó.
Alert có thể tham chiếu tới đối tượng AlertType.
4.2.4. Form và các Form Item
Form là lớp hữu dụng nhất của các lớp Sceen vì nó cho phép chứa nhiều item
trên cùng một màn hình. Các item có thể là DateField, TextFiel, ImageItem,
TextItem, ChoiceGroup.
Sử dụng form cho phép nhiều Item khác nhau trong cùng một màn hình, sau khi
đã định nghĩa đối tương Form sau đó sẽ thêm vào các Item. Mỗi Item là một lớp con
của Item.
a. StringItem: public class Stringltem extends Item
StringItem dùng để hiển thị chuỗi văn bản hoặc 1 nhãn. Người dùng không thể
thay đổi chuỗi hay nhạn khi chương trình đnag chạy. StringItem không nhận ra sự
kiện
Phương thức dựng của lớp StringItem:
 StringItem( String Label, String Text)
ALH Team – AT8B Page 21
Lập trình Java trên mobile - J2ME
b. Image Item và Image: public class Imageltem extends Item

Hai lớp dùng để hiển thị hình ảnh là : Image và ImageItem.
Image dùng để tạo ra 1 đối tượng hình ảnh và giữ toong tin như chiều cao, chiều
rộng (dù hình ảnh có bị biến đổi).
ImageItem sẽ mô tả tấm ảnh đó được hiển thị như thế nào.
Các phương thức dựng 1 lớp Image hay 1 lớp ImageItem:
 Image createImage (String name)
 Image createImage (Image source)
 Image createImage ( byte[]imageDate,int imageOffset,int imageLenght)
 Image createImage (int width, int height)
 Image createImage( Image image, int x,int y, int width, int height, int
transform)
 Image createImage (InputStream stream)
 Image createRGBImage(int[] rgb, int width, int height, boolean
processAlpha )
 ImageItem (String label, Image itm, int loyoua, String altText)
c. Text Field: public class TextField extends Item
TextField tương tự như tất cả các đối tượng nhập văn bản tiêu biểu nào. Bạn có
thể chỉ định 1 nhãn, số ký tự tối dược phép nhập và loại dữ liệu được nhập. Ngoài ra
TextField còn cho phép bạn nhập vào mật khẩu với các ký tự nhập vào và sẽ được
che bởi các ký tự mặt nạ.
Phương thức dựng của lớp TextField :
 TextField(String label,String text, int maxSize, int constraints)
Thành phần contraints là phương tiện để xác định loại dữ liệu nào được phép
nhập vào TextField, với những tham số bắt buộc sau:
 ANY: cho phép nhập bất kỳ ký tự nào.
 EMAILADDR: chỉ cho phép nhập vào các địa chỉ email hợp lệ.
 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ự hợp lệ bên trong URl.
 PASSWORD : che giấu tất cả các ký tự nhập vào.

d. DataField: public class DateField extends Item
DataFiela cung cấp phương tiện trực quan để thao tác đối tượng Date được định
nghĩa trong java.util.Date. Khi tạo 1 đối tượng bạn có thể chỉnh sửa ngày, chỉnh sửa
giờ hoặc cả 2.
ALH Team – AT8B Page 22
Lập trình Java trên mobile - J2ME
Phương thức để gọi DateField gồm:
 DateField (String label, int mode)
 DateField(String label, int mode, TimeZone timeZone)
Các mode tương ứng của lớp DateField
 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.
e. ChoiceGroup: public class ChoiceGroup extends Item Implements Choice
ChoiceGroup cho phép người dùng chọn từ 1 danh sách đầu vào đã được định
nghĩa trước. ChoiceGroup có 2 loại:
 Multi-selection (cho phép chọn nhiều mục): nhóm này liên quan tới checkbox
 Exclusive-selection (cho phép chọn một mục): nhóm này liên quan tới radio button.
f. Gause: public class Gauge extends Item
Một thành phần Gause là 1 kiểu thành phần giao diện thường được dùng để mô
tả múc độ hoàn thiện 1 công việc.
Gause chia làm 2 loại:
 Loại tương tác: cho phép người dùng thay đổi Gause.
 Loại không tương tác: đòi hỏi người dùng phát triển cập nhật Gause.
g. Spacer: Spacer là thành phần không nhìn thấy, được dùng để định vị trí cho các
đối tượng khác trên màn hình hiển thị. Chúng ta có thể dùng Spacer để chỉ rõ khoảng
trắng theo chiều dọc và chiều ngang giữa các thành phần, đơn giản bằng cách chỉ ra
chiều dài và chiều rộng cho từng cái. Vì Spacer là thành phần không nhìn thấy nên nó
không có sự kiện
h. CustomItem: Thành phần CustomItem cho phép bạn tạo ra những thành phần

Item của chính bạn. Những thành phần này cũng giống như những Item khác là cũng
có thể được đặt vào trong Form và có thể nhận biết và xử lý sự kiện.
CustomItem được vẽ lên màn hình hiển thị bằng phương thức paint(). Vì thế nó
sẽ tùy thuộc vào đoạn mã được bạn hiện thực bên trong phương thức paint(). Quá
trình tạo ra một đối tượng CustomItem cũng không khác các đối tượng có sẵn trên
nền Java.
4.2.5. Ticker
Thành phần Ticker được dùng để thêt hiện 1 đoạn chuỗi chạy theo chiều ngang.
Tham số duy nhất của thành phần Ticker là đoạn văn bản được trình bày. Tốc độ và
chiều cuốn được xác định bởi việc cài đặt trên thiết bị.
Phương thức dựng của Ticker:
 Ticker (String str)
ALH Team – AT8B Page 23
Lập trình Java trên mobile - J2ME
4.3. Giao diện người dùng cấp thấp
Nếu các hàm API cấp cao cho phép ta tạo giao diện cho các ứng dụng theo
chuẩn , thì các hàm API cấp thấp cho phép ta có thể thể hiện ý tưởng của mình với 2
lớp: Canvas và Graphics.
Canvas là khung vẽ cho phép người dùng có khả năng vẽ trên thiết bị trình bày
cũng như xử lý sự kiện.
Graphics cung cấp các cung cụ thực sự để vẽ.
4.3.1. Lớp Canvas và kỹ thuật sử lý đồ họa
a. Tạo đối tượng Canvas
Bước đầu tiên để làm việc với 1 lớp Canvas là tạo 1 lớp thừa kế từ lớp Canvas
class TestCanvas extends Canvas implements CommandListener{
private Command cmdExit;
display = Display.getDisplay(this);
cmdExit= new Command(“Exit”, Command.Exit,1);
add Command(cmdExit);
setCommandListener(this);

protected void paint(Graphic g)
{
}
}
TestCanvas = new TestCanvas(this);
b. Hệ thống tọa độ
Hệ thống tọa độ có tâm là điểm trái phía trên của thiết bị trình bày x,y=(0,0), giá
trị x tăng dần về phía phải, giá trị y tăng dần về phía trái. Khi vẽ độ dài bút sẽ là 1
điểm ảnh.
Phương thức xác định chiều rộng và chiều cáo của Canvas:
 int getWidth(): dùng để xác định rộng của Canvas.
ALH Team – AT8B Page 24
Lập trình Java trên mobile - J2ME
 int getHeight(): dùng để xác định chiều cao của Canvas.
c. Vẽ trên 1 đối tượng Cavas
Phương thức bên của lớp Cavas cho phép bạ vẽ các hình dạng, vẽ ảnh và xuất
chuỗi .
Chúng ta có thể sử dụng 1 tham chiếu đến đối tượng Graphic bên trong thân
phương thức paint() để thực hiện công việc vẽ thực sự.
d. Sự kiện hành động
Cũng như các thành phần Form, List và TextBox, 1 Canvas có thể xử lý các sự
kiện Command.
Đoạn mã minh họa việc xử lý sự kiện
class TestCanvas extends Canvas implements CommandListener{
private Command cmdExit;

display = Display.getDisplay(this);
cmdExit= new Command(“Exit”, Command.EXIT,1);
add Command(cmdExit);
setCommandListener(this);

protected void paint(Graphic g)
{

}
}
public void commandAction(Command c, Displayable d)
{
if (c==cmdExit)

}
e. Mã phím
Trong trường hợp xử lý các hành động của các phím mềm, một Canvas có thể
truy cập đến 12 mã phím: KEY_NUM0, KEY_NUM1, KEY_NUM2, KEY_NUM3,
KEY_NUM4, KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8,
KEY_NUM9, KEY_STAR, KEY_POUND (các phím này được đảm bảo trên bất kỳ
thiết bị MIDP nào).
Các phương thức để xử lý các mã phím:
 void keyPress(int keyCode)
ALH Team – AT8B Page 25

×