Tải bản đầy đủ (.pdf) (80 trang)

Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java

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 (2.12 MB, 80 trang )

MỤC LỤC
LỜI NÓI ĐẦU
DANH SÁCH HÌNH VẼ VÀ BẢNG BIỂU
Chương 1 TÌM HIỂU VỀ J2ME............................................................... 1
1.1. Giới thiệu J2ME ............................................................................ 1
1.1.1. Lịch sử ..................................................................................... 1
1.1.2. Lý do chọn J2ME.................................................................... 2
1.1.3. Kiến trúc của J2M .................................................................. 2
1.1.4 Sự khác nhau giữa ngôn ngữ Java trên CLDC với Java
thông thường..................................................................................... 5
1.1.5. Giới thiệu MIDP ..................................................................... 9
1.1.6. Môi trường phát triển J2ME................................................ 10
1.2. Các thành phần giao diện ở mức cao của ứng dụng MIDP........11
1.2.1. Đối tượng Display, Displayable và Screens ......................... 12
1.2.2. Thành phần Form và Items.................................................. 13
1.2.3. Thành phần List, TextBox, Alert và Ticker ........................ 18
1.3. Các thành phần giao diện ở mức thấp của ứng dụng MIDP......20
1.3.1 Các hàm API ở mức thấp ...................................................... 20
1.3.2. Lớp Canvas ........................................................................... 21
1.3.3. Lớp Graphics ........................................................................ 26
1.3.4. Các hàm API dùng để lập trình game ................................. 32
1.4. Xử lý sự kiện .................................................................................33
1.4.1. Đối tượng Command ............................................................ 33
1.5. Record Management System........................................................34
1.5.1 Persistent Storage Through the Record Store...................... 34
1.5.2. Các vấn đề liên quan đến RMS ............................................ 36
1.5.3. Các hàm API trong RMS ..................................................... 37
1.5.4. Duyệt Record với RecordEnumeration ............................... 38


1.5.5. Sắp xếp các record với interface RecordComparator ........ 40


1.5.6. Searching with RecordFilter ................................................ 41
Chương 2 PHÂN TÍCH, THIẾT KẾ ỨNG DỤNG ............................. 43
2.1 Khảo sát hiện trạng .......................................................................43
2.2. Phân tích bài toán .........................................................................44
2.2.1. Mô tả hoạt động .................................................................... 44
2.2.2. Phân tích và xác định yêu cầu .............................................. 44
2.3 Thiết kế ứng dụng..........................................................................45
2.3.1 Lược đồ sử dụng .................................................................... 45
2.3.2 Đặc tả Ucase ........................................................................... 46
2.3.3 Các biểu đồ hoạt động ........................................................... 51
2.3.4 Thiết kế các lớp ...................................................................... 55
2.4. Sản phẩm.......................................................................................65
KẾT LUẬN............................................................................................. 68
CÁC THUẬT NGỮ ĐƯỢC SỬ DỤNG ................................................ 70
TÀI LIỆU THAM KHẢO...................................................................... 72


LỜI NÓI ĐẦU
Có thể nói rằng đề tài về bản đồ giao thông không mới. Trong các năm qua, đã
có nhiều người nghiên cứu về đề tài này, sản phẩm ứng dụng trong thực tế cũng
có khá nhiều và được đánh giá khá tốt. Tuy nhiên ứng dụng bản đồ giao thông
trên điện thoại di động lại chưa có nhiều lắm, hơn nữa các chương trình ứng dụng
chủ yếu xây dựng bản đồ cho các thành phố lớn như Hà Nội, thành phố Hồ Chí
Minh... Còn ứng dụng bản đồ giao thông thành phố Thái Nguyên trên điện thoại
di động gần như là chưa có.
Trong thời điểm hiện nay, trên thế giới cũng như tại Việt Nam, thị trường cho
điện thoại di động cũng trở nên sôi động hơn bao giờ hết. Đó là do thu nhập của
người dân ngày càng được nâng cao cùng với nhu cầu trao đổi thông tin ngày
càng tăng khiến cho nhu cầu sử dụng các phương tiện thông tin liên lạc cũng tăng
theo, trong đó số lượng người dân sử dụng điện thoại di động tăng nhiều nhất.

Các nhà sản xuất điện thoại di động nắm bắt được nhu cầu này của người dân,
đặc biệt là của giới trẻ ưa chuộng những sản phẩm công nghệ cao, và yêu cầu
cạnh tranh giữa các hãng sản xuất với nhau nên liên tục tung ra nhiều sản phẩm
với nhiều tính năng, cấu hình ngày càng được nâng cao, nhất là trong một vài
năm trở lại đây đã xuất hiện dòng điện thoại được xem như là một máy tính xách
tay bỏ túi, hơn nữa giá thành mà nhà sản xuất đưa ra ngày càng giảm. Chiếc điện
thoại di động ngày nay không phải là một món hàng quá xa xỉ và ngày càng có
nhiều người sở hữu được phương tiện trao đổi thông tin hữu ích này.
Cùng với sự phát triển của thị trường điện thoại di động là sự phát triển mạnh
mẽ của xu hướng lập trình phần mềm ứng dụng cho các thiết bị này. Phần mềm
cho các điện thoại di động hiện nay rất đa dạng mà chủ yếu là các trò chơi, các
chương trình tiện ích như đo lường, từ điển, nghe nhạc, xem phim...
Với các lý do trên em đã chọn đề tài “Xây dựng bản đồ Thái Nguyên trên điện
thoại di động có hỗ trợ Java” với mục tiêu là xây dựng bản đồ thành phố Thái
Nguyên bằng ngôn ngữ lập trình Java, có thể thực thi trên nhiều điện thoại di
động khác nhau. Nhờ vào phần mềm này người sử dụng có thể: xem bản đồ, tra
cứu tên đường, tên các địa điểm, các công trình công cộng như bệnh viện, trường


học, chợ..., đặc biệt là giúp người sử dụng có thể xác định lộ trình ngắn nhất để
đi từ địa điểm này tới một địa điểm khác. Đây có thể nói là một ứng dụng rất hữu
ích, rất thực tế và tiện dụng đối với nhiều người, đặc biệt là các bạn trẻ, và những
người bận rộn trong việc đi lại.
Nói đến lập trình cho điện thoại di động, tất cả những ai đã và đang dùng điện
thoại di động, nhất là những ai đã từng là lập trình viên, thì đều thấy được các trở
ngại đó là khả năng xử lý của bộ vi xử lý điện thoại rất yếu và dung lượng của bộ
nhớ rất nhỏ. Tuy nhiên, với sự phát triển của khoa học công nghệ hiện nay, các
hãng sản xuất điện thoại di động đã tung ra thị trường dòng điện thoại có thẻ nhớ,
và nâng cấp bộ nhớ của điện thoại lớn hơn 1GB. Song các trở ngại trên vẫn gây
khó khăn không nhỏ đến việc tổ chức dữ liệu cho phần mềm, bởi thông tin về

bản đồ giao thông là lớn, việc lưu trữ và truy xuất chúng cũng khá phức tạp.
Thêm vào đó, các thư viện hàm trong ngôn ngữ Java được hỗ trợ cho điện thoại
thì bị hạn chế, lược bỏ. Chính vì những hạn chế trên, trong đề tài này em không
sử dụng việc hiển thị bản đồ bằng cách vẽ các thành phần của bản đồ như đường,
điểm mà em đã sử dụng ảnh tĩnh được quét để làm phần hiển thị của bản đồ. Các
dữ liệu của bản đồ được xây dựng và đặt vào file ngoài.
Nội dung bài báo cáo này được chia thành 2 chương như sau:
Chương 1: Tìm hiểu về J2ME. Chương này nêu kiến thức tổng quan về
J2ME và các phương thức xây dựng cơ bản trong lập trình J2ME.
Chương 2: Phân tích, thiết kế bài toán. Phân tích các yêu cầu nghiệp vụ,
đặc tả các chi tiết ứng dụng ở mức phân tích, thiết kế. Cuối chương là mô tả
sản phẩm đã xây dựng được
Kết luận: Đánh giá kết quá đã đạt được, trình bày các ưu điểm khuyết điểm
và hướng phát triển mở rộng cho phần mềm
Các thuật ngữ được sử dụng: Liệt kê và giải thích các thuật ngữ đã được
sử dụng.
Em xin chân thành cảm ơn các thầy, cô trong khoa Công nghệ thông tin
Trường đại học Thái Nguyên đã tận tình dạy bảo, truyền đạt những kinh nghiệm


quý báu của mình cho em trong suốt thời gian học tập tại trường. Em xin kính
chúc các thầy cô luôn luôn mạnh khỏe và ngày càng thành công hơn nữa.
Đặc biệt em xin bày tỏ lòng biết ơn sâu sắc đến cô Phạm Thị Thương, người
đã tận tình hướng dẫn em trong suốt thời gian thực hiện đề tài.
Mặc dù em đã cố gắng rất nhiều trong quá trình thực hiện, nhưng chắc chắn đề
tài vẫn còn nhiều thiếu sót. Em rất mong nhận được nhiều sự góp ý phê bình của
các thầy cô, và các bạn.
Một lần nữa, em xin chân thành cảm ơn!
Thái Nguyên, tháng 5 năm 2008



DANH SÁCH HÌNH VẼ VÀ BẢNG BIỂU
DANH SÁCH HÌNH VẼ
Tên

Mô tả

Trang

hình
1.1

Các phiên bản khác nhau của Java và lĩnh vực ứng dụng

1

1.2

Kiến trúc tổng quát của J2ME

2

1.3

Giao diện của chương trình Wireless Toolkit 2.5.2

11

1.4


Minh họa vòng đời của một MIDlet

12

1.5

Mối quan hệ giữa Display, Displayable, Screen

13

1.6

Cây phân cấp các lớp hiển thị ở mức cao

19

1.7

Minh họa các dạng của List

19

1.8

Hệ tọa độ trên màn hình điện thoại di động

21

1.9


Vị trí các điểm neo drawString()

29

1.10

Mô tả kết quả của hàm drawString()

30

1.11

Vị trí các điểm neo trong drawImage()

32

1.12

Mô tả các truy cập RecordStore của các MIDlet

36

2.1

Lược đồ sử dụng

45

2.2


Sequence Diagram SeachStreets

52

2.3

Collaboration Diagram SearchStreets

53

2.4

Sequence Diagram SeachPlaces

54

2.5

Collaboration Diagram SearchPlaces

55

2.6

Thiết kế lớp MapMIDlet

57

2.7


Thiết kế lớp MapCanvas

58

2.8

Thiết kế lớp IndexList

61

2.9

Thiết kế lớp Index

61

2.10

Thiết kế lớp GroupList

62

2.11

Thiết kế lớp ShortestForm

63

2.12


Thiết kế lớp XMLAttribute

63

2.13

Thiết kế lớp SettingsForm

64


2.14

Sơ đồ lớp mức thiết kế (các lớp biên)

65

2.15

Giao diện ban đầu khởi chạy ứng dụng

66

2.16

Giao diện tìm kiếm tên địa điểm

66

2.17


Kết quả tìm kiếm địa điểm

67

2.18

Form thiết lập các tùy chọn riêng cho người dùng

67

DANH SÁCH BẢNG BIỂU
Tên bảng

Mô tả

Trang

1-1

Phân loại CDC và CLDC

4

1-2

Danh sách một số hàm trong Gauge

15


1-3

Mô tả lưu trữ trong RMS

35

1-4

Các hàm API trong RMS

37-38

1-5

Các phương thức trong RecordEnumeration

39-40

2-0

Danh sách các yêu cầu nghiệp vụ

2-1

Danh sách một số lớp chính

2-2

Danh sách các thuộc tính của lớp MapMIDlet


56

2-3

Danh sách các phương thức của lớp MapMIDlet

57

2-4

Danh sách các thuộc tính lớp MapCanvas

59

2-5

Danh sách các phương thức của lớp MapCanvas

60

2-6

Danh sách các thuộc tính của lớp IndexList

61

2-7

Danh sách các phương thức của lớp IndexList


61

2-8

Danh sách các thuộc tính của lớp Index

62

2-9

Danh sách các phương thức của lớp Index

62

2-10

Danh sách các thuộc tính của lớp GroupList

62

2-11

Danh sách các phương thức của lớp GroupList

62

2-12

Danh sách các thuộc tính của lớp ShortestForm


63

2-13

Danh sách các phương thức của lớp ShortestForm

63

2-14

Danh sách các thuộc tính của lớp XMLAttribute

64

2-15

Danh sách các phương thức của lớp XMLAttribute

64

45
55-56


2-16

Danh sách các thuộc tính của lớp SettingsForm

64


2-17

Danh sách các phương thức của lớp SettingsForm

65


Chương 1
TÌM HIỂU VỀ J2ME
1.1. Giới thiệu J2ME
1.1.1. Lịch sử
Khi Sun Microsystems nhận ra rằng việc tạo ra một nền tảng chung để chạy
trên tất cả các môi trường là điều không thể thực hiện được, công ty đã quyết
định chia công nghệ Java của mình thành 3 phiên bản, mỗi phiên bản được ứng
dụng trong một lĩnh vực riêng biệt, đó là:
 Java 2 Platform, Enterprise Edition (J2EETM) phục vụ cho các nhu cầu về
thương mại như phục vụ khách hàng, các nhu cầu về phân phối, các vấn
đề về nhân sự. Phiên bản này được chạy trên các máy server.
 Java 2 Platform, Standard Edition (J2SETM) được cung cấp cho thị
trường máy tính để bàn trong các máy tính phục vụ văn phòng hay trong
gia đình.
 Java 2 Platform, Microedition (J2METM) chạy trên các máy với tài
nguyên hạn chế.
Hình vẽ dưới đây minh họa các phiên bản hiện có của Java và các lĩnh vực ứng
dụng của chúng

Hình 1.1 Các phiên bản khác nhau của Java và lĩnh vực ứng dụng

1



J2ME đượ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, 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.
1.1.2. Lý do chọn J2ME
a) Java ban đầu được thiết kế dành cho các máy tính với tài nguyên các bộ
nhớ hạn chế.
b) Thị trường của J2ME được mở rộng ra cho nhiều chủng loại thiết bị như:
 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ết bị trọ giúp cá nhân).
 Các hộp điều khiển dành cho ti vi, thiết bị giải trí gia dụng, ...
1.1.3. Kiến trúc của J2M
Kiến trúc J2ME được thiết kế để có thể hỗ trợ các thiết bị nhúng khác
nhau trên thị trường. Để làm được như thế, môi trường J2ME cung cấp
nhiều loại máy ảo Java (Java Virtual Machine) khác nhau.
Với các thiết bị cấp thấp, tài nguyên hạn chế, môi trường J2ME cung cấp
một cấu hình máy ảo rất nhỏ và các thư viện Java chỉ gồm các gói lớp cần
thiết cho thiết bị.

Hình 1.2: Kiến trúc tổng quát của J2ME

2


Giới thiệu các thành phần trong nền tảng 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 thuộ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 quy đị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 thoại
Nokia... Hiện nay Sun đã đưa ra hai 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 thoại di động và
PDA với khoảng 512KB 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 tới 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ả hai 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 phải 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ớ, bộ vi xử lý nên không thể yêu cầu các máy ảo hỗ trợ

3



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.
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

>= 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

Bảng 1-1. Phân loại 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 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áy hỗ trợ cho một profile khác.
Cũng với lí do đó, ta không thể lấy một ứng dụng viết trên J2SE hoặc J2EE
để 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 thoại
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.
 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

4


Ngoài ra còn có Personal Basis Profile, Personal Profile, RMI Profile, Game
Profile.
1.1.4 Sự khác nhau giữa ngôn ngữ Java trên CLDC với Java thông

thường
 Khả năng xử lý số thực:
Các phép toán trên số thực thường cần nhiều thời gian để xử lý. Ngoài
ra phần lớn các thiết bị không có phần cứng hỗ trợ cho việc tính toán trên số
thực, do đó CLDC không hỗ trợ số thực
 Finalization:
Trong các lớp được viết bằng J2SE, chúng ta thường định nghĩa một
phương thức là finalize(). Phương thức này sẽ được gọi trước khi bộ thu
gom rác (garbage collector) thu gom đối tượng. Phương thức này là nơi
chúng ta đặt các mã lệnh để giải phóng các tài nguyên đã sử dụng. Tuy
nhiên CLDC không hỗ trợ phương thức finalize().
 Xử lý lỗi:
Máy ảo Java hỗ trợ rất ít các ngoại lệ xử lý lỗi trong J2SE, lý do của
hạn chế này là:
 Việc xử lý lỗi trong J2SE là khá toàn diện, và đòi hỏi rất nhiều về yêu
cầu tài nguyên hệ thống.
 Thông thường các hệ thống nhúng sẽ cung cấp xử lý lỗi của riêng chúng.
Một giải pháp đơn giản cho hầu hết các lỗi nghiêm trọng là thực hiện
khởi động lại máy, trong trường hợp này các lập trình viên không thể xử
lý lỗi được vì đã quá trễ.
 Các lớp kế thừa từ J2SE:
CLDC yêu cầu khoảng 160KB để chạy máy ảo Java và các thư viện cơ bản. Do
đó chỉ có một số lớp trong J2SE là được giữ lại:
 System Classes
java.lang.Class
java.lang.Object
java.lang.Runnable (interface)

5



java.lang.Runtime
java.lang.String
java.lang.StringBuffer
java.lang.System
java.lang.Thread
java.lang.Throwable
 Data Type Classes
java.lang.Boolean
java.lang.Byte
java.lang.Character
java.lang.Integer
java.lang.Long
java.lang.Short
 Collection Classes
java.util.Enumeration (interface)
java.util.Hashtable
java.util.Stack
java.util.Vector
 Input/output Classes
java.io.ByteArrayInputStream
java.io.ByteArrayOutputStream
java.io.DataInput (interface)
java.io.DataInputStream
java.io.DataOutput (interface)
java.io.DataOutputStream
java.io.InputStream
java.io.InputStreamReader
java.io.OutputStream
java.io.OutputStreamWriter

java.io.PrintStream

6


java.io.Reader
java.io.Writer
 Calendar and Time Classes
java.util.Calendar
java.util.Date
java.util.TimeZone
 Utility Classes
java.lang.Math
java.util.Random
 Exception Classes
java.io.EOFException
java.io.InterruptedIOException
java.io.IOException
java.io.UnsupportedEncodingException
java.io.UTFDataFormatException
java.lang.ArithmeticException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayStoreException
java.lang.ClassCastException
java.lang.ClassNotFoundException
java.lang.Exception
java.lang.IllegalAccessException
java.lang.IllegalArgumentException
java.lang.IllegalMonitorStateException
java.lang.IllegalThreadStateException

java.lang.IndexOutOfBoundsException
java.lang.InstantiationException
java.lang.InterruptedException
java.lang.NegativeArraySizeException
java.lang.NullPointerException

7


java.lang.NumberFormatException
java.lang.RuntimeException
java.lang.SecurityException
java.lang.StringIndexOutOfBoundsException
java.util.EmptyStackException
java.util.NoSuchElementException
 Error Classes
java.lang.Error
java.lang.OutOfMemoryError
java.lang.VirtualMachineError
 Internationalization
java.io.InputStreamReader
java.io.OutputStreamWriter
 Các đặc tính được hỗ trợ
Có rất ít đặc tính về hệ thống mà chúng ta có thể xem được. Sau đây là
danh sách các đặc tính có được và các câu lệnh để truy xuất chúng:
 Lấy thông tin về platform của thiết bị:
System.getProperty(“microedition.platform”)
 Lấy bảng mã kí tự:
System.getProperty(“microedition.platform”)
 Lấy tên và phiên bản của cấu hình:

System.getProperty(“microedition.cofiguration”)
 Lấy tên của các profile hỗ trợ:
System.getProperty(“microedition.profiles”)
 K Virtual Machine
KVM là một bộ máy ảo Java phù hợp CLDC mà Sun MicroSystems đã phát
triển. KVM được thiết kế nhỏ và hiệu quả, KVM được viết bằng C để có thể
hỗ trợ tốt tính năng khả chuyển. Phần lớn mã lệnh của KVM sẽ không thay đổi
theo thiết bị, chỉ có một phần mã dùng để quản lý bộ nhớ, điều khiển lỗi, xử lý
sự kiện... là phụ thuộc vào thiết bị.

8


1.1.5. Giới thiệu MIDP
a) Định nghĩa:
Đây là Profile được định nghĩa dành riêng cho các thiế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.
b) Yêu cầu phần cứng:
 Màn hình có kích thước tối thiểu là 96x54 pixel.
 Có ít nhất một trong các thiết bị nhập sau: bàn phím, màn hình cảm ứng.
 Ít nhất 128 KB để chạy các thành phần của MIDP
 Ít nhất 8 KB để chạy các ứng dụng để chứa dữ liệu.
 Ít nhất 32 KB để chạy Java.
 Kết nối mạng không dây.
c) Những chức năng MIDP không thực hiện được:
 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 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 nó bị xóa được đẩy về phía lập trinh viên.
 Không hỗ trọ JNI.
 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 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. Sun đã cung cấp một
chức năng khác tương đương với các thiết bị lưu trữ thông thường gọi là
Record Management System (RMS) để cung cấp khả năng lưu trữ cho các
thiết bị này.
d) Những chức năng MIDP cung cấp:

9


 Các lớp và kiểu dữ liệu: Phần lớn các lớp quen thuộc vẫn còn được giữ lại
như các lớp trong gói Java.until: Stack, Vector, Hastable, 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 lên màn hình điện thoại.
 Hỗ trợ Form và các giao diện người dù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.
Ngoài ra vào tháng 11 năm 2003, Sun đã đưa ra MIDP 2.0 với hàng loạt các
tính năng khác được cung cấp thêm so với bản 1.0:
 Nâng cấp 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).
 Mở rộng các tính năng của Form.
 Hỗ trợ các lập trình viên Game bằng cách tung ra Game API. ý tưởng
của Game API là việc giả định rằng một màn hình game là tập hợp các
layer, điều này sẽ làm giảm đáng kể kích thước file của sản phẩm. Ngoài
ra Game API còn cung cấp các tính năng khác 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 nhất cho các nhà
phát triển MIDP là việc biểu diễn hình ảnh dưới dạng mảng các 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.1.6. Môi trường phát triển J2ME

10


Có nhiều môi trường phát triển ứng dụng J2ME và mỗi hãng điện thoại
cũng đưa ra môi trường phát triển riêng. Trong quá trình xây dựng đồ án này
em đã dùng toolkit của Sun: J2ME Wireless Toolkit 2.5.2 để làm môi trường
phát triển J2ME, kết hợp với phần mềm Eclipse 3.2 để xây dựng code.
Giao diện của chương trình Wireless Toolkit:

Hình 1.3: Giao diện của chương trình Wireless Toolkit 2.5.2
1.2. Các thành phần giao diện ở mức cao của ứng dụng MIDP
Trước hết chúng ta hãy tìm hiểu vòng đời của một MIDlet:
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ượng
khác, ngoài startApp(), mỗi Midlet còn có pauseApp() và destroyApp(), mỗi hàm
này sẽ được gọi thực thi tương ứng khi user chọn dừng hoặc thoát chương trình.

11


Hình 1.4: Minh họa vòng đời của một MIDlet
1.2.1. Đối tượng Display, Displayable và Screens
Một đối tượng MIDlet chỉ có một đối tượng thể hiện Display. Đối tượng
này dùng để lấy thông tin về đối tượng trình bày, ví dụ màu được hỗ trợ, và bao
gồm các phương thức để yêu cầu các đối tượng được trình bày. Đối tượng
Display cần thiết cho bộ quản lý việc trình bày trên thiết bị điều khiển thành phần
nào sẽ được hiển thị lên trên thiết bị.
Mặc dù chỉ có một đối tượng Display ứng với mỗi MIDlet, nhưng nhiều đối
tượng trong một MIDlet có thể được hiển thị ra trên thiết bị như Forms,
TextBoxes, ChoiceGroups, ...
Một đối tượng Displayable là một thành phần được hiển thị trên một thiết
bị. MIDP chứa 2 lớp con của lớp Displayable là Screens và Canvas. Hình dưới
đây mô tả mối quan hệ trên:

12


Hình 1.5: Mối quan hệ giữa Display, Displayable, Screen
Một đối tượng Screen không phải là một cái gì đó hiện ra trên thiết bị, mà
lớp Screen này sẽ được kế thừa bởi các thành phần hiển thị ở mức cao, chính các
thành phần này sẽ được hiển thị ra trên màn hình.
1.2.2. Thành phần Form và Items

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 được thừa kế từ lớp Item, bao gồm:
 DateField
 Gauge
 StringItem
 TextField
 ChoiceGroup
 Spacer
 CustomItem
 Image and ImageItem
a) DateField
Thành phần DateField cung cấp một phương tiện trực quan để thao tác đối
tượng Date được định nghĩa trong java.until.Date. Khi tạo ra một đối tượng
DateField cần phải chỉ rõ người dùng có thể chỉnh sửa ngày, chỉnh sửa giờ hay
đồng thời cả hai. Các phương thức của lớp DateField bao 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 bao gồm:
DateField.DATE_TIME: cho phép sửa đổi ngày giờ.
DateField.DATE: chỉ cho phép sửa đổi ngày.

13


DateField.TIME: chỉ cho phép sửa đổi giờ.
Ví dụ khởi tạo:
private DateField df;
df = new DateField (“ Set Date and Time”, DateField.DATE_TIME);
df.setDate(newDate());
b) Gauge

Một thành phần Gauge là một kiểu giao diện thường được dùng để mô tả mức
độ hoàn thành một công việc. Có 2 loại Gauge: loại tương tác (cho phép người
dùng có thể thay đổi Gauge), loại không tương tác (đòi hỏi người phát triển phải
cập nhật Gauge).
Hàm dựng của lớp Gauge:
Gauge(String label, boolean interactive, int maxValue, int initialValue)
Trong đó:
label : nhãn của Gauge
interactive: cho biết người dùng có thể thay đổi giá trị hay không. Nếu là
true cho phép người dùng thay đổi, nếu là false thì không cho phép.
maxValue: giá trị lớn nhất của Gauge, hoặc có thể là INDEFINITE ( trong
trường hợp non-interactive).
initialValue: giá trị bắt đầu trong khoảng [0..maxValue], nếu maxValue là
INDEFINITE

thì

initialValue

CONTINUOUS_IDLE,

sẽ

nhận

một

trong

các


giá

trị:

INCREMENTAL_IDLE,

CONTINUOUS_RUNNING, INCREMENTAL_UPDATING.
Ví dụ:
private Gauge gaVolume;
gaVolume = new Gauge (“Volume”, true, 75, 2);

14


Các hàm trong Gauge:
Hàm

Ý nghĩa

void addCommand (Command cmd)

Thêm Command theo ngữ cảnh vào mục chọn

int getMaxValue()

Trả về giá trị lớn nhất của Gauge, hoặc
INDEFINITE.

int getValue()


Trả về giá trị hiện tại của Gauge.

boolean isInteractive()

Trả về true nếu Gauge là loại tương tác, trả về
false nếu Gauge là loại không tương tác.

void setDefaultCommand
(Command cmd)
void setItemCommandListener
(ItemCommandListener it)
void setLabel(String label)

Thiết lập nhãn cho Item.

void setLayout(int layout)
void setMaxValue(int maxValue)
void setPreferredSize(int width,
int height)
void setValue(int value)
Bảng 1-2: Danh sách một số hàm trong Gauge
c) StringItem
Một thành phần StringItem dùng để hiển thị nhãn hay chuỗi văn bản. Người
dùng không thể thay đổi nhãn hay chuỗi văn bản khi chương trình đang 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)
d) TextField
Một thành phần TextFiel tương tự như bất kì các đối tượng nhập văn bản

tiêu biểu khác. Có thể chỉ định một nhãn, số kí tự tối đa và loại dữ liệu được
phép nhập.
Phương thức dựng của lớp TextField:

15


TextField (String label, String text, int maxSize, int constraints)
Trong đó constraints là thành phần xác định loại dữ liệu nào sẽ được nhập
vào, gồm có:
 any - cho phép nhập kí tự bất kì.
 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 tất cả các kí tự nhập vào
Ví dụ:
private TextField tfText;
tfText = new TextField(“Password:”, “”, null, TextField.PASSWORD);
e) ChoiceGroup
Thành phần ChoiceGroup cho phép người dùng chọn từ một 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 có liên quan
đến các checkbox
 exclusive-selection(chỉ được chọn một mục): nhóm này có liên quan
đến các radio button.
Ví dụ xây dựng:
private ChoiceGroup cgChoice;
cgChoice = new ChoiceGroup(“ Lua chon”, Choice.EXCLUSIVE);
cgChoice.append(“Chuc nang 1”, null);

cgChoice.append(“Chuc nang 2”, null);
f) Spacer
Spacer là thành phần không nhìn thấy, được dùng để định vị cho các đối
tượng khác trên màn hình hiển thị. 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 bằng cách chỉ ra chiều
rộng và chiều dài 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.

16


g) CustomItem
Thành phần CustomItem cho phép các lập trình viên tạo ra những thành
phần Item của chính họ. Những thành phần này cũng giống như các Item khác,
có thể được đặt vào trong Form và nhận biết 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ã bên trong phương thức paint(). Ví dụ minh họa
sườn tạo ra đối tượng CustomItem:
public class NewItem extends CustomItem
{
public NewItem(String label){
super(label);
...}
protected void paint(Graphics g, int width, int height){
...}
protected int getMinContentHeight(){
...;}
protected int getMinContentWidth(){
...}
protected int getPrefContentHeight(int width){

...}
protected int getPrefContentWidth(int height){
...}
...}
h) Image và ImageItem
Hai lớp được dùng để hiển thị hình ảnh là: Image và ImageItem. Image
được dùng để tạo một đối tượng hình ảnh và giữ thông tin như chiều cao,
chiều rộng, và dù ảnh có biến đổi hay không. Lớp ImageItem mô tả một ảnh sẽ
được hiển thị như thế nào, ví dụ như tấm ảnh đó sẽ được đặt ở đâu trên màn
hình hiển thị: ở trung tâm, hay về phía trái, hay phía dưới...

17


×