SlideShare a Scribd company logo
1 of 164
Download to read offline
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
NGUYỄN NGỌC DUY QUANG – VŨ BÁ QUANG
XÂY DỰNG BẢN ĐỒ TRÊN ĐIỆN THOẠI
DI ĐỘNG CÓ HỖ TRỢ JAVA
KHOÁ LUẬN CỬ NHÂN TIN HỌC
TP. HCM, 2005
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
NGUYỄN NGỌC DUY QUANG - 0112194
VŨ BÁ QUANG - 0112395
XÂY DỰNG BẢN ĐỒ TRÊN ĐIỆN THOẠI
DI ĐỘNG CÓ HỖ TRỢ JAVA
KHOÁ LUẬN CỬ NHÂN TIN HỌC
GIÁO VIÊN HƯỚNG DẪN
Thạc sĩ LÊ THỤY ANH
NIÊN KHÓA 2001-2005
HO CHI MINH CITY – MOBILE MAP
Version 1.0 / 07-2005
Siemens SK 65 Siemens SL 65
Sony Ericsson K750 Sony Ericsson P900
Samsung E100 Samsung E710
Nhận xét của giáo viên hướng dẫn
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
Nhận xét của giáo viên phản biện
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
............................................................................................................................
i
LỜI CẢM ƠN
Chúng em xin chân thành cảm ơn Quý thầy cô trong Khoa Công nghệ Thông
tin Trường Đại học Khoa học Tự nhiên đã tận tình dạy bảo cho chúng em nhiều
kiến thức bổ ích trong suốt thời gian học tập tại trường cũng như đã tạo điều kiện
cho chúng em được thực hiện đề tài này. Kính chúc các Thầy cô luôn dồi dào sức
khỏe và thành công trong cuộc sống.
Đặc biệt, chúng em xin bày tỏ lòng biết ơn sâu sắc đến thầy Lê Thụy Anh,
người đã tận tình hướng dẫn chúng em trong suốt thời gian thực hiện đề tài, cho
chúng em sự bình tĩnh và tự tin, giúp chúng em rút ra nhiều bài học kinh nghiệm
quý báu mỗi khi chúng em vấp phải những khó khăn. Chúng em khó có thể hoàn
thành được đề tài này nếu không nhờ sự tận tình chỉ bảo của thầy.
Chúng con cảm ơn cha mẹ và gia đình đã sinh ra và nuôi dạy chúng con
khôn lớn, luôn bên cạnh động viên và ủng hộ chúng con trên con đường mà chúng
con đã yêu thích và lựa chọn.
Cảm ơn các bạn sinh viên CNTT khóa 2001. Các bạn đã giúp đỡ, động viên
và hỗ trợ chúng tôi rất nhiều cũng như đóng góp cho chúng tôi nhiều ý kiến quý
báu, qua đó, giúp chúng tôi hoàn thiện hơn cho đề tài.
Mặc dù đã rất nỗ lực, cố gắng nhưng chắc hẳn đề tài vẫn còn nhiều thiếu sót.
Chúng em rất mong nhận được nhiều sự góp ý phê bình của Quý thầy cô, của các
anh chị và các bạn.
Một lần nữa, chúng em xin chân thành cảm ơn !
TP Hồ Chí Minh, tháng 7 năm 2005
Nhóm thực hiện
Nguyễn Ngọc Duy Quang – Vũ Bá Quang
ii
LỜI NÓI ĐẦU
Có thể nói rằng đề tài về bản đồ giao thông tại thành phố Hồ Chí Minh là
một đề tài không mới. Trong các năm qua, đã có nhiều khóa luận của các sinh viên
ngành CNTT nghiên cứu về chủ đề này, trong đó, đáng chú ý nhất là các đề tài của
sinh viên Khoa CNTT Trường ĐH Khoa học Tự nhiên TP.HCM. Các đề tài này đa
số đều được thực hiện rất tốt, hỗ trợ cho người dùng rất nhiều chức năng như : xem
bản đồ, tra cứu thông tin về các đường đi, các địa điểm, tra cứu các tuyến xe buýt…
đặc biệt là chức năng xác định lộ trình để tìm đường đi ngắn nhất giữa hai địa điểm
và hầu hết các đề tài nói trên đều được thực hiện nhắm đến môi trường sử dụng là
các máy tính để bàn hoặc Pocket PC.
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 đang trở nên sôi động hơn bao giờ hết. Một mặt, do thu nhập
của người dân ngày càng được cải thiện 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 điện thoại di động cũng tăng theo. Mặt khác,
các nhà sản xuất điện thoại di động nắm bắt được nhu cầu của giới trẻ ưa chuộng
những sản phẩm “high-tech” và cũng do yêu cầu cạnh tranh với nhau nên liên tục
tung ra nhiều sản phẩm mới với nhiều tính năng, cấu hình ngày càng được nâng lên
và giá thành ngày càng giảm. Chiếc điện thoại di động giờ đây không phải là một
món hàng quá xa xỉ. Nhờ đó, 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à đa số là các trò chơi, các
chương trình tiện ích như xử lý ảnh chụp, đổi đơn vị đo lường, từ điển, soạn thảo
văn bản, diệt virus…
Tuy vậy, một ứng dụng về bản đồ giao thông, mà cụ thể là bản đồ thành phố
Hồ Chí Minh dành cho điện thoại di động với các tính năng đã trình bày ở trên thì
gần như chưa có. Có thể nói là “gần như chưa có” bởi vì trước đây, trên một số tạp
chí, diễn đàn tin học cũng có giới thiệu một phần mềm bản đồ thành phố Hồ Chí
iii
Minh, tuy nhiên, phần mềm này cũng chỉ thực hiện được một chức năng là hiển thị
bản đồ. Tuy thế, chức năng này cũng chưa thật tốt do chỉ lưu được ảnh tĩnh của bản
đồ vào tập tài nguyên, vì vậy, không thể phóng to hay thu nhỏ bản đồ, và cũng vì
thế làm cho chương trình có kích thước lớn, tốc độ chậm, không thích hợp cho các
điện thoại có cấu hình trung bình hiện đang được dùng rất phổ biến tại thị trường
Việt Nam.
Với những lý do trên, nhóm chúng em chọn thực hiện đề tài “Xây dựng bản
đồ trên điện thoại di động hỗ trợ Java”. Mục tiêu của đề tài nhằm xây dựng một
phần mềm ứng dụng bản đồ giao thông TP. Hồ Chí Minh bằng ngôn ngữ lập trình
Java, có thể thực thi được trên nhiều loại đ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ư chợ, trường học, bệnh viện, khách sạn…, đặc
biệt là trợ giúp người sử dụng xác định lộ trình ngắn nhất để đi từ địa điểm này đến
một địa điểm khác… Phần mềm này nếu được thực hiện tốt sẽ trở thành một ứng
dụng rất hữu ích, rất thiết thực 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, chúng ta đều hình dung được hai
trở ngại lớn. Thứ nhất, đó là năng lực của bộ vi xử lý trên điện thoại rất yếu và thứ
hai, đó là dung lượng của bộ nhớ rất nhỏ. Điều này gây trở ngại không nhỏ đến việc
tổ chức dữ liệu cho phần mềm, bởi lẽ, dữ liệu về các đường giao thông tại thành phố
Hồ Chí Minh là rất lớn, muốn lưu được toàn bộ dữ liệu này trên chiếc điện thoại di
động là một điều không đơn giản. Ngoài ra, các hạn chế của điện thoại di động cũng
buộc người lập trình phải chọn giải thuật thật hiệu quả và luôn phải tính toán nhằm
tối ưu cho chương trình. Mặt khác, đối với người lập trình, sự hạn chế của thư viện
hàm trong ngôn ngữ Java được hỗ trợ cho điện thoại cũng là một vấn đề không dễ
giải quyết. Những hạn chế đã nêu thật sự là một thách thức lớn mà đề tài bắt buộc
phải vượt qua.
Nội dung của bài báo cáo này được chia thành 7 chương như sau :
iv
- Chương 1 : Tổng quan về lập trình trên điện thoại di động. Chương
này nêu những vấn đề chung về tình hình sử dụng điện thoại di động hiện nay; hoạt
động phát triển phần mềm cho loại thiết bị này; giới thiệu một số phần mềm công
cụ nhằm hỗ trợ cho việc phát triển ứng dụng di động bằng ngôn ngữ lập trình Java.
- Chương 2 : Giới thiệu khái quát về chuẩn J2ME. Phần này trình bày
các mục tiêu, nội dung và định nghĩa các khái niệm quan trọng trong J2ME. Ngoài
ra, chương này cũng trình bày các tính năng, các điểm thuận lợi và hạn chế của bộ
thư viện Java được hỗ trợ cho điện thoại di động.
- Chương 3 : Những khó khăn do hạn chế của J2ME. Chương này trình
bày những ảnh hưởng quan trọng đến việc thiết kế và cài đặt một số tính năng của
đề tài do hạn chế của thư viện Java trên điện thoại di động.
- Chương 4 : Phân tích – thiết kế ứng dụng. Phân tích các yêu cầu nghiệp
vụ, các yêu cầu phi chức năng và đặc tả chi tiết ứng dụng ở mức phân tích, thiết kế.
- Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình. Do thiết bị
di động hạn chế về năng lực xử lý, dung lượng bộ nhớ và khả năng lưu trữ, chương
này trình bày một số phương pháp, thủ thuật nhằm giúp cho ứng dụng được tối ưu
hóa về tốc độ, tối ưu việc sử dụng bộ nhớ và giảm kích thước cho phần mềm.
- Chương 6 : Thử nghiệm - Hướng dẫn cài đặt và sử dụng. Giới thiệu
một số trình giả lập các điện thoại di động phổ biến trên thị trường được đề tài sử
dụng cho mục đích thử nghiệm; hướng dẫn cài đặt và sử dụng các chức năng của
phần mềm.
- Chương 7 : Tổng kết – Đánh giá. Nhận xét các công việc đã được thực
hiện; trình bày các ưu, khuyết điểm và hướng mở rộng cho phần mềm.
- Phụ lục A : 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 trong chương trình.
- Phụ lục B : Giới thiệu các chương trình giả lập. Mục đích của chương
này nhằm trình bày các tính năng cũng như các yêu cầu về phần cứng, phần mềm
cần thiết để cài đặt chương trình.
v
MỤC LỤC
Trang
Lời cảm ơn ...................................................................................................................i
Lời nói đầu ..................................................................................................................ii
Mục lục........................................................................................................................v
Danh mục hình ..........................................................................................................vii
Danh mục bảng ...........................................................................................................x
Chương 1 : TỔNG QUAN VỀ LẬP TRÌNH TRÊN ĐIỆN THOẠI DI ĐỘNG..1
1.1. Đôi nét về thị trường điện thoại di động Việt Nam .....................................1
1.1.1. Sự phát triển của thị trường thông tin di động................................1
1.1.2. Nhu cầu phát triển phần mềm cho điện thoại di động ....................2
1.2. Lập trình trên điện thoại di động..................................................................4
1.2.1. Quá trình phát triển ứng dụng J2ME ..............................................4
1.2.2. Các J2ME IDE ................................................................................5
1.3. Giới thiệu một số công cụ hỗ trợ lập trình J2ME ........................................6
1.3.1. J2ME Wireless Toolkit (WTK).......................................................6
1.3.2. Borland JBuiler ...............................................................................9
1.3.3. Sun ONE Studio 5, Mobile Edition ..............................................16
Chương 2 : GIỚI THIỆU KHÁI QUÁT VỀ CHUẨN J2ME .............................23
2.1. Nền tảng Java.............................................................................................23
2.2. Sự khác nhau giữa ngôn ngữ Java trên CLDC với Java thông thường......29
2.3. MIDP..........................................................................................................32
2.3.1. Định nghĩa.....................................................................................32
2.3.2. Yêu cầu về phần cứng...................................................................32
2.3.3. Các khả năng và hạn chế của MIDP .............................................33
Chương 3 : NHỮNG KHÓ KHĂN DO HẠN CHẾ CỦA J2ME........................36
3.1. Các hàm tô màu..........................................................................................36
3.2. Các hàm vẽ đường......................................................................................37
3.3. Vấn đề font chữ..........................................................................................38
3.4. Vấn đề vẽ chuỗi ký tự ................................................................................39
3.5. Vấn đề về số thực.......................................................................................40
Chương 4 : PHÂN TÍCH – THIẾT KẾ ỨNG DỤNG .........................................42
4.1. Khảo sát hiện trạng.....................................................................................42
4.2. Phân tích và xác định yêu cầu....................................................................43
4.2.1. Danh sách các yêu cầu nghiệp vụ .................................................43
4.2.2. Các yêu cầu phi chức năng ...........................................................43
4.3. Thiết kế ứng dụng ......................................................................................44
4.3.1. Lược đồ sử dụng ...........................................................................44
4.3.2. Đặc tả Use Case ............................................................................45
4.3.3. Sơ đồ lớp mức phân tích ...............................................................57
4.3.4. Các biểu đồ hoạt động...................................................................64
4.3.4. Sơ đồ lớp mức thiết kế ..................................................................70
vi
Chương 5 : MỘT SỐ CẢI TIẾN NHẰM TỐI ƯU HÓA CHƯƠNG TRÌNH...95
5.1. Nội dung và ý nghĩa của việc tối ưu hóa....................................................95
5.2. Tối ưu hóa kích thước chương trình ..........................................................95
5.2.1. Các nguyên tắc tối ưu kích thước trong thiết kế chương trình .....95
5.2.2. Tối ưu kích thước chương trình khi đóng gói...............................99
5.3. Tối ưu hóa về tốc độ.................................................................................104
5.3.1. Khái quát chung ..........................................................................104
5.3.2. Tìm các vị trí cần tối ưu về tốc độ ..............................................104
5.3.3. Các nguyên tắc tăng tốc cho chương trình..................................106
5.4. Tối ưu hóa việc sử dụng bộ nhớ...............................................................110
5.4.1. Công cụ theo dõi việc sử dụng bộ nhớ........................................110
5.4.2. Các nguyên tắc tối ưu hóa việc sử dụng bộ nhớ .........................111
Chương 6 : THỬ NGHIỆM – HƯỚNG DẪN CÀI ĐẶT VÀ SỬ DỤNG ........114
6.1. Cài đặt chương trình trên máy ảo.............................................................114
6.1.1. Trình giả lập Sony Ericsson........................................................114
6.1.2. Trình giả lập Nokia .....................................................................115
6.1.3. Trình giả lập Siemens .................................................................117
6.1.4. Trình giả lập Samsung ................................................................120
6.1.5. Trình giả lập chuẩn (Sun Microsystems)....................................121
6.2. Vấn đề hỗ trợ tiếng Việt có dấu ...............................................................123
6.2.1. Hiển thị tiếng Việt trên máy ảo...................................................123
6.2.2. Hiển thị tiếng Việt trên thiết bị thật ............................................123
6.3. Hướng dẫn sử dụng chương trình ............................................................124
6.3.1. Chức năng duyệt bản đồ..............................................................124
6.3.2. Chức năng tra cứu địa điểm, tên đường......................................124
6.3.3. Chức năng tìm đường đi ngắn nhất giữa hai điểm......................128
6.3.4. Chức năng trợ giúp, hướng dẫn sử dụng.....................................131
Chương 7 : TỔNG KẾT – ĐÁNH GIÁ...............................................................133
7.1. Ưu điểm....................................................................................................133
7.2. Khuyết điểm.............................................................................................133
7.3. Hướng mở rộng........................................................................................134
Phụ lục A : CÁC THUẬT NGỮ ĐƯỢC SỬ DỤNG..........................................135
Phụ lục B : GIỚI THIỆU CÁC CHƯƠNG TRÌNH GIẢ LẬP.........................138
B.1. JDK..........................................................................................................138
B.2. Công cụ phát triển của hãng thứ ba.........................................................138
B.3. Trình giả lập các loại điện thoại di động.................................................139
B.3.1. Siemens.......................................................................................139
B.3.2. Sony Ericsson.............................................................................140
B.3.3. Samsung .....................................................................................142
B.3.4. Nokia ..........................................................................................145
Tài liệu tham khảo...................................................................................................147
vii
DANH MỤC HÌNH
Trang
Hình 1-1 : Doanh thu sản xuất phần mềm cho điện thoại di động năm 2004.........3
Hình 1-2 : Tạo project J2ME bằng Wizard trong JBuilder ...................................10
Hình 1-3 : JBuilder MIDP Designer .....................................................................12
Hình 1-4 : Màn hình gỡ rối của JBuilder...............................................................14
Hình 1-5 : Tạo project J2ME bằng Sun ONE Studio 5..........................................17
Hình 1-6 : Cửa sổ quản lý tập tin của Sun ONE Studio 5 .....................................18
Hình 2-1 : Kiến trúc J2ME.....................................................................................24
Hình 2-2 : Các thành phần trong kiến trúc J2ME .................................................26
Hình 2-3 : Quan hệ giữa J2ME configuration và J2SE..........................................28
Hình 4-1 : Lược đồ sử dụng ..................................................................................44
Hình 4-2 : Sơ đồ lớp mức phân tích.......................................................................57
Hình 4-3 : Mô tả lớp MainMIDlet .........................................................................58
Hình 4-4 : Mô tả lớp MainCanvas .........................................................................59
Hình 4-5 : Mô tả lớp FindObjectForm...................................................................60
Hình 4-6 : Mô tả lớp MessageBox.........................................................................60
Hình 4-7 : Mô tả lớp IndexList ..............................................................................61
Hình 4-8 : Mô tả lớp IndexList ..............................................................................61
Hình 4-9 : Mô tả lớp Places ...................................................................................62
Hình 4-10 : Mô tả lớp Streets.................................................................................63
Hình 4-11 : Sequence diagram Hiển thị bản đồ.....................................................64
Hình 4-12 : Collaboration diagram Hiển thị bản đồ ..............................................64
Hình 4-13 : Sequence diagram Tìm địa điểm ........................................................65
Hình 4-14 : Collaboration diagram Tìm địa điểm..................................................66
Hình 4-15 : Sequence diagram Tìm đường theo tên..............................................67
Hình 4-16 : Collaboration diagram Tìm đường theo tên .......................................68
Hình 4-17 : Sequence diagram Tìm đường đi ngắn nhất.......................................69
Hình 4-18 : Collaboration diagram Tìm đường đi ngắn nhất ................................69
viii
Hình 4-19 : Sơ đồ lớp mức thiết kế........................................................................70
Hình 4-20 : Thiết kế lớp MainMIDlet....................................................................72
Hình 4-21 : Thiết kế lớp MainCanvas....................................................................73
Hình 4-22 : Thiết kế lớp MessageBox ...................................................................76
Hình 4-23 : Thiết kế lớp FindObjectForm.............................................................77
Hình 4-24 : Thiết kế lớp HelpScreen .....................................................................79
Hình 4-25 : Thiết kế lớp IndexList ........................................................................80
Hình 4-26 : Thiết kế lớp SplashScreen ..................................................................79
Hình 4-27 : Thiết kế lớp About..............................................................................81
Hình 4-28 : Thiết kế lớp Districts ..........................................................................82
Hình 4-29 : Thiết kế lớp Places..............................................................................84
Hình 4-30 : Thiết kế lớp Streets.............................................................................85
Hình 4-31 : Thiết kế lớp NodePosition..................................................................89
Hình 4-32 : Sequence diagram Hiển thị bản đồ (mức thiết kế) .............................90
Hình 4-33 : Collaboration diagram Hiển thị bản đồ (mức thiết kế).......................90
Hình 4-34 : Sequence diagram Tìm địa điểm (mức thiết kế).................................91
Hình 4-35 : Collaboration diagram Tìm địa điểm (mức thiết kế)..........................92
Hình 4-36 : Sequence diagram Tìm đường theo tên (mức thiết kế) ......................93
Hình 4-37 : Collaboration diagram Tìm đường theo tên (mức thiết kế)................93
Hình 4-36 : Sequence diagram Tìm đường ngắn nhất (mức thiết kế) ...................94
Hình 4-37 : Collaboration diagram Tìm đường ngắn nhất (mức thiết kế).............94
Hình 5-1 : Mô hình quá trình đóng gói ứng dụng J2ME .......................................99
Hình 5-2 : Sơ đồ sử dụng Obfuscator ..................................................................102
Hình 5-3 : Màn hình giao diện công cụ Profiler ..................................................105
Hình 5-4 : Màn hình giao diện công cụ theo dõi việc sử dụng bộ nhớ................111
Hình 6-1 : Thử nghiệm ứng dụng trên trình giả lập Sony Ericsson.....................114
Hình 6-2 : Màn hình giao diện trình giả lập Sony Ericsson.................................115
Hình 6-3 : Thử nghiêm ứng dụng trên trình giả lập Nokia..................................116
Hình 6-4 : Kết quả thử nghiệm trên trình giả lập Nokia......................................117
ix
Hình 6-5 : Cài đặt ứng dụng trên điện thoại Siemens SK 65...............................119
Hình 6-6 : Khởi động ứng dụng trên Siemens SK 65..........................................120
Hình 6-7 : Kết quả thử nghiệm trên trình giả lập Siemens ..................................121
Hình 6-8 : Kết quả thử nghiệm trên trình giả lập Samsung.................................122
Hình 6-9 : Kết quả thử nghiệm trên J2ME SDK..................................................122
Hình 6-10 : Các phím di chuyển bản đồ ..............................................................124
Hình 6-11 : Kết quả tìm địa điểm ........................................................................126
Hình 6-12 : Màn hình tra cứu tên đường .............................................................127
Hình 6-13 : Kết quả tra cứu tên đường ................................................................128
Hình 6-14 : Màn hình chọn vị trí .........................................................................129
Hình 6-15 : Kết quả tìm đường đi ngắn nhất .......................................................130
Hình 6-16 : Màn hình hướng dẫn sử dụng...........................................................132
Hình 6-17 : Màn hình xem thông tin chương trình..............................................132
Hình B-1 : Màn hình download JDK 1.4.............................................................138
Hình B-2 : Trình giả lập Siemens ........................................................................140
Hình B-3 : Trình giả lập Sony Erisson.................................................................141
Hình B-4 : Trình giả lập Samsung .......................................................................144
Hình B-5 : Nokia Developer’s Suite 2.2..............................................................146
Hình B-6 : Trình giả lập của Nokia Developer’s Suite........................................146
x
DANH MỤC BẢNG
Trang
Bảng 2-1 : Phân loại CLDC và CDC...................................................................28
Bảng 4-1 : Danh sách các yêu cầu nghiệp vụ ......................................................43
Bảng 4-2 : Phân tích các thuộc tính lớp MainMIDlet..........................................58
Bảng 4-3 : Phân tích các phương thức lớp MainMIDlet......................................58
Bảng 4-4 : Phân tích các thuộc tính lớp MainCanvas..........................................59
Bảng 4-5 : Phân tích các phương thức lớp MainCanvas......................................59
Bảng 4-6 : Phân tích các phương thức lớp FindObjectForm ...............................60
Bảng 4-7 : Phân tích các phương thức lớp MessageBox .....................................60
Bảng 4-8 : Phân tích các phương thức lớp IndexList ..........................................61
Bảng 4-9 : Phân tích các phương thức lớp Districts ............................................61
Bảng 4-10 : Phân tích các phương thức lớp Places..............................................62
Bảng 4-11 : Phân tích các phương thức lớp Streets.............................................63
Bảng 4-12 : Danh sách các lớp ............................................................................71
Bảng 4-13 : Danh sách các thuộc tính lớp MainMIDlet......................................72
Bảng 4-14 : Danh sách các phương thức lớp MainMIDlet..................................72
Bảng 4-15 : Danh sách các thuộc tính lớp MainCanvas......................................74
Bảng 4-16 : Danh sách các phương thức lớp MainCanvas..................................75
Bảng 4-17 : Danh sách các thuộc tính lớp MessageBox......................................76
Bảng 4-18 : Danh sách các phương thức lớp MessageBox .................................76
Bảng 4-19 : Danh sách các thuộc tính lớp FindObjectForm................................77
Bảng 4-20 : Danh sách các phương thức lớp FindObjectForm ...........................78
Bảng 4-21 : Danh sách các thuộc tính lớp HelpScreen........................................79
Bảng 4-22 : Danh sách các phương thức lớp HelpScreen ...................................79
Bảng 4-23 : Danh sách các phương thức lớp IndexList.......................................80
Bảng 4-24 : Danh sách các phương thức lớp SplashScreen ................................80
Bảng 4-25 : Danh sách các thuộc tính lớp About ................................................81
Bảng 4-26 : Danh sách các phương thức lớp About............................................82
xi
Bảng 4-27 : Danh sách các thuộc tính lớp About ................................................83
Bảng 4-28 : Danh sách các phương thức lớp About............................................83
Bảng 4-29 : Danh sách các thuộc tính lớp Places................................................84
Bảng 4-30 : Danh sách các phương thức lớp Places............................................85
Bảng 4-31 : Danh sách các thuộc tính lớp Streets ...............................................87
Bảng 4-32 : Danh sách các phương thức lớp Streets ...........................................88
Bảng 5-1 : Bảng so sánh kết quả sử dụng obfuscator........................................104
Chương 1 : Tổng quan về lập trình trên điện thoại di động
1
Chương 1 : TỔNG QUAN VỀ LẬP TRÌNH TRÊN ĐIỆN THOẠI DI ĐỘNG
1.1. Đôi nét về thị trường điện thoại di động Việt Nam :
1.1.1. Sự phát triển của thị trường thông tin di động :
Thị trường thông tin di động Việt Nam là một trong những thị trường phát
triển nhanh nhất khu vực Đông Nam Á. Theo đánh giá của BMI - Tập đoàn xuất
bản chuyên nghiên cứu và đánh giá thị trường viễn thông thế giới, năm 2003, thị
trường thông tin di động Việt Nam đạt tốc độ tăng trưởng 43% và năm 2004 là
65%.
Tại Hội nghị quốc tế về thông tin di động lần 2 (2nd Mobiles Vietnam) diễn
ra tại TP.HCM ngày 11 và 12/5 năm 2005, các chuyên gia dự báo trong năm 2005,
tổng số thuê bao di động tại Việt Nam sẽ đạt 7,3 triệu và năm 2008 sẽ lên đến mức
21,2 triệu. Tuy nhiên, Việt Nam vẫn là một trong những quốc gia có mật độ điện
thoại di động thấp nhất ở khu vực châu Á - Thái Bình Dương, do vậy đây sẽ là địa
điểm hấp dẫn để các doanh nghiệp trong nước cũng như các đối tác nước ngoài khai
thác và tìm kiếm cơ hội kinh doanh.
Hiện nay, Việt Nam có 6 nhà khai thác, cung cấp dịch vụ thông tin di động
thuộc 5 doanh nghiệp là : VNPT (Vinafone, Mobifone), Công ty Viễn thông quân
đội (Viettel), Công ty cổ phần viễn thông Sài Gòn (Saigon Postel), Công ty cổ phần
viễn thông Hà Nội (Hanoi Telecom) và Công ty Viễn thông Điện lực (VP Telecom).
Trong đó Hanoi Telecom và VP Telecom dự kiến khai trương mạng vào đầu năm
2006.
Tiềm năng của thị trường thông tin di động Việt Nam là điều được khẳng
định, nhưng vẫn là một ẩn số đối với các nhà phân tích thị trường bởi nhu cầu sử
dụng của người tiêu dùng cũng như khả năng cung cấp của các nhà khai thác vẫn
đang ở mức khám phá ban đầu.
Việt Nam được coi là thị trường rất hấp dẫn trong lĩnh vực thông tin di động.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
2
1.1.2. Nhu cầu phát triển phần mềm cho điện thoại di động :
Điện thoại di động đầu tiên ra đời với chức năng như một chiếc điện thoại
thông thường, đó là gọi và nhận cuộc gọi. Sự phát triển mạnh mẽ của nền kinh tế
ngày càng khẳng định vai trò của thông tin liên lạc đến khả năng thành bại của việc
cạnh tranh trong kinh doanh. Ngoài ra, nhu cầu trao đổi thông tin, giải trí của con
người cũng ngày càng được nâng cao và nhờ vào sự tiến bộ về mặt kỹ thuật, chiếc
điện thoại di động ngày càng có thêm nhiều tính năng mới, đa dạng hơn, tiến bộ hơn
và hiện đại hơn. Màn hình từ đơn sắc chuyển sang màn hình màu, từ hỗ trợ tin nhắn
dạng văn bản (SMS) chuyển sang hỗ trợ tin nhắn có hình ảnh, âm thanh (MMS), hỗ
trợ quay phim, xem phim, chụp ảnh, nghe nhạc…
Năng lực xử lý và lưu trữ của điện thoại di động cũng liên tục được cải tiến.
Các hãng sản xuất đã làm cho chiếc điện thoại trở nên linh động hơn, giúp cho
người sử dụng có thể dễ dàng cấu hình giao diện và các ứng dụng. Đặc biệt, bằng
cách cho phép lập trình viên viết thêm các chương trình ứng dụng, trò chơi cho điện
thoại, chiếc điện thoại di động hiện nay thực sự là một công cụ làm việc, học tập,
vui chơi và giải trí hữu ích đối với mọi người.
Trong vài năm gần đây, hoạt động sản xuất phần mềm cho điện thoại di động
phát triển khá mạnh mẽ. Rất nhiều sản phẩm phần mềm đã ra đời để phục vụ tốt hơn
cho người sử dụng, trong đó, số lượng phần mềm nhiều nhất là các trò chơi, từ điển,
truy cập Internet, trình diệt virus, soạn thảo văn bản và các tiện ích khác. Trong năm
2004, giá trị sản xuất phần mềm cho điện thoại di động trên thế giới đạt 3,1 tỉ USD
và dự đoán sẽ đạt 18,5 tỉ USD vào năm 2009. Doanh thu sản xuất phần mềm cho
điện thoại di động năm 2004 được phân bố như sau :
Chương 1 : Tổng quan về lập trình trên điện thoại di động
3
Hình 1-1 : Doanh thu sản xuất phần mềm cho điện thoại di động năm 2004
Tại châu Á, chỉ riêng Nhật và Hàn Quốc đã chiếm 1,3 tỉ USD, còn lại là
Trung Quốc và Ấn Độ. Tại Việt Nam, doanh thu không đáng kể. Hầu hết các phần
mềm ứng dụng được phát triển dành cho điện thoại di động đều là phần mềm miễn
phí và do các công ty, các trường đại học và nhiều cá nhân thực hiện chủ yếu nhằm
mục đích phục vụ cho lợi ích của cộng đồng. Tuy nhiên, chúng ta vẫn có thể hi
vọng vào tương lai của một thị trường đầy tiềm năng và trong quá trình hội nhập
kinh tế quốc tế, người Việt Nam sẽ có thói quen tôn trọng quyền sở hữu trí tuệ nói
chung và bản quyền phần mềm nói riêng.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
4
1.2. Lập trình trên điện thoại di động :
1.2.1. Quá trình phát triển ứng dụng J2ME :
Thông thường, việc phát triển ứng dụng J2ME được tiến hành qua các giai
đoạn như sau :
a) Viết mã nguồn Java
b) Biên dịch
c) Obfuscate (tùy chọn) :
Obfuscate sẽ loại bỏ các thông tin không cần thiết trong class, chẳng hạn như
tên của các biến cục bộ. Các lớp, phương thức, interface,... cũng được đổi tên để
làm cho chúng ngắn gọn hơn. Một gói đã được obfuscate sẽ bảo vệ các tập tin class
khỏi việc dịch ngược (decompile) và reverse engineering. Ngoài việc bảo vệ mã
nguồn, obfuscate còn giảm kích thước của các tập tin class, làm cho kích thước của
tập tin JAR cũng giảm đi. Việc giảm kích thước rất có ý nghĩa bởi vì các thiết bị
MIDP thường có bộ nhớ bị giới hạn.
d) Pre-verify (tiền kiểm tra).
Bộ kiểm tra (verify) trong J2SE tốn ít nhất là 50 KB, không kể việc tiêu tốn
vùng nhớ heap và thời gian xử lý. Để giảm việc tiêu tốn này cho J2ME, việc kiểm
tra tập tin class sẽ được chia thành hai giai đoạn. Quá trình tiền kiểm tra trước khi
triển khai sẽ thêm các tập tin class các tham số phụ để tăng tốc quá trình kiểm tra
lúc thực thi. Thiết bị sẽ thực hiện quá trình kiểm tra sơ lược bằng cách sử dụng các
tham số phụ được phát sinh trong quá trình tiền kiểm tra.
e) Tạo tập tin JAR
f) Tạo tập tin JAD
g) Thực thi trên trình giả lập thích hợp
h) Triển khai trên thiết bị di động
Chương 1 : Tổng quan về lập trình trên điện thoại di động
5
1.2.2. Các J2ME IDE :
Môi trường phát triển tích hợp (IDE) cải thiện năng suất của lập trình viên
bằng cách cung cấp một tập các công cụ lập trình tích hợp thông qua giao diện đồ
họa (GUI), hỗ trợ công cụ soạn thảo, quản lý project, biên dịch và gỡ rối
(debugger).
Thành viên mới nhất trong gia đình Java là J2ME. Khi nhiều chuyên gia dự
đoán về sự phát triển lớn mạnh của thị trường phát triển các ứng dụng J2ME, các
nhà phát triển IDE đã đưa ra các bản mở rộng cho các sản phẩm IDE của họ để hỗ
trợ thêm J2ME. Ngoài ra, các nhà cung cấp chuyên nghiệp khác cũng đã phát triển
các IDE đơn dành riêng cho J2ME.
Một IDE cho J2ME cần phải cung cấp các tiện ích sau :
a) Quản lý project :
Quản lý các tập tin nguồn và các thông số MIDlet.
b) Trình soạn thảo :
Soạn thảo mã nguồn và các tài nguyên.
c) Build :
Biên dịch, obfuscate và pre-verify mã nguồn.
d) Đóng gói (package) :
Đóng gói các MIDlet thành các tập tin JAR và JAD.
e) Giả lập (emulation) :
Thực thi các MIDlet với một trình giả lập.
f) Gỡ rối (debugger)
Chương 1 : Tổng quan về lập trình trên điện thoại di động
6
1.3. Giới thiệu một số công cụ hỗ trợ lập trình cho J2ME :
1.3.1. J2ME Wireless Toolkit (WTK) :
J2ME Wireless Toolkit (WTK) là một bộ công cụ phát triển J2ME cung cấp
cho các lập trình viên môi trường giả lập, công cụ, tài liệu và các ví dụ cần thiết để
phát triển các ứng dụng MIDP. WTK không phải là một IDE hoàn chỉnh, bởi vì nó
đã bỏ các tính năng soạn thảo và gỡ rối vốn được xem là bắt buộc phải có trong một
IDE. Tuy nhiên, KToolbar, được cung cấp trong bộ WTK là một môi trường phát
triển tối thiểu cung cấp một GUI dành cho việc biên dịch, đóng gói và thực thi các
ứng dụng MIDP.
WTK 2.2 cũng cung cấp các bộ giả lập đã được cải tiến với các tính năng giả
lập, monitor và debug mới. Ngoài ra, WTK cũng có một cơ chế được thêm vào tiến
trình build của KToolbar để cho phép việc tích hợp và thực thi bộ obfuscate Java
bytecode khi đóng gói MIDlet suite.
WTK 2.2 được cải thiện tốc độ và hỗ trợ các API mới, gồm :
Connected Limited Device Configuration (CLDC) 1.1 (JSR 139)
Mobile Information Device Profile (MIDP) 2.0 (JSR 118)
Java Technology for the Wireless Industry (JTWI) 1.0 (JSR 185)
Wireless Messaging API (WMA) 2.0 (JSR 205)
Mobile Media API (MMAPI) 1.1 (JSR 135)
PDA Optional Packages for the J2ME Platform (JSR 75)
Java APIs for Bluetooth (JSR 82)
J2ME Web Services Specification (JSR 172)
Mobile 3D Graphics API for J2ME (JSR 184)
Mỗi project có một thư mục dành riêng trong thư mục apps. Thư mực apps
nằm bên trong thư mục chính của WTK.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
7
Các thư viện của hãng thứ ba có thể được cấu
hình bên trong KToolbar. Ngoài ra, các thư viện cần
thiết cho từng project có thể được chép thủ công vào thư
mục lib bên trong thư mục project. Nếu một thư viện cần
cho tất cả project, nó có thể được chép vào thư mục
apps/lib.
Khi KToolbar project được tạo ra, cấu trúc thư
mục project sẽ được thiết lập. Ngoài ra các tập tin JAD
va manifest cũng được phát sinh dựa vào các thông số
của MIDlet suite đã được xác định. Tuy nhiên, không có
tập tin nguồn nào được phát sinh cho MIDlet. Lập trình
viên phải viết các tập tin nguồn này từ đầu. KToolbar
không hỗ trợ nạp nhiều project trong một GUI. Trình
soạn thảo WTK không cung cấp một trình soạn thảo tích
hợp nào. Thay vào đó, lập trình viên phải sử dụng một
trình soạn thảo của hãng thứ ba.
Tạo lập và đóng gói :
KToolBar cung cấp hỗ trợ cho việc biên dịch một dự án. Một dự án được
dịch và tiền kiểm tra chỉ trong một bước thực hiện. Một chức năng khác được dùng
để đóng gói dự án. Gói được tạo ra sẽ chứa tập tin JAR và JAD của MIDlet suite.
WTK được tích hợp công cụ obfuscator là RetroGuard. Công cụ này không được
cung cấp kèm với WTK mà có thể được download miễn phí từ trang web
www.retrologic.com. Để cài đặt, chúng ta chỉ cần chép tập tin retroguard.jar vào thư
mục bin của thư mục cài đặt WTK.
Trình giả lập :
WTK cung cấp các giả lập để thực thi ứng dụng MIDP. Các thiết bị giả lập
được hỗ trợ :
DefaultColorPhone : điện thoại mặc định với màn hình màu.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
8
DefaultGrayPhone : điện thoại với màn hình xám.
Motorola_i85s : điện thoại Motorola.
PalmOS_Device : máy hỗ trợ các nhân kỹ thuật số.
Nhận xét :
WTK là một môi trường cơ bản cho việc phát triển các ứng dụng trên thiết bị
không dây. Tuy nhiên, do thiếu một trình soạn thảo và chức năng gỡ rối, rõ ràng
công cụ này không thể nào cạnh tranh được với các công cụ thương mại khác. Tuy
nhiên, với những ai mới bắt đầu tìm hiểu về J2ME thì đây vẫn là một công cụ có
ích. Bằng việc tạo lập sẵn một cấu trúc thư mục, nó cho phép lập trình viên có thể
xây dựng ngay ứng dụng mà không cần quan tâm về việc tổ chức các tập tin, tài
nguyên trong dự án. Khi một lập trình viên đã trở nên thành thạo với việc phát triển
ứng dụng J2ME thì có thể chuyển sang sử dụng một công cụ khác.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
9
1.3.2. Borland Jbuilder :
Môi trường làm việc của JBuilder cho J2ME hoàn toàn giống như môi
trường phát triển các ứng dụng Java bình thường nhưng có thêm các tabs và options
trong các hộp thoại để hỗ trợ J2ME và hai wizards mới : MIDP MIDlet wizard và
MIDP Displayable wizard. Trong phiên bản JBuilder Professional và Enterprise.
Trình Archive Builder có thể tạo ra một MIDlet suite với các tập tin manifest và
JAD tương ứng. JBuilder 2005 cũng cài đặt WTK 2.1 được sử dụng như một môi
trường giả lập. Ngoài ra, JBuilder còn cung cấp các hướng dẫn cho việc tích hợp
thêm các J2ME JDK khác, chẳng hạn như Nokia Developer Suite for J2ME và
Siemens Mobility Toolkit (SMTK).
Ngoài các tính năng chính của JBuilder, khi lập trình cho J2ME chúng ta
được thêm các tính năng sau :
Code completion cho các lớp CLDC/MIDP
Duyệt class/package cho các lớp CLDC/MIDP
Chuyển đổi JDK
Các MIDP wizards
Bộ thiết kế trực quan (visual designer) cho các thành phần giao diện
MIDP
Công cụ gỡ rối MIDlet
Đóng gói file JAD và JAR
Nạp dữ liệu thông qua OTA (Over The Air Provisioning)
Quản lý dự án :
Tập tin project chứa một danh sách các tập tin trong dự án và các thuộc tính
của dự án đó. JBuilder sử dụng thông tin này khi thực hiện nạp, lưu, biên dịch hay
chạy một project. Tập tin project bị thay đổi khi JBuilder thêm hay xóa tập tin, thiết
lập hay thay đổi các thuộc tính của project. Khi tạo một dự án J2ME, dự án phải
được liên kết với một J2ME JDK. Khi tạo mới một project, một wizard sẽ phát sinh
nội dung cơ bản của tập tin, tạo thư mục cho các thành phần trong project.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
10
Hình 1-2 : Tạo project J2ME bằng Wizard trong JBuilder
Wizard cho phép chúng ta thêm các tập tin vào trong MIDlet bằng cách phát
sinh các tập tin dựa trên các tùy chọn mà chúng ta yêu cầu.
MIDlet : phát sinh một lớp con của MIDlet và một lớp con của
Displayable (Canvas, Form, List hay TextBox).
MIDP Displayable : phát sinh một lớp con của lớp Displayable.
Thông thường, chúng ta chọn MIDlet. Khi đó MIDlet wizard sẽ thu thập tất
cả các thông tin cần thiết. Một wizard khác sẽ được gọi để tạo ra các lớp
Displayable sau đó.
JBuilder cung cấp một bộ UI designer cho các ứng dụng MIDP. Bộ MIDP
designer dựa trên bộ Swing UI designer có sẵn trong JBuilder.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
11
Màn hình duyệt các tập tin, thư mục trong dự án.
Màn hình duyệt cấu trúc của lớp và gói.
Cửa sổ soạn thảo mã nguồn :
Keyboard shortcuts
Brace matching
Syntax highlighting
Customizable editor key mappings
Chương 1 : Tổng quan về lập trình trên điện thoại di động
12
CodeInsight (code completion, parameter lists, và tool tip expression
evaluation)
Code templates
Cho phép soạn thảo nhiều tập tin trong một giao diện hỗ trợ tabs
Re-factoring
Tạo và đóng gói :
Khi biên dịch, JBuilder thực hiện các công việc sau :
Biên dịch MIDlet và tạo ra các tập tin .class.
Tiền kiểm tra các lớp đã được tạo.
Tạo tập tin JAD.
JBuilder phiên bản Professional và Enterprise có tích hợp bên trong một
obfuscator. Chức năng này có thể được bật qua tab Build trong cửa sổ Project
Properties.
Hình 1-3 : JBuilder MIDP Designer
Chương 1 : Tổng quan về lập trình trên điện thoại di động
13
MIDP designer giúp ta làm việc trực quan với các thành phần giao diện
MIDP cơ bản. Ngoài ra, nó còn hỗ trợ việc phát sinh mã tự động.
Các thành phần giao diện MIDP được hỗ trợ :
ChoiceGroup
DateField
Gauge
ImageItem
StringItem
TextField
Ticker
Spacer
Các thành phần MIDP screen :
Alert
Form
List
TextBox
Khi xử lý các thành phần với bộ MIDP designer, JBuilder tự động phát sinh
mã để quản lý giao diện. Mã phát sinh chuyên biệt cho JBuilder, điều này có nghĩa
là MIDP designer sẽ không thể dịch ngược lại các mã nguồn đã được viết tay.
MIDP Designer giúp phát triển nhanh các giao diện mẫu MIDP.
Trình giả lập :
JBuilder cung cấp các giả lập thiết bị về nguyên tắc cũng tương tự như
WTK, tuy nhiên chúng ta có thể sử dụng các trình giả lập của hãng thứ ba bằng
cách thiết lập các thuộc tính của dự án nếu muốn mà không gây ảnh hưởng gì cho
dự án. Các trình giả lập này có thể là của Nokia hay của Siemens…
Nếu công cụ của chúng ta có tích hợp nhiều trình giả lập thiết bị, khi đó tab
MIDlet trong cửa sổ Project Properties có thể được dùng để chọn thiết bị khi chạy
hay gỡ rối cho ứng dụng.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
14
Trình gỡ rối :
Khi bắt đầu gỡ rối, ngoài một màn hình giả lập cho thiết bị, một màn hình
dùng để hiển thị thông tin debug cũng xuất hiện. Chúng ta có thể gỡ rối nhiều ứng
dụng đồng thời qua các tab có trên màn hình này.
Hình 1-4 : Màn hình gỡ rối của JBuilder.
Các tab nằm bên trái dọc theo cửa sổ cho chúng ta thấy những gì đang diễn
ra bên trong ứng dụng, Qua các tab này chúng ta có thể xem các thông tin :
Console : thể hiện các kết quả cũng như lỗi của chương trình.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
15
Thread, call stack và data : thể hiện các nhóm luồng trong chương trình.
Mỗi nhóm luồng có thể được mở ra để xem các luồng bên trong.
Synchronization monitor : cho phép xem thông tin về sự đồng bộ giữa các
luồng và trạng thái của chúng, thông tin này đặc biệt hữu ích khi kiểm tra deadlock.
Data watches : thể hiện giá trị hiện thời của dữ liệu.
Loaded classes and static data : thể hiện các lớp đang được sử dụng bởi
ứng dụng. Chúng ta có thể mở một lớp để xem giá trị các thuộc tính của nó.
Data and code breakpoints : thể hiện tất cả các breakpoints đang được
thiết lập trong ứng dụng và trạng thái hiện tại của nó.
Classes with tracing disabled : thể hiện danh sách các lớp và gói chưa
được xem xét.
Nhận xét :
Chức năng thiết kế giao diện của JBuilder là một công cụ hữu ích trong việc
tạo lập giao diện MIDP. Tuy nhiên, chức năng này lại không hỗ trợ đầy đủ các
thành phần giao diện hiện có và trong nhiều trường hợp mã nguồn phát sinh cần
được chỉnh sửa thêm mới hoạt động đúng theo ý muốn.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
16
1.3.3. Sun ONE Studio 5, Mobile Edition
Sun ONE studio 5, Mobile Edition là một phiên bản được thay đổi từ Sun
ONE Studio để hỗ trợ và giúp đỡ các lập trình viên trong việc phát triển các ứng
dụng MIDP. Nó kết hợp các khả năng của Wireless Toolket với Sun ONE Studio
tạo thành một môi trường với các chức năng sau :
Kết hợp việc biên dịch, tiền kiểm tra, thực thi MIDlet và MIDlet suite.
Tự động phát sinh tập tin JAD và JAR.
Tích hợp khả năng gỡ rối (debug) cho MIDlet.
Code completion
Có thể tích hợp với các trình giả lập hay các bộ JDK của hãng thứ ba nhờ
vào Unified Emulator Interface
Cung cấp các mẫu cho việc tạo ra các MIDlet và MIDlet suite.
Tích hợp sẵn một trình giả lập
Có thể thiết lập trình giả lập riêng cho mỗi dự án J2ME.
Công cụ AutoUpdate giúp tự động hóa việc cập nhật công cụ.
Quản lý project :
Một project được tạo bởi Sun ONE Studio khi mới được tạo sẽ là một project
rỗng. Chúng ta phải tự thêm vào các MIDlet hay MIDlet suite theo nhu cầu của
mình.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
17
Hình 1-5 : Tạo project J2ME bằng Sun ONE Studio 5
Wizard tạo ra các tập tin dựa trên mẫu mà chúng ta chọn, các mẫu sau đây
được hỗ trợ trong công cụ :
Class : một lớp Java rỗng.
HelloMIDlet : một lớp có khả năng hiển thị văn bản lên màn hình thiết bị.
MIDPCanvas : tạo ra một lóp con của lớp Canvas. Canvas cho chúng ta
khả năng thao tác đồ họa cấp thấp.
MIDlet : các lóp thực thi cơ bản cho một thiết bị không dây.
MIDlet Suite : tạo ra một MIDlet suite.
Sau khi chọn mẫu, wizard sẽ lấy các thông tin cần thiết. Sau giai đoạn này,
các tập tin sẽ được tạo ra.
Tab Project trên màn hình Explorer cung cấp cho chúng ta một cái nhìn bên
trong project. Từ đây, chúng ta có thể duyệt qua các thông tin chứa đựng trong
MIDlet.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
18
Cửa sổ quản lý dự án.
Các thư viện khác có thể được tích hợp vào trong công cụ bằng tab
Filesystems trên cửa sổ Explorer.
Hình 1-6 : Cửa sổ quản lý tập tin của Sun ONE Studio 5
Chương 1 : Tổng quan về lập trình trên điện thoại di động
19
Editor :
Màn hình soạn thảo mã nguồn
Các đặc điểm chính của màn hình soạn thảo mã nguồn :
Tô màu các từ khóa trong ngôn ngữ Java.
Đánh số dòng.
Xem nhiều tập tin trong cùng một cửa sổ.
Định dạng mã nguồn tự động
Code completion.
Biên dịch và đóng gói :
Sun ONE Studio cung cấp trợ giúp trong việc biên dịch và đóng gói một dự
án. Với công cụ này chúng ta có thể kết hợp việc tạo ra đóng gói trong khi thực hiện
biên dịch. Khi biên dịch, Sun ONE Studio :
Dịch MIDlet và tạo ra các tập tin .class.
Thực hiện tiền kiểm tra các lớp đã được biên dịch.
Tạo tập tin JAR.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
20
Tạo tập tin JAD.
Trình giả lập :
Mặc định khi cài đặt, Sun ONE Studio dùng trình giả lập của WTK để chạy
các ứng dụng MIDP, ngoài ra, chúng ta cũng có thể thêm vào các trình giả lập khác
do hãng thứ ba phát triển bằng chức năng Device Emulator Registry.
Chỉ các trình giả lập có hỗ trợ môi trường giả lập J2ME SDK mới có thể
được dùng chung với Sun ONE Studio. Nghĩa là chúng ta có thể dùng chung công
cụ này với Nokia Developer’s Suite hay Siemens Mobility Toolkit mà không gây
ảnh hưởng gì đến đề án.
Tab Runtime trong cửa sổ Explorer được dùng để quản lý Device Emulator
Registry. Qua chức năng này, chúng ta có thể thêm, xóa hay chọn trình giả lập mặc
định để sử dụng.
Màn hình quản lý trình giả lập.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
21
Bộ gỡ rối (Debugger) :
Sun ONE Studio cung cấp một trình gỡ rối có thể dùng để dò tìm các lỗi
trong ứng dụng MIDP. Khi một phiên gỡ rối được bắt đầu, màn hình bao gồm ba
cửa sổ là : Debugger Window, Output Window và Source Editor sẽ xuất hiện.
Màn hình Debugger chứa 7 màn hình con, giúp chúng ta xem xét những gì
đang diễn ra trong ứng dụng MIDP của chúng ta, đó là các màn hình :
Session : liệt kê các ứng dụng đang chạy.
Breakpoints : liệt kê các breakpoint được thiết lập. Breakpoint có thể
được thiết lập trên một dòng lệnh, trên tên phương thức, trên một ngoại lệ, lớp,
luồng hay một biến.
Thread : liệt kê các luồng và nhóm luồng đang chạy trong phiên làm việc
hiện hành.
Call Stack : liệt kê sơ đồ các lời gọi hàm được thực hiện trong quá trình
thực thi luồng hiện hành. Phương thức được thực thi cuối cùng sẽ ở đầu danh sách.
Phương thức được thực thi đầu tiên sẽ nằm ở cuối danh sách.
Watches : danh sách các biến và biểu thức mà chúng ta cần khảo sát giá
trị trong quá trình gỡ rối. Ở đây chúng ta có thể thay đổi giá trị các biến khi chúng
đang chạy.
Variable : liệt kê các biến cục bộ, các thực thể và các biến tĩnh trong
phạm vi của phương thức mà chúng ta đang xem xét.
Classes : liệt kê các lớp được sử dụng bởi tiến trình đang được gỡ rối.
Chương 1 : Tổng quan về lập trình trên điện thoại di động
22
Màn hình gỡ rối của Sun ONE Studio
Nhận xét :
Sun ONE Studio là một trong những chương trình phát triển miễn phí đầu
tiên cho J2ME. Hầu như tất cả các đặc tính mà một lập trình viên mong đợi đều
được tích hợp vào trong công cụ này. Một lập trình viên có hiểu biết vể MIDP và đã
có kinh nghiệm trong việc sử dụng Sun ONE Studio có thể dùng nó để phát triển
ứng dụng MIDP chỉ sau một vài giờ tìm hiểu.
Tuy nhiên, Sun ONE Studio lại thiếu các đặc điểm khác khi lập trình J2ME
để có thể giúp nó nổi trội hơn các trình soạn thảo đối thủ khác. Hầu hết các đặc
điểm có được là do được đem từ phiên bản dành cho J2SE sang.
Sun ONE Studio là một phiên bản miễn phí. Do đó một số chức năng của nó
vẫn chưa thực sự tốt so với các công cụ thương mại khác.
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
23
Chương 2 : GIỚI THIỆU KHÁI QUÁT VỀ CHUẨN J2ME
2.1. Nền tảng Java :
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, các phiên bản đó là :
Java 2 Platform, Enterprise Edition (J2EE™) phục vụ cho các nhu cầu về
thương mại như phục vụ khác hàng, các vấn đề 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 (J2SE™) đượ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, Micro Edition (J2ME™) chạy trên các máy với tài
nguyên hạn chế.
Hình vẽ sau minh họa các phiên bản hiện có của Java và lĩnh vực ứng dụng
của chúng, bắt đầu từ bên trái là các nền tảng cao cấp sang bên phải là các nền tảng
cấp thấp hơn. Java 2 Enterprise Edition hỗ trợ các máy tính dùng trong doanh
nghiệp, Java 2 Standard Edition hỗ trợ cho các máy tính các nhân, máy tính để bàn.
Java 2 Micro Edition được chia thành 2 loại cho các thiết bị cấp cao (máy PDA cấp
cao, điện thoại web) và các thiết bị cấp thấp (điện thoại di động và PDA với khoảng
512KB bộ nhớ).
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
24
Hình 2-1 : Kiến trúc J2ME
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 Java 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ị. Giống như việc các nhà sản xuất thiết bị phát triển các tính năng khác trong
sản phẩm của mình, cấu hình này có thể được mở rộng với các thư viện mới phục
vụ cho nhu cầu của thị trường. Để hỗ trợ cho khả năng tùy biến và khả năng mở
rộng này, chúng ta có 3 khái niệm sau trong kiến trúc J2ME.
Configuration (Cấu hình) :
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
Một configuration định nghĩa các đặc điểm của máy ảo Java và cung cấp các
thư viện lớp tối thiểu mà 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 lập trình viên có thể dựa vào môi trường lập trình nhất
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
25
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ể.
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. 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 đó, chúng ta
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. Một thiết bị có thể hỗ trợ nhiều profile.
Optional package :
Là các API có thể sử dụng trong nhiều thiết bị hay một họ các thiết bị. Một
J2ME option package là một tập các API nằm trên một profile. Một optional
package thường chứa các chức năng độc lập với các thiết bị. Mục đích chính của
các optional package này là cho phép bổ sung các API trên các profiles. Một thiết bị
có thể hỗ trợ nhiều optional package khác nhau.
Configurations, profiles và các optional packages sử dụng các tính năng của
máy ảo Java (Java Virtual Machine). Máy ảo này chạy trên một hệ điều hành thuộc
về phần mềm hệ thống của thiết bị. Quan hệ của chúng được thể hiện qua hình vẽ
sau :
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
26
Hình 2-2 : Các thành phần trong kiến trúc J2ME
Configuration :
Trong môi trường J2ME, một ứng dụng được viết cho một profile riêng biệt
nào đó, profile này lại mở rộng từ một configuration. Vì thế, tất cả các đặc điểm của
một configuration sẽ được giữ lại trong profile có thể được sử dụng bởi ứng dụng
viết cho profile này.
Một configuration định nghĩa một nền Java cho các thiết bị có các đặc tính
tương tự nhau (chẳng hạn như về bộ nhớ, tốc độ xử lý,…). Một configuration sẽ xác
định :
• Các tính năng của ngôn ngữ Java được hỗ trợ.
• Các tính năng của máy ảo Java được hỗ trợ.
• Thư viện chuẩn và các API .
Nói một cách đơn giản, một configuration định nghĩa một đặc tả mà các nhà
sản xuất thiết bị và những người xây dựng profile phải tuân theo. Tất cả các thiết bị
có chung đặc tính (bộ nhớ, tốc độ xử lý) phải “đồng ý” cài đặt đúng các đặc điểm
được xác định và những người xây dựng profile chỉ được sử dụng các đặc tính được
định nghĩa trong configuration. Một lập trình viên viết chương trình game cho điện
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
27
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. Qua đây ta thấy khẩu hiệu “Write Once, Run
Anywhere” của Java đã không còn đúng nữa, nhưng chú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 :
a) CLDC - Connected Limited Device Configuration :
CLDC đượ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 nhắn tin, máy điện thoại di động và PDA. Các
thiết bị này có giao diện đơn giản, bộ nhớ khoảng 32K đến 512 KB bộ nhớ, băng
thông nhỏ, trong các thiết bị này, việc truyền thông trên mạng không dựa vào giao
thức TCP/IP. 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.
b) CDC - Connected Device Configuration :
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. Các thiết
bị thuộc loại này bao gồm các hộp điều khiển TV, tivi Internet, điện thoại Internet,
các thiết bị giải trí, định hướng. Các thiết bị này có giao diện phong phú, bộ nhớ
nhiều hơn (thông thường là trên 2Mb) và có bộ xử lý mạnh hơn, băng thông lớn và
sử dụng giao thức TCP/IP.
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, 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 hỗ
trợ các phép tính toán dấu phẩy động, nên máy ảo thuộc CLDC không được hỗ trợ
kiểu float và double.
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
28
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 2-1 : Phân loại CLDC và CDC
Hình vẽ sau minh họa quan hệ giữa CLDC, CDC và Java 2 Standard Edition
(J2SE). Theo đó, chúng ta thấy một phần lớn các chức năng trong CLDC và CDC
có được do thừa kế từ Java 2 Standard Edition (J2SE). Mỗi lớp được thừa kế từ
J2SE phải giống hoặc gần giống với lớp tương ứng trong J2SE. Thêm vào đó,
CLDC và CDC có một số đặc tính khác được thiết kế cho các thiết bị nhúng mà
J2SE không có (ví dụ như các thành phần giao diện).
Hình 2-3 : Quan hệ giữa J2ME configuration và J2SE.
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
29
2.2. 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 có tên 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 yêu cầu
về 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, những lập trình viên
không thể xử lý lỗi được vì đã quá trễ.
Các lớp thừa kế từ J2SE :
CLDC yêu cầu khoảng 160 KB để 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 trong CLDC :
• Các lớp hệ thống (system classes)
java.lang.Class
java.lang.Object
java.lang.Runnable (interface)
java.lang.Runtime
java.lang.String
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
30
java.lang.StringBuffer
java.lang.System
java.lang.Thread
java.lang.Throwable
• Các lớp thuộc kiểu dữ liệu (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
• Các lớp nhập/xuất (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
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
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
31
• 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
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 :
o Lấy thông tin về platform của thiết bị :
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
32
System.getProperty("microedition.platform")
o Lấy bảng mã ký tự :
System.getProperty("microedition.encoding")
o Lấy tên và phiên bản của cấu hình (configuration)
System.getProperty("microedition.configuration")
o Lấy tên của các profile được hỗ trợ :
System.getProperty("microedition.profiles")
K Virtual Machine :
KVM là một máy ảo Java phù hợp với 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ị.
2.3. MIDP :
2.3.1. Đị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. Tuy nhiên MIDP cũng có nhiều hạn chế lớn cũng vì chỉ được thiết kế cho các
máy di động có cấu hình rất thấp.
2.3.2. Yêu cầu về phần cứng :
• Màn hình có kích thước tối thiểu là 96 x 54 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.
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
33
Các hệ điều hành trên các thiết bị thì thay đổi tùy theo thiết bị, do đó, MIDP
không quá khắt khe về các yêu cầu phần mềm. Sau đây là một số yêu cầu :
• Hệ điều hành trên các thiết bị phải cung cấp khả năng xử lý ngoại lệ, xử
lý ngắt, và phải chạy được máy ảo Java
• Hỗ trợ vẽ ảnh bitmap ra màn hình.
• Dùng một trong 3 loại thiết bị nhập đã liệt kê ở trên,.
• Hỗ trợ đọc và ghi dữ liệu từ bộ nhớ chính.
2.3.3. Các khả năng và hạn chế của MIDP :
Các hạn chế của MIDP :
MIDP KHÔNG hỗ trợ các tính năng sau :
• 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 các lập trình 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. Điều này có thể làm
chúng ta ngạc nhiên nhưng thực tế là các thiết bị J2ME không có hỗ trợ các thiết bị
lưu trữ thông thường như ổ cứng… Tuy nhiên, điều đó không có nghĩa là chúng
phải mất đi mọi dữ liệu quan trọng mỗi khi tắt máy, Sun đã cung cấp một chức năng
khác tương đươ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.
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
34
Những chức năng MIDP cung cấp :
• 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, Vector
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ợ 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 đã tung ra MIDP 2.0 với hàng loạt tính
năng khác được cung cấp thêm so với bản 1.0 (Hiện nay tại Việt Nam có rất nhiều
đời điện thoại hỗ trợ MIDP 2.0 như Nokia 6600, Sony Ericsson P900,..). Sau đây là
các cải tiến nổi bật so với MIDP 1.0
• Nâng cấp các tính năng bảo mật như :
o Download qua mạng an toàn hơn qua việc hỗ trợ giao thức
HTTPS.
o 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ở rộng các tính năng của Form. Nhiều cải tiến đã được đưa vào API
javax.microedition.lcdui trong MIDP 2.0, nhưng các thay đổi lớn nhất (ngoài API
cho game) là trong Form và Item.
• Hỗ trợ các lập trình viên Game bằng cách tung ra Game API. Có lẽ Sun
đã kịp nhận ra thị trường đầy tiềm năng của các thiết bị di động trong lĩnh vực
Game. Với MIDP 1.0 thì các lập trình viên phải tự mình viết code để quản lý các
Chương 2 : Giới thiệu khái quát về chuẩn J2ME
35
hành động của nhân vật cũng như quản lý đồ họa. Việc này sẽ 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 các 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à tập hợp các layer (lớp). Ví dụ như : trong một game đua xe thì màn hình nền là
một layer, con đường là một layer và chiếc xe được xem như đang nằm trên layer
khác.
• Với Game API nhà phát triển còn được 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.
Chương 3 : Những khó khăn do hạn chế của J2ME
36
Chương 3 : NHỮNG KHÓ KHĂN DO HẠN CHẾ CỦA J2ME
Như chương 2 đã đề cập, J2ME được thiết kế nhắm đến thị trường các thiết
bị di động có cấu hình thấp, hạn chế về năng lực xử lý và khả năng lưu trữ. Cũng vì
vậy, bộ thư viện lớp của J2ME cũng được giản lược để trở nên đơn giản và gọn nhẹ
hơn rất nhiều so với J2SE. Những hàm, lớp ít khi sử dụng, không cần thiết hoặc
không thể cài đặt được do khả năng hạn chế của phần cứng thiết bị đều được loại
bỏ. Tuy vậy, việc loại bỏ quá nhiều thư viện hàm cũng gây không ít khó khăn cho
nhóm trong quá trình thực hiện đề tài, đặc biệt là việc thiếu thốn các hàm về đồ họa.
Điều này đặt ra yêu cầu tìm kiếm giải pháp khắc phục hoặc các giải pháp thay thế.
3.1. Các hàm tô màu :
Thư viện đồ họa của J2ME – MIDP 1.0 chỉ hỗ trợ các hàm tô màu sau :
fillArc : tô màu cho vùng giới hạn bởi một cung
fillRect : tô màu cho một hình chữ nhật
fillRoundRect : tô màu cho một hình chữ nhật có góc tròn
Nhằm giúp người xem bản đồ dễ dàng phân biệt được các đơn vị hành chính
(trong đề tài này, đó là các quận), hầu hết trong mọi bản đồ, người ta thường tô màu
cho mỗi đơn vị sao cho hai vùng kế cận nhau không cùng màu với nhau.
Nếu như trong Visual C++, chúng ta có thể sử dụng ít nhất là 1 trong 3 hàm
FillRgn, FillPolygon, FloodFill để thực hiện được việc này. Trong phiên bản Java
chuẩn (J2SE) cũng có cung cấp hàm FillPolygon nhưng đáng tiếc là trong J2ME,
hàm này lại bị lược bỏ và chuẩn J2ME cũng không cung cấp hàm nào giúp tô màu
Chương 3 : Những khó khăn do hạn chế của J2ME
37
cho một vùng kín có hình dạng bất kỳ. Nếu chỉ sử dụng 3 hàm tô màu như trên thì
không thể nào thực hiện được.
Tuy vậy, một điều may mắn là trong phiên bản MIDP 2.0, thư viện đồ họa lại
được thêm vào 1 hàm mới, đó là fillTriangle. Đó là một cơ hội mà chúng ta có thể
tận dụng được.
Theo một quy tắc trong đồ họa máy tính, một mặt phẳng bất kỳ, kể cả hình
tròn đều có thể được lợp kín từ nhiều tam giác (với số lượng tam giác đủ lớn). Như
vậy, nếu chúng ta có thể tạo được các tam giác từ dữ liệu về ranh giới của các quận
rồi áp dụng hàm fillTriangle thì vấn đề tô màu cho các quận sẽ được giải quyết.
Tuy nhiên, cách này có một hạn chế đó là chỉ có thể thực hiện được nếu điện
thoại di động sử dụng MIDP 2.0
3.2. Các hàm vẽ đường :
Thư viện đồ họa trong J2ME chỉ hỗ trợ hàm vẽ đường thẳng có độ dày là 1
pixel, ngoài ra không có hàm nào khác cho phép thay đổi độ dày này, điều mà
chúng ta có thể thay đổi được chỉ là dạng nét vẽ : nét liền (SOLID) hay nét đứt
(DOTTED). Nếu so với phiên bản chuẩn J2SE thì chúng ta thấy rằng thư viện đồ
họa J2ME đã bị loại bỏ hàm setStroke vốn dễ dàng thực hiện được điều này.
Như vậy, khi cần vẽ các con đường trên bản đồ có độ dày mỏng khác nhau
và đủ lớn để có thể vẽ tên đường trên đó cũng như để phân biệt các đại lộ với các
đường nhỏ hơn, chúng ta buộc phải vẽ liên tiếp nhiều đoạn thẳng xếp cạnh nhau.
Chương 3 : Những khó khăn do hạn chế của J2ME
38
Đây là các giải quyết đơn giản nhất, tuy nhiên, việc gọi nhiều hàm vẽ liên tục
cũng có hạn chế là làm giảm tốc độ của chương trình. Do đó, chương trình cần phải
so sánh để loại bỏ việc vẽ những những đường không nhìn thấy và hạn chế đến mức
thấp nhất số đoạn thẳng cần vẽ.
3.3. Vấn đề font chữ :
J2ME không cho phép chúng ta thay đổi loại font chữ cho đối tượng
Graphics, có nghĩa là không cho phép chúng ta quy định font family, font size…
Điều này có thể là do font hệ thống trong thiết bị là có giới hạn và chỉ có một số
điện thoại di động cho phép cài đặt thêm font chữ vào máy.
Khi tạo một đối tượng thuộc lớp Font để sử dụng, chúng ta chỉ có một cách,
đó là :
Font font = Font.getFont(int face, int style, int size)
Trong đó, các tham số truyền vào bắt buộc phải là các hằng số sau :
face : FACE_SYSTEM, FACE_MONOSPACE, FACE_PROPORTIONAL
style : STYLE_PLAIN, hoặc tổ hợp từ các dạng STYLE_BOLD,
STYLE_ITALIC, STYLE_UNDERLINED
size : SIZE_SMALL, SIZE_MEDIUM, SIZE_LARGE
Đặc điểm này gây ra một bất lợi cho chương trình, đó là khó xác định được
chính xác kích thước của font chữ được sử dụng để lựa chọn cho phù hợp vì đối với
một số điện thoại, font với kích thước trung bình có thể đẹp, nhưng với một số điện
thoại khác thì quá to hoặc quá nhỏ hay quá cao.
Mặt khác, khi phóng to bản đồ đến một mức nào đó thì font chữ có kích
thước tối đa cũng sẽ trở nên quá nhỏ và không còn phù hợp nữa. Đây là một vấn đề
thuộc về hệ thống cho nên nhóm thực hiện đề tài không khắc phục được triệt để mà
Chương 3 : Những khó khăn do hạn chế của J2ME
39
chỉ có thể chọn lựa được dạng font cùng với kích thước thích hợp nhất phù hợp với
phần lớn điện thoại phổ biến trên thị trường Việt Nam hiện nay.
3.4. Vấn đề vẽ chuỗi ký tự :
Trong J2ME, việc vẽ một chuỗi ký tự được thực hiện thông qua hàm sau :
public void drawString(String str, int x, int y, int anchor)
với x, y là tọa độ bắt đầu vẽ và anchor là chế độ căn lề. Anchor được tổ hợp từ 1
hằng số căn lề theo chiều ngang (LEFT, HCENTER, RIGHT) và 1 hằng số nhằm
căn lề theo chiều dọc (TOP, BASELINE, BOTTOM).
Nếu như trong Visual C++, chúng ta có thể vẽ chuỗi ký tự xoay theo mọi
hướng nhờ vào 2 trường lfEscapement và lfOrientation của struct LOGFONT thì
trong J2ME, chúng ta không được cung cấp bất cứ một hàm, một đối tượng nào có
chức năng tương tự như thế. Mọi chuỗi ký tự do thư viện đồ họa của J2ME vẽ ra
đều có chiều nằm ngang.
Như vậy, nếu một con đường trên bản đồ có chiều không nằm theo phương
ngang (hầu hết các đường đều như vậy) thì chúng ta không thể sử dụng hàm vẽ
chuỗi ký tự nêu trên để vẽ tên đường cũng như không thể xoay tên theo hướng của
đường như trong các bản đồ bình thường khác :
Chương 3 : Những khó khăn do hạn chế của J2ME
40
Để khắc phục việc này, chúng ta có thể sử dụng một giải pháp thay thế, đó là
phân rã chuỗi tên đường thành các ký tự rồi trực tiếp tính toán để xác định vị trí của
mỗi ký tự trên bản đồ, sau đó sử dụng hàm vẽ ký tự để hiển thị từng ký tự này ra
màn hình :
public void drawChar(char character, int x, int y, int anchor)
ý nghĩa của các tham số tương tự như hàm drawString.
Sau khi áp dụng phương pháp trên, kết quả đạt được như sau :
Nhận xét :
Giải pháp này cũng chưa thật sự tốt do buộc chương trình phải xử lý, tính
toán nhiều. Ngoài ra, việc vẽ các ký tự trong tên đường một cách rời rạc như vậy
cũng có thể khiến người sử dụng khó theo dõi nếu một vùng nào đó có số lượng
đường giao thông nhiều và nằm gần nhau. Tuy vậy, trong điều kiện thiếu thốn các
hàm về xử lý font chữ, các hàm vẽ ký tự của thư viện đồ họa thì đây là giải pháp
duy nhất, tốc độ thực hiện cũng có thể chấp nhận được.
3.5. Vấn đề về số thực :
Như chương 2 đã trình bày, J2ME đã loại bỏ kiểu dữ liệu số thực (float,
double). Từ lý do này chương trình gặp phải một số khó khăn sau :
- Phải xây dựng lại hàm tính căn bậc 2 để phục vụ cho mục đích xác định
khoảng cách giữa 2 tọa độ.
- Vì không hỗ trợ số thực cho nên J2ME cũng không hỗ trợ các hàm tính sin,
cos của một góc. Như vậy, chúng ta không thể vẽ được mũi tên cho các đoạn
đường một chiều bởi vì để xác định được 2 đoạn thẳng trên đầu mũi tên,
Chương 3 : Những khó khăn do hạn chế của J2ME
41
chúng ta bắt buộc phải sử dụng đến công thức lượng giác. Hiện nay, có nhiều
lập trình viên trên thế giới xây dựng một thư viện bổ sung để xử lý các số
thực :
http://bearlib.sourceforge.net
http://henson.newmail.ru/j2me/Float.htm
Tuy nhiên, xét thấy việc sử dụng thêm các thư viện hàm bổ sung sẽ làm tăng
đáng kể kích thước và việc tính toán nhiều trên số thực cũng khiến cho chương trình
chạy chậm đi, hơn nữa, đây cũng không phải là tính năng thực sự quan trọng nên
nhóm thực hiện đề tài không cài đặt phần này.
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java
Ban do tren dien thoai di dong co ho tro java

More Related Content

More from Vcoi Vit

Giao trinh nuoi_trong_thuy_san23
Giao trinh nuoi_trong_thuy_san23Giao trinh nuoi_trong_thuy_san23
Giao trinh nuoi_trong_thuy_san23
Vcoi Vit
 
Giao trinh nuoi_trong_thuy_san22
Giao trinh nuoi_trong_thuy_san22Giao trinh nuoi_trong_thuy_san22
Giao trinh nuoi_trong_thuy_san22
Vcoi Vit
 
Giao trinh nuoi_trong_thuy_san21
Giao trinh nuoi_trong_thuy_san21Giao trinh nuoi_trong_thuy_san21
Giao trinh nuoi_trong_thuy_san21
Vcoi Vit
 
Giao trinh nuoi_trong_thuy_san16
Giao trinh nuoi_trong_thuy_san16Giao trinh nuoi_trong_thuy_san16
Giao trinh nuoi_trong_thuy_san16
Vcoi Vit
 
Giao trinh nuoi_trong_thuy_san05
Giao trinh nuoi_trong_thuy_san05Giao trinh nuoi_trong_thuy_san05
Giao trinh nuoi_trong_thuy_san05
Vcoi Vit
 
Giao trinh nuoi_trong_thuy_san02
Giao trinh nuoi_trong_thuy_san02Giao trinh nuoi_trong_thuy_san02
Giao trinh nuoi_trong_thuy_san02
Vcoi Vit
 
Giao trinh tong hop sv50
Giao trinh tong hop sv50Giao trinh tong hop sv50
Giao trinh tong hop sv50
Vcoi Vit
 
Giao trinh tong hop sv49
Giao trinh tong hop sv49Giao trinh tong hop sv49
Giao trinh tong hop sv49
Vcoi Vit
 
Giao trinh tong hop sv48
Giao trinh tong hop sv48Giao trinh tong hop sv48
Giao trinh tong hop sv48
Vcoi Vit
 
Giao trinh tong hop sv47
Giao trinh tong hop sv47Giao trinh tong hop sv47
Giao trinh tong hop sv47
Vcoi Vit
 
Giao trinh tong hop sv46
Giao trinh tong hop sv46Giao trinh tong hop sv46
Giao trinh tong hop sv46
Vcoi Vit
 
Giao trinh tong hop sv45
Giao trinh tong hop sv45Giao trinh tong hop sv45
Giao trinh tong hop sv45
Vcoi Vit
 
Giao trinh tong hop sv43
Giao trinh tong hop sv43Giao trinh tong hop sv43
Giao trinh tong hop sv43
Vcoi Vit
 
Giao trinh tong hop sv41
Giao trinh tong hop sv41Giao trinh tong hop sv41
Giao trinh tong hop sv41
Vcoi Vit
 
Giao trinh tong hop sv40
Giao trinh tong hop sv40Giao trinh tong hop sv40
Giao trinh tong hop sv40
Vcoi Vit
 
Giao trinh tong hop sv39
Giao trinh tong hop sv39Giao trinh tong hop sv39
Giao trinh tong hop sv39
Vcoi Vit
 
Giao trinh tong hop sv38
Giao trinh tong hop sv38Giao trinh tong hop sv38
Giao trinh tong hop sv38
Vcoi Vit
 
Giao trinh tong hop sv37
Giao trinh tong hop sv37Giao trinh tong hop sv37
Giao trinh tong hop sv37
Vcoi Vit
 
Giao trinh tong hop sv36
Giao trinh tong hop sv36Giao trinh tong hop sv36
Giao trinh tong hop sv36
Vcoi Vit
 
Giao trinh tong hop sv35
Giao trinh tong hop sv35Giao trinh tong hop sv35
Giao trinh tong hop sv35
Vcoi Vit
 

More from Vcoi Vit (20)

Giao trinh nuoi_trong_thuy_san23
Giao trinh nuoi_trong_thuy_san23Giao trinh nuoi_trong_thuy_san23
Giao trinh nuoi_trong_thuy_san23
 
Giao trinh nuoi_trong_thuy_san22
Giao trinh nuoi_trong_thuy_san22Giao trinh nuoi_trong_thuy_san22
Giao trinh nuoi_trong_thuy_san22
 
Giao trinh nuoi_trong_thuy_san21
Giao trinh nuoi_trong_thuy_san21Giao trinh nuoi_trong_thuy_san21
Giao trinh nuoi_trong_thuy_san21
 
Giao trinh nuoi_trong_thuy_san16
Giao trinh nuoi_trong_thuy_san16Giao trinh nuoi_trong_thuy_san16
Giao trinh nuoi_trong_thuy_san16
 
Giao trinh nuoi_trong_thuy_san05
Giao trinh nuoi_trong_thuy_san05Giao trinh nuoi_trong_thuy_san05
Giao trinh nuoi_trong_thuy_san05
 
Giao trinh nuoi_trong_thuy_san02
Giao trinh nuoi_trong_thuy_san02Giao trinh nuoi_trong_thuy_san02
Giao trinh nuoi_trong_thuy_san02
 
Giao trinh tong hop sv50
Giao trinh tong hop sv50Giao trinh tong hop sv50
Giao trinh tong hop sv50
 
Giao trinh tong hop sv49
Giao trinh tong hop sv49Giao trinh tong hop sv49
Giao trinh tong hop sv49
 
Giao trinh tong hop sv48
Giao trinh tong hop sv48Giao trinh tong hop sv48
Giao trinh tong hop sv48
 
Giao trinh tong hop sv47
Giao trinh tong hop sv47Giao trinh tong hop sv47
Giao trinh tong hop sv47
 
Giao trinh tong hop sv46
Giao trinh tong hop sv46Giao trinh tong hop sv46
Giao trinh tong hop sv46
 
Giao trinh tong hop sv45
Giao trinh tong hop sv45Giao trinh tong hop sv45
Giao trinh tong hop sv45
 
Giao trinh tong hop sv43
Giao trinh tong hop sv43Giao trinh tong hop sv43
Giao trinh tong hop sv43
 
Giao trinh tong hop sv41
Giao trinh tong hop sv41Giao trinh tong hop sv41
Giao trinh tong hop sv41
 
Giao trinh tong hop sv40
Giao trinh tong hop sv40Giao trinh tong hop sv40
Giao trinh tong hop sv40
 
Giao trinh tong hop sv39
Giao trinh tong hop sv39Giao trinh tong hop sv39
Giao trinh tong hop sv39
 
Giao trinh tong hop sv38
Giao trinh tong hop sv38Giao trinh tong hop sv38
Giao trinh tong hop sv38
 
Giao trinh tong hop sv37
Giao trinh tong hop sv37Giao trinh tong hop sv37
Giao trinh tong hop sv37
 
Giao trinh tong hop sv36
Giao trinh tong hop sv36Giao trinh tong hop sv36
Giao trinh tong hop sv36
 
Giao trinh tong hop sv35
Giao trinh tong hop sv35Giao trinh tong hop sv35
Giao trinh tong hop sv35
 

Ban do tren dien thoai di dong co ho tro java

  • 1. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM NGUYỄN NGỌC DUY QUANG – VŨ BÁ QUANG XÂY DỰNG BẢN ĐỒ TRÊN ĐIỆN THOẠI DI ĐỘNG CÓ HỖ TRỢ JAVA KHOÁ LUẬN CỬ NHÂN TIN HỌC TP. HCM, 2005
  • 2. TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN CÔNG NGHỆ PHẦN MỀM NGUYỄN NGỌC DUY QUANG - 0112194 VŨ BÁ QUANG - 0112395 XÂY DỰNG BẢN ĐỒ TRÊN ĐIỆN THOẠI DI ĐỘNG CÓ HỖ TRỢ JAVA KHOÁ LUẬN CỬ NHÂN TIN HỌC GIÁO VIÊN HƯỚNG DẪN Thạc sĩ LÊ THỤY ANH NIÊN KHÓA 2001-2005
  • 3. HO CHI MINH CITY – MOBILE MAP Version 1.0 / 07-2005 Siemens SK 65 Siemens SL 65
  • 4. Sony Ericsson K750 Sony Ericsson P900 Samsung E100 Samsung E710
  • 5. Nhận xét của giáo viên hướng dẫn ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................
  • 6. Nhận xét của giáo viên phản biện ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................ ............................................................................................................................
  • 7. i LỜI CẢM ƠN Chúng em xin chân thành cảm ơn Quý thầy cô trong Khoa Công nghệ Thông tin Trường Đại học Khoa học Tự nhiên đã tận tình dạy bảo cho chúng em nhiều kiến thức bổ ích trong suốt thời gian học tập tại trường cũng như đã tạo điều kiện cho chúng em được thực hiện đề tài này. Kính chúc các Thầy cô luôn dồi dào sức khỏe và thành công trong cuộc sống. Đặc biệt, chúng em xin bày tỏ lòng biết ơn sâu sắc đến thầy Lê Thụy Anh, người đã tận tình hướng dẫn chúng em trong suốt thời gian thực hiện đề tài, cho chúng em sự bình tĩnh và tự tin, giúp chúng em rút ra nhiều bài học kinh nghiệm quý báu mỗi khi chúng em vấp phải những khó khăn. Chúng em khó có thể hoàn thành được đề tài này nếu không nhờ sự tận tình chỉ bảo của thầy. Chúng con cảm ơn cha mẹ và gia đình đã sinh ra và nuôi dạy chúng con khôn lớn, luôn bên cạnh động viên và ủng hộ chúng con trên con đường mà chúng con đã yêu thích và lựa chọn. Cảm ơn các bạn sinh viên CNTT khóa 2001. Các bạn đã giúp đỡ, động viên và hỗ trợ chúng tôi rất nhiều cũng như đóng góp cho chúng tôi nhiều ý kiến quý báu, qua đó, giúp chúng tôi hoàn thiện hơn cho đề tài. Mặc dù đã rất nỗ lực, cố gắng nhưng chắc hẳn đề tài vẫn còn nhiều thiếu sót. Chúng em rất mong nhận được nhiều sự góp ý phê bình của Quý thầy cô, của các anh chị và các bạn. Một lần nữa, chúng em xin chân thành cảm ơn ! TP Hồ Chí Minh, tháng 7 năm 2005 Nhóm thực hiện Nguyễn Ngọc Duy Quang – Vũ Bá Quang
  • 8. ii LỜI NÓI ĐẦU Có thể nói rằng đề tài về bản đồ giao thông tại thành phố Hồ Chí Minh là một đề tài không mới. Trong các năm qua, đã có nhiều khóa luận của các sinh viên ngành CNTT nghiên cứu về chủ đề này, trong đó, đáng chú ý nhất là các đề tài của sinh viên Khoa CNTT Trường ĐH Khoa học Tự nhiên TP.HCM. Các đề tài này đa số đều được thực hiện rất tốt, hỗ trợ cho người dùng rất nhiều chức năng như : xem bản đồ, tra cứu thông tin về các đường đi, các địa điểm, tra cứu các tuyến xe buýt… đặc biệt là chức năng xác định lộ trình để tìm đường đi ngắn nhất giữa hai địa điểm và hầu hết các đề tài nói trên đều được thực hiện nhắm đến môi trường sử dụng là các máy tính để bàn hoặc Pocket PC. 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 đang trở nên sôi động hơn bao giờ hết. Một mặt, do thu nhập của người dân ngày càng được cải thiện 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 điện thoại di động cũng tăng theo. Mặt khác, các nhà sản xuất điện thoại di động nắm bắt được nhu cầu của giới trẻ ưa chuộng những sản phẩm “high-tech” và cũng do yêu cầu cạnh tranh với nhau nên liên tục tung ra nhiều sản phẩm mới với nhiều tính năng, cấu hình ngày càng được nâng lên và giá thành ngày càng giảm. Chiếc điện thoại di động giờ đây không phải là một món hàng quá xa xỉ. Nhờ đó, 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à đa số là các trò chơi, các chương trình tiện ích như xử lý ảnh chụp, đổi đơn vị đo lường, từ điển, soạn thảo văn bản, diệt virus… Tuy vậy, một ứng dụng về bản đồ giao thông, mà cụ thể là bản đồ thành phố Hồ Chí Minh dành cho điện thoại di động với các tính năng đã trình bày ở trên thì gần như chưa có. Có thể nói là “gần như chưa có” bởi vì trước đây, trên một số tạp chí, diễn đàn tin học cũng có giới thiệu một phần mềm bản đồ thành phố Hồ Chí
  • 9. iii Minh, tuy nhiên, phần mềm này cũng chỉ thực hiện được một chức năng là hiển thị bản đồ. Tuy thế, chức năng này cũng chưa thật tốt do chỉ lưu được ảnh tĩnh của bản đồ vào tập tài nguyên, vì vậy, không thể phóng to hay thu nhỏ bản đồ, và cũng vì thế làm cho chương trình có kích thước lớn, tốc độ chậm, không thích hợp cho các điện thoại có cấu hình trung bình hiện đang được dùng rất phổ biến tại thị trường Việt Nam. Với những lý do trên, nhóm chúng em chọn thực hiện đề tài “Xây dựng bản đồ trên điện thoại di động hỗ trợ Java”. Mục tiêu của đề tài nhằm xây dựng một phần mềm ứng dụng bản đồ giao thông TP. Hồ Chí Minh bằng ngôn ngữ lập trình Java, có thể thực thi được trên nhiều loại đ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ư chợ, trường học, bệnh viện, khách sạn…, đặc biệt là trợ giúp người sử dụng xác định lộ trình ngắn nhất để đi từ địa điểm này đến một địa điểm khác… Phần mềm này nếu được thực hiện tốt sẽ trở thành một ứng dụng rất hữu ích, rất thiết thực 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, chúng ta đều hình dung được hai trở ngại lớn. Thứ nhất, đó là năng lực của bộ vi xử lý trên điện thoại rất yếu và thứ hai, đó là dung lượng của bộ nhớ rất nhỏ. Điều này gây trở ngại không nhỏ đến việc tổ chức dữ liệu cho phần mềm, bởi lẽ, dữ liệu về các đường giao thông tại thành phố Hồ Chí Minh là rất lớn, muốn lưu được toàn bộ dữ liệu này trên chiếc điện thoại di động là một điều không đơn giản. Ngoài ra, các hạn chế của điện thoại di động cũng buộc người lập trình phải chọn giải thuật thật hiệu quả và luôn phải tính toán nhằm tối ưu cho chương trình. Mặt khác, đối với người lập trình, sự hạn chế của thư viện hàm trong ngôn ngữ Java được hỗ trợ cho điện thoại cũng là một vấn đề không dễ giải quyết. Những hạn chế đã nêu thật sự là một thách thức lớn mà đề tài bắt buộc phải vượt qua. Nội dung của bài báo cáo này được chia thành 7 chương như sau :
  • 10. iv - Chương 1 : Tổng quan về lập trình trên điện thoại di động. Chương này nêu những vấn đề chung về tình hình sử dụng điện thoại di động hiện nay; hoạt động phát triển phần mềm cho loại thiết bị này; giới thiệu một số phần mềm công cụ nhằm hỗ trợ cho việc phát triển ứng dụng di động bằng ngôn ngữ lập trình Java. - Chương 2 : Giới thiệu khái quát về chuẩn J2ME. Phần này trình bày các mục tiêu, nội dung và định nghĩa các khái niệm quan trọng trong J2ME. Ngoài ra, chương này cũng trình bày các tính năng, các điểm thuận lợi và hạn chế của bộ thư viện Java được hỗ trợ cho điện thoại di động. - Chương 3 : Những khó khăn do hạn chế của J2ME. Chương này trình bày những ảnh hưởng quan trọng đến việc thiết kế và cài đặt một số tính năng của đề tài do hạn chế của thư viện Java trên điện thoại di động. - Chương 4 : Phân tích – thiết kế ứng dụng. Phân tích các yêu cầu nghiệp vụ, các yêu cầu phi chức năng và đặc tả chi tiết ứng dụng ở mức phân tích, thiết kế. - Chương 5 : Một số cải tiến nhằm tối ưu hóa chương trình. Do thiết bị di động hạn chế về năng lực xử lý, dung lượng bộ nhớ và khả năng lưu trữ, chương này trình bày một số phương pháp, thủ thuật nhằm giúp cho ứng dụng được tối ưu hóa về tốc độ, tối ưu việc sử dụng bộ nhớ và giảm kích thước cho phần mềm. - Chương 6 : Thử nghiệm - Hướng dẫn cài đặt và sử dụng. Giới thiệu một số trình giả lập các điện thoại di động phổ biến trên thị trường được đề tài sử dụng cho mục đích thử nghiệm; hướng dẫn cài đặt và sử dụng các chức năng của phần mềm. - Chương 7 : Tổng kết – Đánh giá. Nhận xét các công việc đã được thực hiện; trình bày các ưu, khuyết điểm và hướng mở rộng cho phần mềm. - Phụ lục A : 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 trong chương trình. - Phụ lục B : Giới thiệu các chương trình giả lập. Mục đích của chương này nhằm trình bày các tính năng cũng như các yêu cầu về phần cứng, phần mềm cần thiết để cài đặt chương trình.
  • 11. v MỤC LỤC Trang Lời cảm ơn ...................................................................................................................i Lời nói đầu ..................................................................................................................ii Mục lục........................................................................................................................v Danh mục hình ..........................................................................................................vii Danh mục bảng ...........................................................................................................x Chương 1 : TỔNG QUAN VỀ LẬP TRÌNH TRÊN ĐIỆN THOẠI DI ĐỘNG..1 1.1. Đôi nét về thị trường điện thoại di động Việt Nam .....................................1 1.1.1. Sự phát triển của thị trường thông tin di động................................1 1.1.2. Nhu cầu phát triển phần mềm cho điện thoại di động ....................2 1.2. Lập trình trên điện thoại di động..................................................................4 1.2.1. Quá trình phát triển ứng dụng J2ME ..............................................4 1.2.2. Các J2ME IDE ................................................................................5 1.3. Giới thiệu một số công cụ hỗ trợ lập trình J2ME ........................................6 1.3.1. J2ME Wireless Toolkit (WTK).......................................................6 1.3.2. Borland JBuiler ...............................................................................9 1.3.3. Sun ONE Studio 5, Mobile Edition ..............................................16 Chương 2 : GIỚI THIỆU KHÁI QUÁT VỀ CHUẨN J2ME .............................23 2.1. Nền tảng Java.............................................................................................23 2.2. Sự khác nhau giữa ngôn ngữ Java trên CLDC với Java thông thường......29 2.3. MIDP..........................................................................................................32 2.3.1. Định nghĩa.....................................................................................32 2.3.2. Yêu cầu về phần cứng...................................................................32 2.3.3. Các khả năng và hạn chế của MIDP .............................................33 Chương 3 : NHỮNG KHÓ KHĂN DO HẠN CHẾ CỦA J2ME........................36 3.1. Các hàm tô màu..........................................................................................36 3.2. Các hàm vẽ đường......................................................................................37 3.3. Vấn đề font chữ..........................................................................................38 3.4. Vấn đề vẽ chuỗi ký tự ................................................................................39 3.5. Vấn đề về số thực.......................................................................................40 Chương 4 : PHÂN TÍCH – THIẾT KẾ ỨNG DỤNG .........................................42 4.1. Khảo sát hiện trạng.....................................................................................42 4.2. Phân tích và xác định yêu cầu....................................................................43 4.2.1. Danh sách các yêu cầu nghiệp vụ .................................................43 4.2.2. Các yêu cầu phi chức năng ...........................................................43 4.3. Thiết kế ứng dụng ......................................................................................44 4.3.1. Lược đồ sử dụng ...........................................................................44 4.3.2. Đặc tả Use Case ............................................................................45 4.3.3. Sơ đồ lớp mức phân tích ...............................................................57 4.3.4. Các biểu đồ hoạt động...................................................................64 4.3.4. Sơ đồ lớp mức thiết kế ..................................................................70
  • 12. vi Chương 5 : MỘT SỐ CẢI TIẾN NHẰM TỐI ƯU HÓA CHƯƠNG TRÌNH...95 5.1. Nội dung và ý nghĩa của việc tối ưu hóa....................................................95 5.2. Tối ưu hóa kích thước chương trình ..........................................................95 5.2.1. Các nguyên tắc tối ưu kích thước trong thiết kế chương trình .....95 5.2.2. Tối ưu kích thước chương trình khi đóng gói...............................99 5.3. Tối ưu hóa về tốc độ.................................................................................104 5.3.1. Khái quát chung ..........................................................................104 5.3.2. Tìm các vị trí cần tối ưu về tốc độ ..............................................104 5.3.3. Các nguyên tắc tăng tốc cho chương trình..................................106 5.4. Tối ưu hóa việc sử dụng bộ nhớ...............................................................110 5.4.1. Công cụ theo dõi việc sử dụng bộ nhớ........................................110 5.4.2. Các nguyên tắc tối ưu hóa việc sử dụng bộ nhớ .........................111 Chương 6 : THỬ NGHIỆM – HƯỚNG DẪN CÀI ĐẶT VÀ SỬ DỤNG ........114 6.1. Cài đặt chương trình trên máy ảo.............................................................114 6.1.1. Trình giả lập Sony Ericsson........................................................114 6.1.2. Trình giả lập Nokia .....................................................................115 6.1.3. Trình giả lập Siemens .................................................................117 6.1.4. Trình giả lập Samsung ................................................................120 6.1.5. Trình giả lập chuẩn (Sun Microsystems)....................................121 6.2. Vấn đề hỗ trợ tiếng Việt có dấu ...............................................................123 6.2.1. Hiển thị tiếng Việt trên máy ảo...................................................123 6.2.2. Hiển thị tiếng Việt trên thiết bị thật ............................................123 6.3. Hướng dẫn sử dụng chương trình ............................................................124 6.3.1. Chức năng duyệt bản đồ..............................................................124 6.3.2. Chức năng tra cứu địa điểm, tên đường......................................124 6.3.3. Chức năng tìm đường đi ngắn nhất giữa hai điểm......................128 6.3.4. Chức năng trợ giúp, hướng dẫn sử dụng.....................................131 Chương 7 : TỔNG KẾT – ĐÁNH GIÁ...............................................................133 7.1. Ưu điểm....................................................................................................133 7.2. Khuyết điểm.............................................................................................133 7.3. Hướng mở rộng........................................................................................134 Phụ lục A : CÁC THUẬT NGỮ ĐƯỢC SỬ DỤNG..........................................135 Phụ lục B : GIỚI THIỆU CÁC CHƯƠNG TRÌNH GIẢ LẬP.........................138 B.1. JDK..........................................................................................................138 B.2. Công cụ phát triển của hãng thứ ba.........................................................138 B.3. Trình giả lập các loại điện thoại di động.................................................139 B.3.1. Siemens.......................................................................................139 B.3.2. Sony Ericsson.............................................................................140 B.3.3. Samsung .....................................................................................142 B.3.4. Nokia ..........................................................................................145 Tài liệu tham khảo...................................................................................................147
  • 13. vii DANH MỤC HÌNH Trang Hình 1-1 : Doanh thu sản xuất phần mềm cho điện thoại di động năm 2004.........3 Hình 1-2 : Tạo project J2ME bằng Wizard trong JBuilder ...................................10 Hình 1-3 : JBuilder MIDP Designer .....................................................................12 Hình 1-4 : Màn hình gỡ rối của JBuilder...............................................................14 Hình 1-5 : Tạo project J2ME bằng Sun ONE Studio 5..........................................17 Hình 1-6 : Cửa sổ quản lý tập tin của Sun ONE Studio 5 .....................................18 Hình 2-1 : Kiến trúc J2ME.....................................................................................24 Hình 2-2 : Các thành phần trong kiến trúc J2ME .................................................26 Hình 2-3 : Quan hệ giữa J2ME configuration và J2SE..........................................28 Hình 4-1 : Lược đồ sử dụng ..................................................................................44 Hình 4-2 : Sơ đồ lớp mức phân tích.......................................................................57 Hình 4-3 : Mô tả lớp MainMIDlet .........................................................................58 Hình 4-4 : Mô tả lớp MainCanvas .........................................................................59 Hình 4-5 : Mô tả lớp FindObjectForm...................................................................60 Hình 4-6 : Mô tả lớp MessageBox.........................................................................60 Hình 4-7 : Mô tả lớp IndexList ..............................................................................61 Hình 4-8 : Mô tả lớp IndexList ..............................................................................61 Hình 4-9 : Mô tả lớp Places ...................................................................................62 Hình 4-10 : Mô tả lớp Streets.................................................................................63 Hình 4-11 : Sequence diagram Hiển thị bản đồ.....................................................64 Hình 4-12 : Collaboration diagram Hiển thị bản đồ ..............................................64 Hình 4-13 : Sequence diagram Tìm địa điểm ........................................................65 Hình 4-14 : Collaboration diagram Tìm địa điểm..................................................66 Hình 4-15 : Sequence diagram Tìm đường theo tên..............................................67 Hình 4-16 : Collaboration diagram Tìm đường theo tên .......................................68 Hình 4-17 : Sequence diagram Tìm đường đi ngắn nhất.......................................69 Hình 4-18 : Collaboration diagram Tìm đường đi ngắn nhất ................................69
  • 14. viii Hình 4-19 : Sơ đồ lớp mức thiết kế........................................................................70 Hình 4-20 : Thiết kế lớp MainMIDlet....................................................................72 Hình 4-21 : Thiết kế lớp MainCanvas....................................................................73 Hình 4-22 : Thiết kế lớp MessageBox ...................................................................76 Hình 4-23 : Thiết kế lớp FindObjectForm.............................................................77 Hình 4-24 : Thiết kế lớp HelpScreen .....................................................................79 Hình 4-25 : Thiết kế lớp IndexList ........................................................................80 Hình 4-26 : Thiết kế lớp SplashScreen ..................................................................79 Hình 4-27 : Thiết kế lớp About..............................................................................81 Hình 4-28 : Thiết kế lớp Districts ..........................................................................82 Hình 4-29 : Thiết kế lớp Places..............................................................................84 Hình 4-30 : Thiết kế lớp Streets.............................................................................85 Hình 4-31 : Thiết kế lớp NodePosition..................................................................89 Hình 4-32 : Sequence diagram Hiển thị bản đồ (mức thiết kế) .............................90 Hình 4-33 : Collaboration diagram Hiển thị bản đồ (mức thiết kế).......................90 Hình 4-34 : Sequence diagram Tìm địa điểm (mức thiết kế).................................91 Hình 4-35 : Collaboration diagram Tìm địa điểm (mức thiết kế)..........................92 Hình 4-36 : Sequence diagram Tìm đường theo tên (mức thiết kế) ......................93 Hình 4-37 : Collaboration diagram Tìm đường theo tên (mức thiết kế)................93 Hình 4-36 : Sequence diagram Tìm đường ngắn nhất (mức thiết kế) ...................94 Hình 4-37 : Collaboration diagram Tìm đường ngắn nhất (mức thiết kế).............94 Hình 5-1 : Mô hình quá trình đóng gói ứng dụng J2ME .......................................99 Hình 5-2 : Sơ đồ sử dụng Obfuscator ..................................................................102 Hình 5-3 : Màn hình giao diện công cụ Profiler ..................................................105 Hình 5-4 : Màn hình giao diện công cụ theo dõi việc sử dụng bộ nhớ................111 Hình 6-1 : Thử nghiệm ứng dụng trên trình giả lập Sony Ericsson.....................114 Hình 6-2 : Màn hình giao diện trình giả lập Sony Ericsson.................................115 Hình 6-3 : Thử nghiêm ứng dụng trên trình giả lập Nokia..................................116 Hình 6-4 : Kết quả thử nghiệm trên trình giả lập Nokia......................................117
  • 15. ix Hình 6-5 : Cài đặt ứng dụng trên điện thoại Siemens SK 65...............................119 Hình 6-6 : Khởi động ứng dụng trên Siemens SK 65..........................................120 Hình 6-7 : Kết quả thử nghiệm trên trình giả lập Siemens ..................................121 Hình 6-8 : Kết quả thử nghiệm trên trình giả lập Samsung.................................122 Hình 6-9 : Kết quả thử nghiệm trên J2ME SDK..................................................122 Hình 6-10 : Các phím di chuyển bản đồ ..............................................................124 Hình 6-11 : Kết quả tìm địa điểm ........................................................................126 Hình 6-12 : Màn hình tra cứu tên đường .............................................................127 Hình 6-13 : Kết quả tra cứu tên đường ................................................................128 Hình 6-14 : Màn hình chọn vị trí .........................................................................129 Hình 6-15 : Kết quả tìm đường đi ngắn nhất .......................................................130 Hình 6-16 : Màn hình hướng dẫn sử dụng...........................................................132 Hình 6-17 : Màn hình xem thông tin chương trình..............................................132 Hình B-1 : Màn hình download JDK 1.4.............................................................138 Hình B-2 : Trình giả lập Siemens ........................................................................140 Hình B-3 : Trình giả lập Sony Erisson.................................................................141 Hình B-4 : Trình giả lập Samsung .......................................................................144 Hình B-5 : Nokia Developer’s Suite 2.2..............................................................146 Hình B-6 : Trình giả lập của Nokia Developer’s Suite........................................146
  • 16. x DANH MỤC BẢNG Trang Bảng 2-1 : Phân loại CLDC và CDC...................................................................28 Bảng 4-1 : Danh sách các yêu cầu nghiệp vụ ......................................................43 Bảng 4-2 : Phân tích các thuộc tính lớp MainMIDlet..........................................58 Bảng 4-3 : Phân tích các phương thức lớp MainMIDlet......................................58 Bảng 4-4 : Phân tích các thuộc tính lớp MainCanvas..........................................59 Bảng 4-5 : Phân tích các phương thức lớp MainCanvas......................................59 Bảng 4-6 : Phân tích các phương thức lớp FindObjectForm ...............................60 Bảng 4-7 : Phân tích các phương thức lớp MessageBox .....................................60 Bảng 4-8 : Phân tích các phương thức lớp IndexList ..........................................61 Bảng 4-9 : Phân tích các phương thức lớp Districts ............................................61 Bảng 4-10 : Phân tích các phương thức lớp Places..............................................62 Bảng 4-11 : Phân tích các phương thức lớp Streets.............................................63 Bảng 4-12 : Danh sách các lớp ............................................................................71 Bảng 4-13 : Danh sách các thuộc tính lớp MainMIDlet......................................72 Bảng 4-14 : Danh sách các phương thức lớp MainMIDlet..................................72 Bảng 4-15 : Danh sách các thuộc tính lớp MainCanvas......................................74 Bảng 4-16 : Danh sách các phương thức lớp MainCanvas..................................75 Bảng 4-17 : Danh sách các thuộc tính lớp MessageBox......................................76 Bảng 4-18 : Danh sách các phương thức lớp MessageBox .................................76 Bảng 4-19 : Danh sách các thuộc tính lớp FindObjectForm................................77 Bảng 4-20 : Danh sách các phương thức lớp FindObjectForm ...........................78 Bảng 4-21 : Danh sách các thuộc tính lớp HelpScreen........................................79 Bảng 4-22 : Danh sách các phương thức lớp HelpScreen ...................................79 Bảng 4-23 : Danh sách các phương thức lớp IndexList.......................................80 Bảng 4-24 : Danh sách các phương thức lớp SplashScreen ................................80 Bảng 4-25 : Danh sách các thuộc tính lớp About ................................................81 Bảng 4-26 : Danh sách các phương thức lớp About............................................82
  • 17. xi Bảng 4-27 : Danh sách các thuộc tính lớp About ................................................83 Bảng 4-28 : Danh sách các phương thức lớp About............................................83 Bảng 4-29 : Danh sách các thuộc tính lớp Places................................................84 Bảng 4-30 : Danh sách các phương thức lớp Places............................................85 Bảng 4-31 : Danh sách các thuộc tính lớp Streets ...............................................87 Bảng 4-32 : Danh sách các phương thức lớp Streets ...........................................88 Bảng 5-1 : Bảng so sánh kết quả sử dụng obfuscator........................................104
  • 18. Chương 1 : Tổng quan về lập trình trên điện thoại di động 1 Chương 1 : TỔNG QUAN VỀ LẬP TRÌNH TRÊN ĐIỆN THOẠI DI ĐỘNG 1.1. Đôi nét về thị trường điện thoại di động Việt Nam : 1.1.1. Sự phát triển của thị trường thông tin di động : Thị trường thông tin di động Việt Nam là một trong những thị trường phát triển nhanh nhất khu vực Đông Nam Á. Theo đánh giá của BMI - Tập đoàn xuất bản chuyên nghiên cứu và đánh giá thị trường viễn thông thế giới, năm 2003, thị trường thông tin di động Việt Nam đạt tốc độ tăng trưởng 43% và năm 2004 là 65%. Tại Hội nghị quốc tế về thông tin di động lần 2 (2nd Mobiles Vietnam) diễn ra tại TP.HCM ngày 11 và 12/5 năm 2005, các chuyên gia dự báo trong năm 2005, tổng số thuê bao di động tại Việt Nam sẽ đạt 7,3 triệu và năm 2008 sẽ lên đến mức 21,2 triệu. Tuy nhiên, Việt Nam vẫn là một trong những quốc gia có mật độ điện thoại di động thấp nhất ở khu vực châu Á - Thái Bình Dương, do vậy đây sẽ là địa điểm hấp dẫn để các doanh nghiệp trong nước cũng như các đối tác nước ngoài khai thác và tìm kiếm cơ hội kinh doanh. Hiện nay, Việt Nam có 6 nhà khai thác, cung cấp dịch vụ thông tin di động thuộc 5 doanh nghiệp là : VNPT (Vinafone, Mobifone), Công ty Viễn thông quân đội (Viettel), Công ty cổ phần viễn thông Sài Gòn (Saigon Postel), Công ty cổ phần viễn thông Hà Nội (Hanoi Telecom) và Công ty Viễn thông Điện lực (VP Telecom). Trong đó Hanoi Telecom và VP Telecom dự kiến khai trương mạng vào đầu năm 2006. Tiềm năng của thị trường thông tin di động Việt Nam là điều được khẳng định, nhưng vẫn là một ẩn số đối với các nhà phân tích thị trường bởi nhu cầu sử dụng của người tiêu dùng cũng như khả năng cung cấp của các nhà khai thác vẫn đang ở mức khám phá ban đầu. Việt Nam được coi là thị trường rất hấp dẫn trong lĩnh vực thông tin di động.
  • 19. Chương 1 : Tổng quan về lập trình trên điện thoại di động 2 1.1.2. Nhu cầu phát triển phần mềm cho điện thoại di động : Điện thoại di động đầu tiên ra đời với chức năng như một chiếc điện thoại thông thường, đó là gọi và nhận cuộc gọi. Sự phát triển mạnh mẽ của nền kinh tế ngày càng khẳng định vai trò của thông tin liên lạc đến khả năng thành bại của việc cạnh tranh trong kinh doanh. Ngoài ra, nhu cầu trao đổi thông tin, giải trí của con người cũng ngày càng được nâng cao và nhờ vào sự tiến bộ về mặt kỹ thuật, chiếc điện thoại di động ngày càng có thêm nhiều tính năng mới, đa dạng hơn, tiến bộ hơn và hiện đại hơn. Màn hình từ đơn sắc chuyển sang màn hình màu, từ hỗ trợ tin nhắn dạng văn bản (SMS) chuyển sang hỗ trợ tin nhắn có hình ảnh, âm thanh (MMS), hỗ trợ quay phim, xem phim, chụp ảnh, nghe nhạc… Năng lực xử lý và lưu trữ của điện thoại di động cũng liên tục được cải tiến. Các hãng sản xuất đã làm cho chiếc điện thoại trở nên linh động hơn, giúp cho người sử dụng có thể dễ dàng cấu hình giao diện và các ứng dụng. Đặc biệt, bằng cách cho phép lập trình viên viết thêm các chương trình ứng dụng, trò chơi cho điện thoại, chiếc điện thoại di động hiện nay thực sự là một công cụ làm việc, học tập, vui chơi và giải trí hữu ích đối với mọi người. Trong vài năm gần đây, hoạt động sản xuất phần mềm cho điện thoại di động phát triển khá mạnh mẽ. Rất nhiều sản phẩm phần mềm đã ra đời để phục vụ tốt hơn cho người sử dụng, trong đó, số lượng phần mềm nhiều nhất là các trò chơi, từ điển, truy cập Internet, trình diệt virus, soạn thảo văn bản và các tiện ích khác. Trong năm 2004, giá trị sản xuất phần mềm cho điện thoại di động trên thế giới đạt 3,1 tỉ USD và dự đoán sẽ đạt 18,5 tỉ USD vào năm 2009. Doanh thu sản xuất phần mềm cho điện thoại di động năm 2004 được phân bố như sau :
  • 20. Chương 1 : Tổng quan về lập trình trên điện thoại di động 3 Hình 1-1 : Doanh thu sản xuất phần mềm cho điện thoại di động năm 2004 Tại châu Á, chỉ riêng Nhật và Hàn Quốc đã chiếm 1,3 tỉ USD, còn lại là Trung Quốc và Ấn Độ. Tại Việt Nam, doanh thu không đáng kể. Hầu hết các phần mềm ứng dụng được phát triển dành cho điện thoại di động đều là phần mềm miễn phí và do các công ty, các trường đại học và nhiều cá nhân thực hiện chủ yếu nhằm mục đích phục vụ cho lợi ích của cộng đồng. Tuy nhiên, chúng ta vẫn có thể hi vọng vào tương lai của một thị trường đầy tiềm năng và trong quá trình hội nhập kinh tế quốc tế, người Việt Nam sẽ có thói quen tôn trọng quyền sở hữu trí tuệ nói chung và bản quyền phần mềm nói riêng.
  • 21. Chương 1 : Tổng quan về lập trình trên điện thoại di động 4 1.2. Lập trình trên điện thoại di động : 1.2.1. Quá trình phát triển ứng dụng J2ME : Thông thường, việc phát triển ứng dụng J2ME được tiến hành qua các giai đoạn như sau : a) Viết mã nguồn Java b) Biên dịch c) Obfuscate (tùy chọn) : Obfuscate sẽ loại bỏ các thông tin không cần thiết trong class, chẳng hạn như tên của các biến cục bộ. Các lớp, phương thức, interface,... cũng được đổi tên để làm cho chúng ngắn gọn hơn. Một gói đã được obfuscate sẽ bảo vệ các tập tin class khỏi việc dịch ngược (decompile) và reverse engineering. Ngoài việc bảo vệ mã nguồn, obfuscate còn giảm kích thước của các tập tin class, làm cho kích thước của tập tin JAR cũng giảm đi. Việc giảm kích thước rất có ý nghĩa bởi vì các thiết bị MIDP thường có bộ nhớ bị giới hạn. d) Pre-verify (tiền kiểm tra). Bộ kiểm tra (verify) trong J2SE tốn ít nhất là 50 KB, không kể việc tiêu tốn vùng nhớ heap và thời gian xử lý. Để giảm việc tiêu tốn này cho J2ME, việc kiểm tra tập tin class sẽ được chia thành hai giai đoạn. Quá trình tiền kiểm tra trước khi triển khai sẽ thêm các tập tin class các tham số phụ để tăng tốc quá trình kiểm tra lúc thực thi. Thiết bị sẽ thực hiện quá trình kiểm tra sơ lược bằng cách sử dụng các tham số phụ được phát sinh trong quá trình tiền kiểm tra. e) Tạo tập tin JAR f) Tạo tập tin JAD g) Thực thi trên trình giả lập thích hợp h) Triển khai trên thiết bị di động
  • 22. Chương 1 : Tổng quan về lập trình trên điện thoại di động 5 1.2.2. Các J2ME IDE : Môi trường phát triển tích hợp (IDE) cải thiện năng suất của lập trình viên bằng cách cung cấp một tập các công cụ lập trình tích hợp thông qua giao diện đồ họa (GUI), hỗ trợ công cụ soạn thảo, quản lý project, biên dịch và gỡ rối (debugger). Thành viên mới nhất trong gia đình Java là J2ME. Khi nhiều chuyên gia dự đoán về sự phát triển lớn mạnh của thị trường phát triển các ứng dụng J2ME, các nhà phát triển IDE đã đưa ra các bản mở rộng cho các sản phẩm IDE của họ để hỗ trợ thêm J2ME. Ngoài ra, các nhà cung cấp chuyên nghiệp khác cũng đã phát triển các IDE đơn dành riêng cho J2ME. Một IDE cho J2ME cần phải cung cấp các tiện ích sau : a) Quản lý project : Quản lý các tập tin nguồn và các thông số MIDlet. b) Trình soạn thảo : Soạn thảo mã nguồn và các tài nguyên. c) Build : Biên dịch, obfuscate và pre-verify mã nguồn. d) Đóng gói (package) : Đóng gói các MIDlet thành các tập tin JAR và JAD. e) Giả lập (emulation) : Thực thi các MIDlet với một trình giả lập. f) Gỡ rối (debugger)
  • 23. Chương 1 : Tổng quan về lập trình trên điện thoại di động 6 1.3. Giới thiệu một số công cụ hỗ trợ lập trình cho J2ME : 1.3.1. J2ME Wireless Toolkit (WTK) : J2ME Wireless Toolkit (WTK) là một bộ công cụ phát triển J2ME cung cấp cho các lập trình viên môi trường giả lập, công cụ, tài liệu và các ví dụ cần thiết để phát triển các ứng dụng MIDP. WTK không phải là một IDE hoàn chỉnh, bởi vì nó đã bỏ các tính năng soạn thảo và gỡ rối vốn được xem là bắt buộc phải có trong một IDE. Tuy nhiên, KToolbar, được cung cấp trong bộ WTK là một môi trường phát triển tối thiểu cung cấp một GUI dành cho việc biên dịch, đóng gói và thực thi các ứng dụng MIDP. WTK 2.2 cũng cung cấp các bộ giả lập đã được cải tiến với các tính năng giả lập, monitor và debug mới. Ngoài ra, WTK cũng có một cơ chế được thêm vào tiến trình build của KToolbar để cho phép việc tích hợp và thực thi bộ obfuscate Java bytecode khi đóng gói MIDlet suite. WTK 2.2 được cải thiện tốc độ và hỗ trợ các API mới, gồm : Connected Limited Device Configuration (CLDC) 1.1 (JSR 139) Mobile Information Device Profile (MIDP) 2.0 (JSR 118) Java Technology for the Wireless Industry (JTWI) 1.0 (JSR 185) Wireless Messaging API (WMA) 2.0 (JSR 205) Mobile Media API (MMAPI) 1.1 (JSR 135) PDA Optional Packages for the J2ME Platform (JSR 75) Java APIs for Bluetooth (JSR 82) J2ME Web Services Specification (JSR 172) Mobile 3D Graphics API for J2ME (JSR 184) Mỗi project có một thư mục dành riêng trong thư mục apps. Thư mực apps nằm bên trong thư mục chính của WTK.
  • 24. Chương 1 : Tổng quan về lập trình trên điện thoại di động 7 Các thư viện của hãng thứ ba có thể được cấu hình bên trong KToolbar. Ngoài ra, các thư viện cần thiết cho từng project có thể được chép thủ công vào thư mục lib bên trong thư mục project. Nếu một thư viện cần cho tất cả project, nó có thể được chép vào thư mục apps/lib. Khi KToolbar project được tạo ra, cấu trúc thư mục project sẽ được thiết lập. Ngoài ra các tập tin JAD va manifest cũng được phát sinh dựa vào các thông số của MIDlet suite đã được xác định. Tuy nhiên, không có tập tin nguồn nào được phát sinh cho MIDlet. Lập trình viên phải viết các tập tin nguồn này từ đầu. KToolbar không hỗ trợ nạp nhiều project trong một GUI. Trình soạn thảo WTK không cung cấp một trình soạn thảo tích hợp nào. Thay vào đó, lập trình viên phải sử dụng một trình soạn thảo của hãng thứ ba. Tạo lập và đóng gói : KToolBar cung cấp hỗ trợ cho việc biên dịch một dự án. Một dự án được dịch và tiền kiểm tra chỉ trong một bước thực hiện. Một chức năng khác được dùng để đóng gói dự án. Gói được tạo ra sẽ chứa tập tin JAR và JAD của MIDlet suite. WTK được tích hợp công cụ obfuscator là RetroGuard. Công cụ này không được cung cấp kèm với WTK mà có thể được download miễn phí từ trang web www.retrologic.com. Để cài đặt, chúng ta chỉ cần chép tập tin retroguard.jar vào thư mục bin của thư mục cài đặt WTK. Trình giả lập : WTK cung cấp các giả lập để thực thi ứng dụng MIDP. Các thiết bị giả lập được hỗ trợ : DefaultColorPhone : điện thoại mặc định với màn hình màu.
  • 25. Chương 1 : Tổng quan về lập trình trên điện thoại di động 8 DefaultGrayPhone : điện thoại với màn hình xám. Motorola_i85s : điện thoại Motorola. PalmOS_Device : máy hỗ trợ các nhân kỹ thuật số. Nhận xét : WTK là một môi trường cơ bản cho việc phát triển các ứng dụng trên thiết bị không dây. Tuy nhiên, do thiếu một trình soạn thảo và chức năng gỡ rối, rõ ràng công cụ này không thể nào cạnh tranh được với các công cụ thương mại khác. Tuy nhiên, với những ai mới bắt đầu tìm hiểu về J2ME thì đây vẫn là một công cụ có ích. Bằng việc tạo lập sẵn một cấu trúc thư mục, nó cho phép lập trình viên có thể xây dựng ngay ứng dụng mà không cần quan tâm về việc tổ chức các tập tin, tài nguyên trong dự án. Khi một lập trình viên đã trở nên thành thạo với việc phát triển ứng dụng J2ME thì có thể chuyển sang sử dụng một công cụ khác.
  • 26. Chương 1 : Tổng quan về lập trình trên điện thoại di động 9 1.3.2. Borland Jbuilder : Môi trường làm việc của JBuilder cho J2ME hoàn toàn giống như môi trường phát triển các ứng dụng Java bình thường nhưng có thêm các tabs và options trong các hộp thoại để hỗ trợ J2ME và hai wizards mới : MIDP MIDlet wizard và MIDP Displayable wizard. Trong phiên bản JBuilder Professional và Enterprise. Trình Archive Builder có thể tạo ra một MIDlet suite với các tập tin manifest và JAD tương ứng. JBuilder 2005 cũng cài đặt WTK 2.1 được sử dụng như một môi trường giả lập. Ngoài ra, JBuilder còn cung cấp các hướng dẫn cho việc tích hợp thêm các J2ME JDK khác, chẳng hạn như Nokia Developer Suite for J2ME và Siemens Mobility Toolkit (SMTK). Ngoài các tính năng chính của JBuilder, khi lập trình cho J2ME chúng ta được thêm các tính năng sau : Code completion cho các lớp CLDC/MIDP Duyệt class/package cho các lớp CLDC/MIDP Chuyển đổi JDK Các MIDP wizards Bộ thiết kế trực quan (visual designer) cho các thành phần giao diện MIDP Công cụ gỡ rối MIDlet Đóng gói file JAD và JAR Nạp dữ liệu thông qua OTA (Over The Air Provisioning) Quản lý dự án : Tập tin project chứa một danh sách các tập tin trong dự án và các thuộc tính của dự án đó. JBuilder sử dụng thông tin này khi thực hiện nạp, lưu, biên dịch hay chạy một project. Tập tin project bị thay đổi khi JBuilder thêm hay xóa tập tin, thiết lập hay thay đổi các thuộc tính của project. Khi tạo một dự án J2ME, dự án phải được liên kết với một J2ME JDK. Khi tạo mới một project, một wizard sẽ phát sinh nội dung cơ bản của tập tin, tạo thư mục cho các thành phần trong project.
  • 27. Chương 1 : Tổng quan về lập trình trên điện thoại di động 10 Hình 1-2 : Tạo project J2ME bằng Wizard trong JBuilder Wizard cho phép chúng ta thêm các tập tin vào trong MIDlet bằng cách phát sinh các tập tin dựa trên các tùy chọn mà chúng ta yêu cầu. MIDlet : phát sinh một lớp con của MIDlet và một lớp con của Displayable (Canvas, Form, List hay TextBox). MIDP Displayable : phát sinh một lớp con của lớp Displayable. Thông thường, chúng ta chọn MIDlet. Khi đó MIDlet wizard sẽ thu thập tất cả các thông tin cần thiết. Một wizard khác sẽ được gọi để tạo ra các lớp Displayable sau đó. JBuilder cung cấp một bộ UI designer cho các ứng dụng MIDP. Bộ MIDP designer dựa trên bộ Swing UI designer có sẵn trong JBuilder.
  • 28. Chương 1 : Tổng quan về lập trình trên điện thoại di động 11 Màn hình duyệt các tập tin, thư mục trong dự án. Màn hình duyệt cấu trúc của lớp và gói. Cửa sổ soạn thảo mã nguồn : Keyboard shortcuts Brace matching Syntax highlighting Customizable editor key mappings
  • 29. Chương 1 : Tổng quan về lập trình trên điện thoại di động 12 CodeInsight (code completion, parameter lists, và tool tip expression evaluation) Code templates Cho phép soạn thảo nhiều tập tin trong một giao diện hỗ trợ tabs Re-factoring Tạo và đóng gói : Khi biên dịch, JBuilder thực hiện các công việc sau : Biên dịch MIDlet và tạo ra các tập tin .class. Tiền kiểm tra các lớp đã được tạo. Tạo tập tin JAD. JBuilder phiên bản Professional và Enterprise có tích hợp bên trong một obfuscator. Chức năng này có thể được bật qua tab Build trong cửa sổ Project Properties. Hình 1-3 : JBuilder MIDP Designer
  • 30. Chương 1 : Tổng quan về lập trình trên điện thoại di động 13 MIDP designer giúp ta làm việc trực quan với các thành phần giao diện MIDP cơ bản. Ngoài ra, nó còn hỗ trợ việc phát sinh mã tự động. Các thành phần giao diện MIDP được hỗ trợ : ChoiceGroup DateField Gauge ImageItem StringItem TextField Ticker Spacer Các thành phần MIDP screen : Alert Form List TextBox Khi xử lý các thành phần với bộ MIDP designer, JBuilder tự động phát sinh mã để quản lý giao diện. Mã phát sinh chuyên biệt cho JBuilder, điều này có nghĩa là MIDP designer sẽ không thể dịch ngược lại các mã nguồn đã được viết tay. MIDP Designer giúp phát triển nhanh các giao diện mẫu MIDP. Trình giả lập : JBuilder cung cấp các giả lập thiết bị về nguyên tắc cũng tương tự như WTK, tuy nhiên chúng ta có thể sử dụng các trình giả lập của hãng thứ ba bằng cách thiết lập các thuộc tính của dự án nếu muốn mà không gây ảnh hưởng gì cho dự án. Các trình giả lập này có thể là của Nokia hay của Siemens… Nếu công cụ của chúng ta có tích hợp nhiều trình giả lập thiết bị, khi đó tab MIDlet trong cửa sổ Project Properties có thể được dùng để chọn thiết bị khi chạy hay gỡ rối cho ứng dụng.
  • 31. Chương 1 : Tổng quan về lập trình trên điện thoại di động 14 Trình gỡ rối : Khi bắt đầu gỡ rối, ngoài một màn hình giả lập cho thiết bị, một màn hình dùng để hiển thị thông tin debug cũng xuất hiện. Chúng ta có thể gỡ rối nhiều ứng dụng đồng thời qua các tab có trên màn hình này. Hình 1-4 : Màn hình gỡ rối của JBuilder. Các tab nằm bên trái dọc theo cửa sổ cho chúng ta thấy những gì đang diễn ra bên trong ứng dụng, Qua các tab này chúng ta có thể xem các thông tin : Console : thể hiện các kết quả cũng như lỗi của chương trình.
  • 32. Chương 1 : Tổng quan về lập trình trên điện thoại di động 15 Thread, call stack và data : thể hiện các nhóm luồng trong chương trình. Mỗi nhóm luồng có thể được mở ra để xem các luồng bên trong. Synchronization monitor : cho phép xem thông tin về sự đồng bộ giữa các luồng và trạng thái của chúng, thông tin này đặc biệt hữu ích khi kiểm tra deadlock. Data watches : thể hiện giá trị hiện thời của dữ liệu. Loaded classes and static data : thể hiện các lớp đang được sử dụng bởi ứng dụng. Chúng ta có thể mở một lớp để xem giá trị các thuộc tính của nó. Data and code breakpoints : thể hiện tất cả các breakpoints đang được thiết lập trong ứng dụng và trạng thái hiện tại của nó. Classes with tracing disabled : thể hiện danh sách các lớp và gói chưa được xem xét. Nhận xét : Chức năng thiết kế giao diện của JBuilder là một công cụ hữu ích trong việc tạo lập giao diện MIDP. Tuy nhiên, chức năng này lại không hỗ trợ đầy đủ các thành phần giao diện hiện có và trong nhiều trường hợp mã nguồn phát sinh cần được chỉnh sửa thêm mới hoạt động đúng theo ý muốn.
  • 33. Chương 1 : Tổng quan về lập trình trên điện thoại di động 16 1.3.3. Sun ONE Studio 5, Mobile Edition Sun ONE studio 5, Mobile Edition là một phiên bản được thay đổi từ Sun ONE Studio để hỗ trợ và giúp đỡ các lập trình viên trong việc phát triển các ứng dụng MIDP. Nó kết hợp các khả năng của Wireless Toolket với Sun ONE Studio tạo thành một môi trường với các chức năng sau : Kết hợp việc biên dịch, tiền kiểm tra, thực thi MIDlet và MIDlet suite. Tự động phát sinh tập tin JAD và JAR. Tích hợp khả năng gỡ rối (debug) cho MIDlet. Code completion Có thể tích hợp với các trình giả lập hay các bộ JDK của hãng thứ ba nhờ vào Unified Emulator Interface Cung cấp các mẫu cho việc tạo ra các MIDlet và MIDlet suite. Tích hợp sẵn một trình giả lập Có thể thiết lập trình giả lập riêng cho mỗi dự án J2ME. Công cụ AutoUpdate giúp tự động hóa việc cập nhật công cụ. Quản lý project : Một project được tạo bởi Sun ONE Studio khi mới được tạo sẽ là một project rỗng. Chúng ta phải tự thêm vào các MIDlet hay MIDlet suite theo nhu cầu của mình.
  • 34. Chương 1 : Tổng quan về lập trình trên điện thoại di động 17 Hình 1-5 : Tạo project J2ME bằng Sun ONE Studio 5 Wizard tạo ra các tập tin dựa trên mẫu mà chúng ta chọn, các mẫu sau đây được hỗ trợ trong công cụ : Class : một lớp Java rỗng. HelloMIDlet : một lớp có khả năng hiển thị văn bản lên màn hình thiết bị. MIDPCanvas : tạo ra một lóp con của lớp Canvas. Canvas cho chúng ta khả năng thao tác đồ họa cấp thấp. MIDlet : các lóp thực thi cơ bản cho một thiết bị không dây. MIDlet Suite : tạo ra một MIDlet suite. Sau khi chọn mẫu, wizard sẽ lấy các thông tin cần thiết. Sau giai đoạn này, các tập tin sẽ được tạo ra. Tab Project trên màn hình Explorer cung cấp cho chúng ta một cái nhìn bên trong project. Từ đây, chúng ta có thể duyệt qua các thông tin chứa đựng trong MIDlet.
  • 35. Chương 1 : Tổng quan về lập trình trên điện thoại di động 18 Cửa sổ quản lý dự án. Các thư viện khác có thể được tích hợp vào trong công cụ bằng tab Filesystems trên cửa sổ Explorer. Hình 1-6 : Cửa sổ quản lý tập tin của Sun ONE Studio 5
  • 36. Chương 1 : Tổng quan về lập trình trên điện thoại di động 19 Editor : Màn hình soạn thảo mã nguồn Các đặc điểm chính của màn hình soạn thảo mã nguồn : Tô màu các từ khóa trong ngôn ngữ Java. Đánh số dòng. Xem nhiều tập tin trong cùng một cửa sổ. Định dạng mã nguồn tự động Code completion. Biên dịch và đóng gói : Sun ONE Studio cung cấp trợ giúp trong việc biên dịch và đóng gói một dự án. Với công cụ này chúng ta có thể kết hợp việc tạo ra đóng gói trong khi thực hiện biên dịch. Khi biên dịch, Sun ONE Studio : Dịch MIDlet và tạo ra các tập tin .class. Thực hiện tiền kiểm tra các lớp đã được biên dịch. Tạo tập tin JAR.
  • 37. Chương 1 : Tổng quan về lập trình trên điện thoại di động 20 Tạo tập tin JAD. Trình giả lập : Mặc định khi cài đặt, Sun ONE Studio dùng trình giả lập của WTK để chạy các ứng dụng MIDP, ngoài ra, chúng ta cũng có thể thêm vào các trình giả lập khác do hãng thứ ba phát triển bằng chức năng Device Emulator Registry. Chỉ các trình giả lập có hỗ trợ môi trường giả lập J2ME SDK mới có thể được dùng chung với Sun ONE Studio. Nghĩa là chúng ta có thể dùng chung công cụ này với Nokia Developer’s Suite hay Siemens Mobility Toolkit mà không gây ảnh hưởng gì đến đề án. Tab Runtime trong cửa sổ Explorer được dùng để quản lý Device Emulator Registry. Qua chức năng này, chúng ta có thể thêm, xóa hay chọn trình giả lập mặc định để sử dụng. Màn hình quản lý trình giả lập.
  • 38. Chương 1 : Tổng quan về lập trình trên điện thoại di động 21 Bộ gỡ rối (Debugger) : Sun ONE Studio cung cấp một trình gỡ rối có thể dùng để dò tìm các lỗi trong ứng dụng MIDP. Khi một phiên gỡ rối được bắt đầu, màn hình bao gồm ba cửa sổ là : Debugger Window, Output Window và Source Editor sẽ xuất hiện. Màn hình Debugger chứa 7 màn hình con, giúp chúng ta xem xét những gì đang diễn ra trong ứng dụng MIDP của chúng ta, đó là các màn hình : Session : liệt kê các ứng dụng đang chạy. Breakpoints : liệt kê các breakpoint được thiết lập. Breakpoint có thể được thiết lập trên một dòng lệnh, trên tên phương thức, trên một ngoại lệ, lớp, luồng hay một biến. Thread : liệt kê các luồng và nhóm luồng đang chạy trong phiên làm việc hiện hành. Call Stack : liệt kê sơ đồ các lời gọi hàm được thực hiện trong quá trình thực thi luồng hiện hành. Phương thức được thực thi cuối cùng sẽ ở đầu danh sách. Phương thức được thực thi đầu tiên sẽ nằm ở cuối danh sách. Watches : danh sách các biến và biểu thức mà chúng ta cần khảo sát giá trị trong quá trình gỡ rối. Ở đây chúng ta có thể thay đổi giá trị các biến khi chúng đang chạy. Variable : liệt kê các biến cục bộ, các thực thể và các biến tĩnh trong phạm vi của phương thức mà chúng ta đang xem xét. Classes : liệt kê các lớp được sử dụng bởi tiến trình đang được gỡ rối.
  • 39. Chương 1 : Tổng quan về lập trình trên điện thoại di động 22 Màn hình gỡ rối của Sun ONE Studio Nhận xét : Sun ONE Studio là một trong những chương trình phát triển miễn phí đầu tiên cho J2ME. Hầu như tất cả các đặc tính mà một lập trình viên mong đợi đều được tích hợp vào trong công cụ này. Một lập trình viên có hiểu biết vể MIDP và đã có kinh nghiệm trong việc sử dụng Sun ONE Studio có thể dùng nó để phát triển ứng dụng MIDP chỉ sau một vài giờ tìm hiểu. Tuy nhiên, Sun ONE Studio lại thiếu các đặc điểm khác khi lập trình J2ME để có thể giúp nó nổi trội hơn các trình soạn thảo đối thủ khác. Hầu hết các đặc điểm có được là do được đem từ phiên bản dành cho J2SE sang. Sun ONE Studio là một phiên bản miễn phí. Do đó một số chức năng của nó vẫn chưa thực sự tốt so với các công cụ thương mại khác.
  • 40. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 23 Chương 2 : GIỚI THIỆU KHÁI QUÁT VỀ CHUẨN J2ME 2.1. Nền tảng Java : 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, các phiên bản đó là : Java 2 Platform, Enterprise Edition (J2EE™) phục vụ cho các nhu cầu về thương mại như phục vụ khác hàng, các vấn đề 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 (J2SE™) đượ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, Micro Edition (J2ME™) chạy trên các máy với tài nguyên hạn chế. Hình vẽ sau minh họa các phiên bản hiện có của Java và lĩnh vực ứng dụng của chúng, bắt đầu từ bên trái là các nền tảng cao cấp sang bên phải là các nền tảng cấp thấp hơn. Java 2 Enterprise Edition hỗ trợ các máy tính dùng trong doanh nghiệp, Java 2 Standard Edition hỗ trợ cho các máy tính các nhân, máy tính để bàn. Java 2 Micro Edition được chia thành 2 loại cho các thiết bị cấp cao (máy PDA cấp cao, điện thoại web) và các thiết bị cấp thấp (điện thoại di động và PDA với khoảng 512KB bộ nhớ).
  • 41. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 24 Hình 2-1 : Kiến trúc J2ME 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 Java 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ị. Giống như việc các nhà sản xuất thiết bị phát triển các tính năng khác trong sản phẩm của mình, cấu hình này có thể được mở rộng với các thư viện mới phục vụ cho nhu cầu của thị trường. Để hỗ trợ cho khả năng tùy biến và khả năng mở rộng này, chúng ta có 3 khái niệm sau trong kiến trúc J2ME. Configuration (Cấu hình) : 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 Một configuration định nghĩa các đặc điểm của máy ảo Java và cung cấp các thư viện lớp tối thiểu mà 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 lập trình viên có thể dựa vào môi trường lập trình nhất
  • 42. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 25 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ể. 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. 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 đó, chúng ta 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. Một thiết bị có thể hỗ trợ nhiều profile. Optional package : Là các API có thể sử dụng trong nhiều thiết bị hay một họ các thiết bị. Một J2ME option package là một tập các API nằm trên một profile. Một optional package thường chứa các chức năng độc lập với các thiết bị. Mục đích chính của các optional package này là cho phép bổ sung các API trên các profiles. Một thiết bị có thể hỗ trợ nhiều optional package khác nhau. Configurations, profiles và các optional packages sử dụng các tính năng của máy ảo Java (Java Virtual Machine). Máy ảo này chạy trên một hệ điều hành thuộc về phần mềm hệ thống của thiết bị. Quan hệ của chúng được thể hiện qua hình vẽ sau :
  • 43. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 26 Hình 2-2 : Các thành phần trong kiến trúc J2ME Configuration : Trong môi trường J2ME, một ứng dụng được viết cho một profile riêng biệt nào đó, profile này lại mở rộng từ một configuration. Vì thế, tất cả các đặc điểm của một configuration sẽ được giữ lại trong profile có thể được sử dụng bởi ứng dụng viết cho profile này. Một configuration định nghĩa một nền Java cho các thiết bị có các đặc tính tương tự nhau (chẳng hạn như về bộ nhớ, tốc độ xử lý,…). Một configuration sẽ xác định : • Các tính năng của ngôn ngữ Java được hỗ trợ. • Các tính năng của máy ảo Java được hỗ trợ. • Thư viện chuẩn và các API . Nói một cách đơn giản, một configuration định nghĩa một đặc tả mà các nhà sản xuất thiết bị và những người xây dựng profile phải tuân theo. Tất cả các thiết bị có chung đặc tính (bộ nhớ, tốc độ xử lý) phải “đồng ý” cài đặt đúng các đặc điểm được xác định và những người xây dựng profile chỉ được sử dụng các đặc tính được định nghĩa trong configuration. Một lập trình viên viết chương trình game cho điện
  • 44. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 27 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. Qua đây ta thấy khẩu hiệu “Write Once, Run Anywhere” của Java đã không còn đúng nữa, nhưng chú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 : a) CLDC - Connected Limited Device Configuration : CLDC đượ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 nhắn tin, máy điện thoại di động và PDA. Các thiết bị này có giao diện đơn giản, bộ nhớ khoảng 32K đến 512 KB bộ nhớ, băng thông nhỏ, trong các thiết bị này, việc truyền thông trên mạng không dựa vào giao thức TCP/IP. 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. b) CDC - Connected Device Configuration : 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. Các thiết bị thuộc loại này bao gồm các hộp điều khiển TV, tivi Internet, điện thoại Internet, các thiết bị giải trí, định hướng. Các thiết bị này có giao diện phong phú, bộ nhớ nhiều hơn (thông thường là trên 2Mb) và có bộ xử lý mạnh hơn, băng thông lớn và sử dụng giao thức TCP/IP. 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, 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 hỗ trợ các phép tính toán dấu phẩy động, nên máy ảo thuộc CLDC không được hỗ trợ kiểu float và double.
  • 45. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 28 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 2-1 : Phân loại CLDC và CDC Hình vẽ sau minh họa quan hệ giữa CLDC, CDC và Java 2 Standard Edition (J2SE). Theo đó, chúng ta thấy một phần lớn các chức năng trong CLDC và CDC có được do thừa kế từ Java 2 Standard Edition (J2SE). Mỗi lớp được thừa kế từ J2SE phải giống hoặc gần giống với lớp tương ứng trong J2SE. Thêm vào đó, CLDC và CDC có một số đặc tính khác được thiết kế cho các thiết bị nhúng mà J2SE không có (ví dụ như các thành phần giao diện). Hình 2-3 : Quan hệ giữa J2ME configuration và J2SE.
  • 46. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 29 2.2. 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 có tên 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 yêu cầu về 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, những lập trình viên không thể xử lý lỗi được vì đã quá trễ. Các lớp thừa kế từ J2SE : CLDC yêu cầu khoảng 160 KB để 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 trong CLDC : • Các lớp hệ thống (system classes) java.lang.Class java.lang.Object java.lang.Runnable (interface) java.lang.Runtime java.lang.String
  • 47. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 30 java.lang.StringBuffer java.lang.System java.lang.Thread java.lang.Throwable • Các lớp thuộc kiểu dữ liệu (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 • Các lớp nhập/xuất (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 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
  • 48. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 31 • 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 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 : o Lấy thông tin về platform của thiết bị :
  • 49. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 32 System.getProperty("microedition.platform") o Lấy bảng mã ký tự : System.getProperty("microedition.encoding") o Lấy tên và phiên bản của cấu hình (configuration) System.getProperty("microedition.configuration") o Lấy tên của các profile được hỗ trợ : System.getProperty("microedition.profiles") K Virtual Machine : KVM là một máy ảo Java phù hợp với 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ị. 2.3. MIDP : 2.3.1. Đị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. Tuy nhiên MIDP cũng có nhiều hạn chế lớn cũng vì chỉ được thiết kế cho các máy di động có cấu hình rất thấp. 2.3.2. Yêu cầu về phần cứng : • Màn hình có kích thước tối thiểu là 96 x 54 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.
  • 50. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 33 Các hệ điều hành trên các thiết bị thì thay đổi tùy theo thiết bị, do đó, MIDP không quá khắt khe về các yêu cầu phần mềm. Sau đây là một số yêu cầu : • Hệ điều hành trên các thiết bị phải cung cấp khả năng xử lý ngoại lệ, xử lý ngắt, và phải chạy được máy ảo Java • Hỗ trợ vẽ ảnh bitmap ra màn hình. • Dùng một trong 3 loại thiết bị nhập đã liệt kê ở trên,. • Hỗ trợ đọc và ghi dữ liệu từ bộ nhớ chính. 2.3.3. Các khả năng và hạn chế của MIDP : Các hạn chế của MIDP : MIDP KHÔNG hỗ trợ các tính năng sau : • 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 các lập trình 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. Điều này có thể làm chúng ta ngạc nhiên nhưng thực tế là các thiết bị J2ME không có hỗ trợ các thiết bị lưu trữ thông thường như ổ cứng… Tuy nhiên, điều đó không có nghĩa là chúng phải mất đi mọi dữ liệu quan trọng mỗi khi tắt máy, Sun đã cung cấp một chức năng khác tương đươ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.
  • 51. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 34 Những chức năng MIDP cung cấp : • 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, Vector 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ợ 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 đã tung ra MIDP 2.0 với hàng loạt tính năng khác được cung cấp thêm so với bản 1.0 (Hiện nay tại Việt Nam có rất nhiều đời điện thoại hỗ trợ MIDP 2.0 như Nokia 6600, Sony Ericsson P900,..). Sau đây là các cải tiến nổi bật so với MIDP 1.0 • Nâng cấp các tính năng bảo mật như : o Download qua mạng an toàn hơn qua việc hỗ trợ giao thức HTTPS. o 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ở rộng các tính năng của Form. Nhiều cải tiến đã được đưa vào API javax.microedition.lcdui trong MIDP 2.0, nhưng các thay đổi lớn nhất (ngoài API cho game) là trong Form và Item. • Hỗ trợ các lập trình viên Game bằng cách tung ra Game API. Có lẽ Sun đã kịp nhận ra thị trường đầy tiềm năng của các thiết bị di động trong lĩnh vực Game. Với MIDP 1.0 thì các lập trình viên phải tự mình viết code để quản lý các
  • 52. Chương 2 : Giới thiệu khái quát về chuẩn J2ME 35 hành động của nhân vật cũng như quản lý đồ họa. Việc này sẽ 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 các 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à tập hợp các layer (lớp). Ví dụ như : trong một game đua xe thì màn hình nền là một layer, con đường là một layer và chiếc xe được xem như đang nằm trên layer khác. • Với Game API nhà phát triển còn được 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.
  • 53. Chương 3 : Những khó khăn do hạn chế của J2ME 36 Chương 3 : NHỮNG KHÓ KHĂN DO HẠN CHẾ CỦA J2ME Như chương 2 đã đề cập, J2ME được thiết kế nhắm đến thị trường các thiết bị di động có cấu hình thấp, hạn chế về năng lực xử lý và khả năng lưu trữ. Cũng vì vậy, bộ thư viện lớp của J2ME cũng được giản lược để trở nên đơn giản và gọn nhẹ hơn rất nhiều so với J2SE. Những hàm, lớp ít khi sử dụng, không cần thiết hoặc không thể cài đặt được do khả năng hạn chế của phần cứng thiết bị đều được loại bỏ. Tuy vậy, việc loại bỏ quá nhiều thư viện hàm cũng gây không ít khó khăn cho nhóm trong quá trình thực hiện đề tài, đặc biệt là việc thiếu thốn các hàm về đồ họa. Điều này đặt ra yêu cầu tìm kiếm giải pháp khắc phục hoặc các giải pháp thay thế. 3.1. Các hàm tô màu : Thư viện đồ họa của J2ME – MIDP 1.0 chỉ hỗ trợ các hàm tô màu sau : fillArc : tô màu cho vùng giới hạn bởi một cung fillRect : tô màu cho một hình chữ nhật fillRoundRect : tô màu cho một hình chữ nhật có góc tròn Nhằm giúp người xem bản đồ dễ dàng phân biệt được các đơn vị hành chính (trong đề tài này, đó là các quận), hầu hết trong mọi bản đồ, người ta thường tô màu cho mỗi đơn vị sao cho hai vùng kế cận nhau không cùng màu với nhau. Nếu như trong Visual C++, chúng ta có thể sử dụng ít nhất là 1 trong 3 hàm FillRgn, FillPolygon, FloodFill để thực hiện được việc này. Trong phiên bản Java chuẩn (J2SE) cũng có cung cấp hàm FillPolygon nhưng đáng tiếc là trong J2ME, hàm này lại bị lược bỏ và chuẩn J2ME cũng không cung cấp hàm nào giúp tô màu
  • 54. Chương 3 : Những khó khăn do hạn chế của J2ME 37 cho một vùng kín có hình dạng bất kỳ. Nếu chỉ sử dụng 3 hàm tô màu như trên thì không thể nào thực hiện được. Tuy vậy, một điều may mắn là trong phiên bản MIDP 2.0, thư viện đồ họa lại được thêm vào 1 hàm mới, đó là fillTriangle. Đó là một cơ hội mà chúng ta có thể tận dụng được. Theo một quy tắc trong đồ họa máy tính, một mặt phẳng bất kỳ, kể cả hình tròn đều có thể được lợp kín từ nhiều tam giác (với số lượng tam giác đủ lớn). Như vậy, nếu chúng ta có thể tạo được các tam giác từ dữ liệu về ranh giới của các quận rồi áp dụng hàm fillTriangle thì vấn đề tô màu cho các quận sẽ được giải quyết. Tuy nhiên, cách này có một hạn chế đó là chỉ có thể thực hiện được nếu điện thoại di động sử dụng MIDP 2.0 3.2. Các hàm vẽ đường : Thư viện đồ họa trong J2ME chỉ hỗ trợ hàm vẽ đường thẳng có độ dày là 1 pixel, ngoài ra không có hàm nào khác cho phép thay đổi độ dày này, điều mà chúng ta có thể thay đổi được chỉ là dạng nét vẽ : nét liền (SOLID) hay nét đứt (DOTTED). Nếu so với phiên bản chuẩn J2SE thì chúng ta thấy rằng thư viện đồ họa J2ME đã bị loại bỏ hàm setStroke vốn dễ dàng thực hiện được điều này. Như vậy, khi cần vẽ các con đường trên bản đồ có độ dày mỏng khác nhau và đủ lớn để có thể vẽ tên đường trên đó cũng như để phân biệt các đại lộ với các đường nhỏ hơn, chúng ta buộc phải vẽ liên tiếp nhiều đoạn thẳng xếp cạnh nhau.
  • 55. Chương 3 : Những khó khăn do hạn chế của J2ME 38 Đây là các giải quyết đơn giản nhất, tuy nhiên, việc gọi nhiều hàm vẽ liên tục cũng có hạn chế là làm giảm tốc độ của chương trình. Do đó, chương trình cần phải so sánh để loại bỏ việc vẽ những những đường không nhìn thấy và hạn chế đến mức thấp nhất số đoạn thẳng cần vẽ. 3.3. Vấn đề font chữ : J2ME không cho phép chúng ta thay đổi loại font chữ cho đối tượng Graphics, có nghĩa là không cho phép chúng ta quy định font family, font size… Điều này có thể là do font hệ thống trong thiết bị là có giới hạn và chỉ có một số điện thoại di động cho phép cài đặt thêm font chữ vào máy. Khi tạo một đối tượng thuộc lớp Font để sử dụng, chúng ta chỉ có một cách, đó là : Font font = Font.getFont(int face, int style, int size) Trong đó, các tham số truyền vào bắt buộc phải là các hằng số sau : face : FACE_SYSTEM, FACE_MONOSPACE, FACE_PROPORTIONAL style : STYLE_PLAIN, hoặc tổ hợp từ các dạng STYLE_BOLD, STYLE_ITALIC, STYLE_UNDERLINED size : SIZE_SMALL, SIZE_MEDIUM, SIZE_LARGE Đặc điểm này gây ra một bất lợi cho chương trình, đó là khó xác định được chính xác kích thước của font chữ được sử dụng để lựa chọn cho phù hợp vì đối với một số điện thoại, font với kích thước trung bình có thể đẹp, nhưng với một số điện thoại khác thì quá to hoặc quá nhỏ hay quá cao. Mặt khác, khi phóng to bản đồ đến một mức nào đó thì font chữ có kích thước tối đa cũng sẽ trở nên quá nhỏ và không còn phù hợp nữa. Đây là một vấn đề thuộc về hệ thống cho nên nhóm thực hiện đề tài không khắc phục được triệt để mà
  • 56. Chương 3 : Những khó khăn do hạn chế của J2ME 39 chỉ có thể chọn lựa được dạng font cùng với kích thước thích hợp nhất phù hợp với phần lớn điện thoại phổ biến trên thị trường Việt Nam hiện nay. 3.4. Vấn đề vẽ chuỗi ký tự : Trong J2ME, việc vẽ một chuỗi ký tự được thực hiện thông qua hàm sau : public void drawString(String str, int x, int y, int anchor) với x, y là tọa độ bắt đầu vẽ và anchor là chế độ căn lề. Anchor được tổ hợp từ 1 hằng số căn lề theo chiều ngang (LEFT, HCENTER, RIGHT) và 1 hằng số nhằm căn lề theo chiều dọc (TOP, BASELINE, BOTTOM). Nếu như trong Visual C++, chúng ta có thể vẽ chuỗi ký tự xoay theo mọi hướng nhờ vào 2 trường lfEscapement và lfOrientation của struct LOGFONT thì trong J2ME, chúng ta không được cung cấp bất cứ một hàm, một đối tượng nào có chức năng tương tự như thế. Mọi chuỗi ký tự do thư viện đồ họa của J2ME vẽ ra đều có chiều nằm ngang. Như vậy, nếu một con đường trên bản đồ có chiều không nằm theo phương ngang (hầu hết các đường đều như vậy) thì chúng ta không thể sử dụng hàm vẽ chuỗi ký tự nêu trên để vẽ tên đường cũng như không thể xoay tên theo hướng của đường như trong các bản đồ bình thường khác :
  • 57. Chương 3 : Những khó khăn do hạn chế của J2ME 40 Để khắc phục việc này, chúng ta có thể sử dụng một giải pháp thay thế, đó là phân rã chuỗi tên đường thành các ký tự rồi trực tiếp tính toán để xác định vị trí của mỗi ký tự trên bản đồ, sau đó sử dụng hàm vẽ ký tự để hiển thị từng ký tự này ra màn hình : public void drawChar(char character, int x, int y, int anchor) ý nghĩa của các tham số tương tự như hàm drawString. Sau khi áp dụng phương pháp trên, kết quả đạt được như sau : Nhận xét : Giải pháp này cũng chưa thật sự tốt do buộc chương trình phải xử lý, tính toán nhiều. Ngoài ra, việc vẽ các ký tự trong tên đường một cách rời rạc như vậy cũng có thể khiến người sử dụng khó theo dõi nếu một vùng nào đó có số lượng đường giao thông nhiều và nằm gần nhau. Tuy vậy, trong điều kiện thiếu thốn các hàm về xử lý font chữ, các hàm vẽ ký tự của thư viện đồ họa thì đây là giải pháp duy nhất, tốc độ thực hiện cũng có thể chấp nhận được. 3.5. Vấn đề về số thực : Như chương 2 đã trình bày, J2ME đã loại bỏ kiểu dữ liệu số thực (float, double). Từ lý do này chương trình gặp phải một số khó khăn sau : - Phải xây dựng lại hàm tính căn bậc 2 để phục vụ cho mục đích xác định khoảng cách giữa 2 tọa độ. - Vì không hỗ trợ số thực cho nên J2ME cũng không hỗ trợ các hàm tính sin, cos của một góc. Như vậy, chúng ta không thể vẽ được mũi tên cho các đoạn đường một chiều bởi vì để xác định được 2 đoạn thẳng trên đầu mũi tên,
  • 58. Chương 3 : Những khó khăn do hạn chế của J2ME 41 chúng ta bắt buộc phải sử dụng đến công thức lượng giác. Hiện nay, có nhiều lập trình viên trên thế giới xây dựng một thư viện bổ sung để xử lý các số thực : http://bearlib.sourceforge.net http://henson.newmail.ru/j2me/Float.htm Tuy nhiên, xét thấy việc sử dụng thêm các thư viện hàm bổ sung sẽ làm tăng đáng kể kích thước và việc tính toán nhiều trên số thực cũng khiến cho chương trình chạy chậm đi, hơn nữa, đây cũng không phải là tính năng thực sự quan trọng nên nhóm thực hiện đề tài không cài đặt phần này.