Upload
trang-le
View
54
Download
0
Embed Size (px)
Citation preview
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
VÕ THÀNH NHẬT – PHAN THÀNH TRUNG
TÌM HIỂU HỆ ĐIỀU HÀNH ANDROID VÀ
XÂY DỰNG ỨNG DỤNG MINH HỌA
KHÓA LUẬN TỐT NGHIỆP CỬ NHÂN CNTT
TP.HCM, 2010
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
VÕ THÀNH NHẬT - 07HC102
PHAN THÀNH TRUNG - 07HC167
TÌM HIỂU HỆ ĐIỀU HÀNH ANDROID VÀ XÂY
DỰNG ỨNG DỤNG MINH HỌA
KHÓA LUẬN TỐT NGHIỆP CỬ NHÂN CNTT
GIÁO VIÊN HƢỚNG DẪN
Th.S NGUYỄN TRẦN MINH THƢ
NIÊN KHÓA 2007 – 2010
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
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
………………………………………………………………………………………
Khóa luận đáp ứng yêu cầu của Khóa luận cử nhân CNTT.
TpHCM, ngày ….. tháng …… năm 2010
Giáo viên phản biện
LỜI CÁM ƠN
Chúng em xin chân thành cảm ơn Khoa Công nghệ Thông tin, trường Đại
học Khoa học Tự nhiên, Đại học Quốc gia Tp. Hồ Chí Minh đã tạo điều kiện thuận
lợi cho chúng em học tập và thực hiện đề tài tốt nghiệp này.
Chúng em xin bày tỏ lòng biết ơn sâu sắc đến cô Nguyễn Trần Minh Thư đã
tận tình hướng dẫn, chỉ bảo chúng em trong quá trình thực hiện đề tài.
Chúng em xin chân thành cám ơn quý Thầy Cô trong Khoa Công nghệ
Thông tin đã tận tình giảng dạy, trang bị cho em những kiến thức quý báu trong
những năm học vừa qua.
Chúng con xin chân thành cảm ơn Ông Bà, Cha Mẹ đã luôn động viên, ủng
hộ vật chất lẫn tinh thần trong suốt thời gian qua.
Chúng em xin cảm ơn sự quan tâm, giúp đỡ và ủng hộ của anh chị, bạn bè
trong quá trình thực hiện khóa luận. Đặc biệt, bạn Nguyễn Thị Kim Phượng giúp
nhóm kiểm tra lại dữ liệu thử của hệ thống.
Mặc dù đã cố gắng hoàn thành khóa luận trong phạm vi và khả năng cho
phép nhưng chắc chắn sẽ không tránh khỏi những thiếu sót. Chúng em rất mong
nhận được sự thông cảm, góp ý và tận tình chỉ bảo của quý Thầy Cô và các bạn.
Tp. Hồ Chí Minh, tháng 03 năm 2010
Nhóm sinh viên thực hiện
Võ Thành Nhật – Phan Thành Trung
ii
MỤC LỤC
DANH MỤC CÁC HÌNH ...................................................................................... vi
DANH MỤC CÁC BẢNG .................................................................................. viii
Chƣơng 1 Mở đầu .................................................................................................. 2
1.1 Ngữ cảnh đề tài .............................................................................................. 2
1.1.1 Xu thế ngày càng phổ biến của điện thoại thông minh (smart phone) ....... 2
1.1.2 Khái niệm về dịch vụ giá trị cộng thêm.................................................... 3
1.1.3 Ứng dụng hỗ trợ mua sắm trên điện thoại di động ................................... 6
1.1.4 So sánh các hệ điều hành và các kho ứng dụng của nó hiện có trên các
dòng smart phone ............................................................................................. 8
1.2 Tìm hiểu việc lập trình trên Android và các tin tức đến sự lớn mạnh của nó . 11
1.2.1 Sự ra đời và lịch sử của Android ............................................................ 11
1.2.2 So sánh với các hệ điều hành khác ......................................................... 14
1.2.3 Những thuận lợi và khó khăn của Android đối với nhà phát triển .......... 15
1.2.4 Tầm quan trọng và khả năng phát triển của Android trên thế giới và Việt
Nam ............................................................................................................... 16
1.3 Phạm vi khóa luận ........................................................................................ 17
1.3.1 Tìm hiểu hệ điều hành Android ............................................................. 17
1.3.2 Ứng dụng minh họa ............................................................................... 18
1.4 Mục tiêu khóa luận ....................................................................................... 19
1.5 Tổ chức khóa luận ........................................................................................ 20
Chƣơng 2 Khái quát về Andoid và từng bƣớc làm quen với Android ...............22
2.1 Giới thiệu sơ lược về Android ...................................................................... 22
2.1.1 Định nghĩa Android ............................................................................... 22
2.1.2 Kiến trúc Android .................................................................................. 23
2.1.3 Các thành phần phần cứng, phần mềm Android hỗ trợ ........................... 24
2.2 Từng bước thiết lập cơ bản để lập trình Android và trách nhiệm từng thành
phần. .................................................................................................................. 24
iii
2.2.1 Bước 1: Cài đặt Java SE (JDK) .............................................................. 25
2.2.2 Bước 2: Tải về môi trường phát triển phần mềm Eclipse ....................... 25
2.2.3 Bước 3: Thiết lập plugin ADT ............................................................... 25
2.2.4 Bước 4: Thiết lập Android SDK cho Eclipse ......................................... 27
2.2.5 Bước 5: Cài đặt máy ảo ......................................................................... 27
2.3 Làm quen với Android project trên môi trường Eclipse ................................ 28
2.3.1 Tạo ứng dụng NhatTrungHelloAndoid .................................................. 28
2.3.2 Làm quen với khung nhìn Eclipse qua ứng dụng Android ...................... 31
2.4 Làm quen với cấu trúc project Android trên Eclipse và trên bộ nhớ ngoài .... 34
2.5 Làm quen với vòng đời các thành phần ứng dụng Android ........................... 36
2.5.1 Các khái niệm cơ bản ............................................................................ 36
2.5.2 Vòng đời của Activity............................................................................ 38
2.6 Làm quen với công cụ hỗ trợ sẵn có của Android SDK ................................ 39
Chƣơng 3 Lập trình giao diện trên Android .......................................................40
3.1 Các vấn đề và khái niệm cơ bản của lập trình giao diện ................................ 40
3.1.1 Các từ khóa trong lập trình giao diện ..................................................... 40
3.1.2 Tổng quát các View dưới cái nhìn hướng đối tượng ............................... 40
3.1.3 Giới thiệu bản chất lập trình giao diện trên Android .............................. 41
3.1.4 Cách thức tạo giao diện và lập trình giao diện ........................................ 42
3.1.5 Các thuộc tính thường gặp trên các View ............................................... 43
3.1.6 Các đơn vị tính trên giao diện ................................................................ 44
3.2 Lập trình giao diện cơ bản ............................................................................ 45
3.2.1 Các loại điều khiển chứa điều khiển khác (layout) ................................. 45
3.2.2 Các điều khiển thông dụng .................................................................... 46
3.3 Các chú ý khi lập trình giao diện .................................................................. 47
Chƣơng 4 Lập trình theo từng chủ đề .................................................................49
4.1 Lập trình với Adapter ................................................................................... 49
4.1.1 Giới thiệu Adapter. ................................................................................ 49
iv
4.1.2 Lập trình với Adapter trên Spinner, Gallery, Listview cơ bản, ListView
nâng cao, GridView cơ bản, GridView nâng cao ............................................ 50
4.1.3 Dùng Adapter cho màn hình danh sách hàng hóa ................................... 51
4.2 Lập trình với hoạt cảnh chuyển động............................................................ 53
4.2.1 Giới thiệu các dạng hoạt cảnh chuyển động ........................................... 53
4.2.2 Các hoạt cảnh chuyển động trong ứng dụng ........................................... 53
4.3 Lập trình Media ........................................................................................... 54
4.4 Lập trình với Telephony ............................................................................... 54
4.4.1 Giới thiệu .............................................................................................. 54
4.4.2 Áp dụng lập trình Telephony vào ứng dụng ........................................... 54
4.5 Lập trình với Luồng ..................................................................................... 55
4.5.1 Giới thiệu luồng ..................................................................................... 55
4.5.2 Cách thức dùng luồng trong ứng dụng minh họa .................................... 55
4.6 Lập trình với thực đơn .................................................................................. 56
4.6.1 Giới thiệu .............................................................................................. 56
4.6.2 Cách thức dùng thực đơn trên ứng dụng minh họa ................................. 56
4.7 Lập trình với kiểu chữ (Font) ....................................................................... 56
4.8 Lập trình với khung thoại (Dialog) ............................................................... 57
4.9 Lập trình với nhập xuất tập tin ..................................................................... 57
4.9.1 Giới thiệu .............................................................................................. 57
4.9.2 Lập trình với tập tin (Files) .................................................................... 58
4.9.3 Lập trình với cơ sở dữ liệu (Databases).................................................. 58
4.10 Lập trình với Network ................................................................................ 60
4.11 Lập trình với MapView .............................................................................. 61
4.12 Lập trình với Webkit .................................................................................. 62
4.13 Lập trình với các Widget khác .................................................................... 62
4.14 Các vấn đề nảy sinh khi lập trình Android .................................................. 62
Chƣơng 5 Chƣơng trình ứng dụng và các giải pháp cho các chức năng của ứng
dụng .......................................................................................................................64
v
5.1 Phát biểu bài toán ......................................................................................... 64
5.2 Sơ đồ Use Case ............................................................................................ 66
5.3 Phân tích và thiết kế dữ liệu ......................................................................... 68
5.3.1 Phân tích và thiết kế dữ liệu trên Webservice ......................................... 68
5.3.2 Phân tích và thiết kế dữ liệu trên Client ................................................. 69
5.4 Thiết kế hệ thống ......................................................................................... 70
5.4.1 Kiến trúc hệ thống ................................................................................. 70
5.4.2 Mô tả nhiệm vụ và kiến trúc hệ thống trên webservice........................... 71
5.4.3 Mô tả nhiệm vụ và kiến trúc trên client dùng Android ........................... 73
5.4.4 Các lớp trên Client ................................................................................. 76
5.4.5 Các lớp trên webservice ......................................................................... 79
5.5 Thiết kế giao diện......................................................................................... 81
5.5.1 Sơ đồ các màn hình trên Client .............................................................. 81
5.5.2 Ý nghĩa các màn hình theo các nhánh của sơ đồ 5-11 ............................ 82
5.6 Cài đặt, thử nghiệm và so sánh ..................................................................... 88
5.6.1 Cài đặt ................................................................................................... 88
5.6.2 Kết quả thử nghiệm và so sánh .............................................................. 89
Chƣơng 6 Tổng kết ...............................................................................................90
6.1 Các kết quả đạt được .................................................................................... 90
6.2 Hướng phát triển: ......................................................................................... 91
TÀI LIỆU THAM KHẢO ....................................................................................92
vi
DANH MỤC CÁC HÌNH
Hình 1-1 Biểu đồ biểu diễn phần trăm số ngƣời sử dụng smart phone tại các
nƣớc ................................................................................................................ 3
Hình 1-2 Tỉ lệ số người dùng điện thoại di động cho các mục đích ......................... 6
Hình 1-3 Thị phần smart phone toàn cầu quý 2 năm 2009
(http://en.wikipedia.org/wiki/Smartphone) ..................................................... 10
Hình 1-5 Màn hình chính của điện thoại dùng hệ điều hành android ..................... 11
Hình 1-4 Biểu tượng của Android ......................................................................... 11
Hình 1-6 Mô hình ứng dụng eSaleShopping ......................................................... 18
Hình 2-1 Kiến trúc của Android ........................................................................ 23
Hình 2-2 Cài đặt plugin ADT thông qua thư mục trên máy chủ Google ................ 26
Hình 2-3 Màn hình chọn lựa các công cụ Android ................................................ 26
Hình 2-4 Màn hình thiết lập ADT bằng tập tin Zip ............................................... 27
Hình 2-5 Màn hình thiết lập thông tin cho project Android ................................... 29
Hình 2-6 Màn hình giao diện của ứng dụng NhatTrungHelloAndroid được thiết kế
trên Eclipse .................................................................................................... 30
Hình 2-7 Giao diện máy ảo Android với giao diện ứng dụng đầu tay ................... 31
Hình 2-8 Màn hình Eclipse với khung nhìn Java................................................... 32
Hình 2-9 Màn hình Eclipse với khung nhìn DDMS .............................................. 33
Hình 2-10 Màn hình Eclipse với khung nhìn Debug ............................................. 33
Hình 2-11 Cấu trúc project Android trên bộ nhớ ngoài ......................................... 34
Hình 2-12 Cấu trúc project Android trên Eclipse .................................................. 35
Hình 2-13 Ví dụ các tập tin tham chiếu trong thư mục Referenced Library của
project Android .............................................................................................. 35
Hình 2-14 Hình mô tả qui trình biên dịch thành tập tin .apk.................................. 36
Hình 2-15 Vòng đời của Activity (Nguồn developer.Android.com) ...................... 38
Hình 3-1 Giao diện ứng dụng NhatTrungHelloAndroid ........................................ 41
Hình 3-2 Giao diện ứng dụng NhatTrungHelloAndroi được quy định bằng XML 41
Hình 3-3 Các thuộc tính thường gặp trên một View .............................................. 43
vii
Hình 3-4 Hình minh họa Linear Layout ................................................................ 45
Hình 3-5 Hình minh họa Table Layout ................................................................. 45
Hình 3-6 Hình minh họa Frame Layout ................................................................ 45
Hình 3-7 Hình minh họa Absolute Layout ............................................................ 45
Hình 3-8 Hình minh họa Relative Layout ............................................................. 46
Hình 3-9 Hình widget tên là Switcher ................................................................... 47
Hình 5-1 Sơ đồ use case cho ứng dụng eSaleShopping ......................................... 67
Hình 5-2 Sơ đồ CSDL trên server ......................................................................... 69
Hình 5-3 Hình sơ đồ các lớp dữ liệu ..................................................................... 69
Hình 5-4 Hình mô tả hệ thống ứng dụng eSaleShopping....................................... 70
Hình 5-5 Hình kiến trúc xử lý và trả về kết quả tìm kiếm sàn phẩm trên webservice
....................................................................................................................... 71
Hình 5-6 Kiến trúc tiếp nhận và trả về thông tin cập nhật cho client ..................... 72
Hình 5-7 Kiến trúc tổng hợp thông tin tìm kiếm trên client ................................... 73
Hình 5-8 Kiến trúc đồng bộ thông tin giữa client và webservice ........................... 74
Hình 5-9 Kiến trúc tổng hợp và quản lý danh sách hàng hóa cần mua................... 75
Hình 5-10 Kiến trúc tổng hợp và quản lý hàng hóa ưa thích ................................. 75
Hình 5-11 Sơ đồ các màn hình trên client ............................................................. 81
Hình 5-12 Sơ đồ màn hình mô tả [1] cho hình 5-11 .............................................. 81
Hình 5-13 Sơ đồ màn hình mô tả [2] cho hình 5-11 .............................................. 82
Hình 5-14 Sơ đồ màn hình mô tả [3] cho hình 5-11 .............................................. 82
viii
DANH MỤC CÁC BẢNG
Bảng 1-1 Bảng phân chia các loại hình dịch vụ theo 4 lĩnh vực .............................. 4
Bảng 1-2 Bảng phân loại ứng dụng và trò chơi theo sự phân chia của Android
Market .............................................................................................................. 6
Bảng 1-3 Bảng thống kê thông tin của các hệ điều hành trên smart phone (theo
endgaget.com) .................................................................................................. 9
Bảng 1-4 Bảng thống kê các phiên bản cỉa Android – nguồn Wiki
(http://en.wikipedia.org/wiki/Android_(operating_system)) ........................... 13
Bảng 1-5 Bảng thống kê các tính năng của Android (theo wiki.com) .................... 14
Bảng 1-6 Bảng phân tích khía cạnh Android đối với nhà phát triển ...................... 16
Bảng 4-1 Bảng các phương thức cơ bản của DataProviderTest ............................. 59
Bảng 4-2 Bảng các phương thức trong ServiceProvider ........................................ 61
Bảng 5-1 Bảng tên và chức năng Use-case ........................................................... 68
Bảng 5-2 Bảng các lớp có trên client .................................................................... 79
Bảng 5-3 Bảng các lớp có trên webservice ........................................................... 80
2
Chương 1 Mở đầu
Trong chương này, giới thiệu ngữ cảnh của đề tài khóa luận là smart
phone và giá trị cộng thêm của nó ngày càng phong phú, đa dạng; đồng thời khái
quát các hệ điều hành hiện có trên các dòng smart phone và trong đó Android là hệ
điều hành đang vươn lên với tiềm năng lớn mạnh. Tiếp theo là tìm hiểu sự ra đời,
quá trình phát triển và so sánh Android với các hệ điều hành khác trên một số khía
cạnh. Kế đến là phân tích phạm vi và mục tiêu mà nhóm đặt ra cho cuốn khóa luận
này. Cuối cùng là tổng quát về cấu trúc của cuốn khóa luận.
1.1 Ngữ cảnh đề tài
1.1.1 Xu thế ngày càng phổ biến của điện thoại thông minh (smart
phone)
Smart phone là điện thoại di động mà ngoài các chức năng nghe, gọi, nhận
tin nhắn, nó còn có tích hợp các khả năng nâng cao như một máy vi tính như đọc
email, duyệt web, đọc e-book, tích hợp bàn phím rời hay bàn phím ảo, và có màn
hình màu. Nói một cách dễ hiểu, smart phone là máy vi tính thu nhỏ mà có khả
năng như là một điện thoại (Theo nguồn http://en.wikipedia.org/wiki/Smartphone).
Các loại thiết bị di động, đặc biệt là smart phone là thiết bị không thể thiếu
cho nhu cầu học tập, làm việc và giải trí của người hiện đại ngày nay. Theo báo cáo
mới đây của Pyramid, smart phone chiếm 16% thị phần trên toàn thế giới trong năm
2009, và tiên đoán sẽ tăng vọt 39% tới năm 2014. Ngoài ra, Pyramid dự đoán rằng
Trung Quốc đứng vị trí số một trong năm 2010 về lượng tiêu thụ smart phone vì các
nhà đầu tư mạng đang đẩy mạnh đầu tư vào công nghệ 3G, giá cả các dịch vụ cạnh
tranh, và giá thành smart phone ngày càng vừa túi tiền hơn. Số người dùng smart
phone sẽ chiếm 48% ở châu Mỹ La Tinh và theo sau đó là 39% tại châu Phi và
Trung Đông.
3
Hình - Biểu đồ biểu diễn phần trăm số ngƣời sử dụng smart phone tại các nƣớc
Còn tại Việt Nam, theo con số của công ty nghiên cứu thị trường GFK
(http://www.gfk.com/) thì thị phần của điện thoại thông minh trong thị trường điện
thoại di động đã đạt con số 13,4% và đã liên tục tăng trưởng trong các tháng gần
đây (Theo tinhte.com).
Theo dự đoán thì thị trường điện thoại thông minh còn tăng thêm khi mà các
dịch vụ cho điện thoại đang được đầu tư và mở rộng như mạng 3G được các nhà
cung cấp dịch vụ di động Viettel, MobiPhone, và VinaPhone lần lượt đưa ra cung
cấp cho người dùng trong cả nước. Ngoài ra, theo ICT news thì Viettel chính thức
xác nhận Viettel sẽ phân phối chính thức smart phone iPhone tại Việt Nam trong
khoảng giữa năm 2010. Ngoài ra, theo nguồn tin từ trang Tin tức vnexpress.net
(http://vnexpress.net/GL/Vi-tinh/2010/01/3BA17F34/), thì VinaPhone và
MobiPhone sẽ tiếp bước Viettel cung cấp iPhone tại Việt Nam, tất cả đều hứa hẹn
một thị trường smart phone khởi sắc và năng động tại Việt Nam.
Tương xứng với sự lớn mạnh đó, dịch vụ giá trị cộng thêm trên các điện
thoại ngày càng đa dạng và khởi sắc tạo nên giá trị lợi nhuận khổng lồ cho nền công
nghiệp di động và dịch vụ tại Việt Nam
1.1.2 Khái niệm về dịch vụ giá trị cộng thêm
Dịch vụ giá trị cộng thêm là khái niệm trong nghành công nghiệp truyền
thông mà nó không phải là các dịch vụ nghe gọi và truyền fax thông thường. Ví dụ,
trên các điện thoại di động, các công nghệ như SMS, MMS, GPRS được xem là các
dịch vụ giá trị cộng thêm.
4339 37
34
0
10
20
30
40
50
Brazil Ấn Độ Thổ Nhĩ Kỳ Nigeria
4
Thông thường, các dịch vụ cộng thêm được cung cấp bởi các nhà cung cấp
dịch vụ mạng di động hay bởi các nhà cung cấp dịch vụ cộng thêm bên thứ ba (theo
tiếng Anh là third-party value-added service provider – VASP hay còn gọi là
content provider - CP). Ta có thể phân chia các loại hình dịch vụ cộng thêm ra
thành nhiều dạng khác nhau theo nhiều tiêu chí, tạm thời ta chia theo lĩnh vực sau:
Thỉnh thoảng dùng Dùng thƣờng xuyên
Cá nhân Du lịch Thông tin và giải trí
Tổ chức Quản lý rủi ro Giải pháp quản lí lực lượng lao động.
Bảng - Bảng phân chia các loại hình dịch vụ theo 4 lĩnh vực
Du lịch: dịch vụ tìm vị trí và các thông tin du lịch theo vị trí, .…
Thông tin và giải trí: đọc báo, xem phim, nghe nhạc, chơi các trò chơi
thông qua tin nhắn SMS hay trực tuyến, ..…
Quản lí rủi ro: theo dõi dịch bệnh, cảnh báo động đất, sóng thần, ...
Giải pháp quản lí lực lượng lao động: tìm kiếm và truy vết vị trí của
công nhân giao bánh pizza, hay quản lí hệ thống taxi, .…
Tại Việt Nam các loại hình dịch vụ cộng thêm chủ yếu được các nhà cung
cấp dịch vụ mạng cung cấp chính cho người dùng điện thoại bên cạnh một số công
ty LuckyWin hay Siêu Cười với các trò chơi, các dịch vụ tin nhắn SMS hay trên
GPRS. Có thể kể đến như Viettel, VinaPhone, MobiPhone hiện có các dịch vụ
email (như Imail của Viettel, EZMail của Vinaphone), dịch vụ thông tin (LiveInfo
của MobiPhone, InfoPlus của VinaPhone), dịch vụ lưu trữ dữ liệu (DataSafe của
VinaPhone). Ngoài ra, còn các dịch vụ của S-fone như Hẹn Hò, Tra Cứu Kết Quả
Xổ Số, … và Yahoo SMS Messenger của EVN Telecom. Theo tin của FPTSoftware
thì chỉ riêng Tra Cứu Kết Quả Xổ Số đã đem lại doanh thu hàng ngàn tỉ đồng.
Nhưng tất cả các dịch vụ cộng thêm ấy đều dựa trên nền GPRS hay EDGE của công
nghệ 2G và 2.75G. Gần đây, VinaPhone, Viettel và MobiPhone lần lượt cung cấp
3G ở Việt Nam hứa hẹn một thị trường giá trị gia tăng ngày càng lớn mạnh và tăng
trưởng cao trong năm 2010. Sự phát triển của 3G sẽ kéo theo nhiều sự phát triển, ví
5
dụ như sự phát triển thị trường điện thoại di động 3G, thiết bị kết nối internet liên
quan đến 3G, xem TV online, các ứng dụng liên quan đến 3G, …
Điển hình là các ứng dụng liên quan đến 3G do VASP hay CP cung cấp
thông qua các kho ứng dụng trên từng hệ điều hành khác nhau trên các loại smart
phone có trên thị trường như App Store cho iPhone OS, hay Android Market trên
Android, … Có nhiều loại ứng dụng trên các kho ứng dụng được phân loại theo
nhiều tiêu chí tùy theo từng kho ứng dụng. Ở đây, chúng tôi lấy sự phân chia nhóm
ứng dụng của Android Market ra làm ví dụ. Đó là ứng dụng thuần túy và trò chơi:
Ứng dụng thuần túy
Truyện hài Tập hợp các truyện hài, truyện tranh online
Truyền thông Các chương trình chat trực tuyến, …
Giải trí Xem phim, các nhạc chuông, hình nền, …
Tài chính Tổng hợp thông tin tài chính, …
Sức khỏe Hướng dẫn, quản lí và chăm sóc sức khỏe, …
Lối sống Thủ thuật pha chế rượu, nấu ăn, …
Đa truyền thông Nghe nhạc, xem ảnh, …
Tin tức và thời tiết Thông tin báo chí và dự báo thời tiết, …
Công cụ quản lí máy Chương trình nén tập tin, quản lí tập tin, …
Tham khảo Từ điển, lịch sử, …
Mua sắm Hỗ trợ mua sắm, so sánh giá, …
Xã hội Các mạng xã hội, tìm kiếm theo vị trí, …
Thể thao Tin tức, công cụ liên quan đến thể thao, …
Theme Đổi giao diện, …
Công cụ La bàn, dịch thuật, …
Du lịch Tra cứu vị trí, địa chỉ, tín hiệu GPS, …
Trò chơi
Có nhiều màn chơi và
hành động
Gồm các game hành động, …
6
Trò chơi thông minh và ô
chữ
Gồm các trò đố thông minh và tìm ô chữ, …
Đánh bài và đặt cƣợc Gồm các trò chơi bài, trò slot, …
Thông thƣờng Gồm các game thông thường, …
Bảng - Bảng phân loại ứng dụng và trò chơi theo sự phân chia của Android Market
Nổi trội trong bảng trên là Mua sắm vì những phần mềm mua sắm hỗ trợ đắc
lực cho người tiêu dùng mua sắm trong những dịp lễ hay cuối năm. Theo Thời báo
Vi tính Sài Gòn ngày 20/01/2010 thì về phần mình, các nhà bán lẻ trực tuyến đang
tích cực cải thiện phiên bản di động của trang web để khách hàng có thể mua sắm
dễ dàng mà không cần nhập nhiều thông tin, dữ liệu. Trong khi đó, các nhà bán lẻ
ngoại tuyến cũng ồ ạt gửi cho người sử dụng điện thoại di động phiếu giảm giá
trong nỗ lực cạnh tranh với các đối thủ khác. Tiếp theo ta phân tích tính cần thiết
của ứng dụng hỗ trợ mua sắm trên điện thoại di động hiện nay trên thế giới.
1.1.3 Ứng dụng hỗ trợ mua sắm trên điện thoại di động
Một cuộc thăm dò thường niên trước dịp mua sắm cuối năm 2009 của công
ty tư vấn Deloite cho thấy, 20% người được hỏi có ý định dùng điện thoại di động
để mua sắm trong dịp này. Với tỉ lệ như sau:
Hình - Tỉ lệ số ngƣời dùng điện thoại di động cho các mục đích
Stacy Janial, trưởng bộ phận nghiên cứu hành vi bán lẻ Deloite ở Mỹ, nhận
định: “Công nghệ di động đang thực sự thúc đẩy nhiều hoạt động trong dịp mua
sắm cuối năm. Đây vừa là cơ hội cũng như thách thức đối với nhà bán lẻ vì sự cạnh
tranh sẽ rất khốc liệt.” (Theo thời báo Vi tính Sài Gòn số ngày 20/01/2010)
45%
32%
23%
Tìm hiểu giá cả
Tìm phiếu giảm giá hoặc
đọc bài viết đánh giá sản
phẩm
Mua sắm
7
Việc điện thoại ngày càng thông minh hơn và người tiêu dùng ngày càng
quan tâm đến giá cả trong thời buổi kinh tế khó khăn đang thúc đẩy sự phát triển
của thương mại điện tử. Điều này thể hiện qua sự xuất hiện ngày càng nhiều ứng
dụng di động hỗ trợ khách hàng mua sắm. Chẳng hạn như những ứng dụng
ShopSavvy, ReadLaser, TheFind, ShopStyle, PriceGrabber.com, … cho phép khách
hàng so sánh giá cả sản phẩm của nhiều nhà bán lẻ khác nhau. Trong khi đó, ứng
dụng của eBay chạy trên iPhone thì được thiết kế gửi thông báo ngay cho người sử
dụng khi có người trả giá cao hơn. Theo thống kê của eBay thì người mua sắm trên
di động đã chi 500 triệu USD trên trang web này trong năm 2009 (Theo tin của thời
báo Vi tính Sài Gòn ngày 20/01/2010).
Từ những thông tin đó cho thấy mua sắm hay tìm hiểu giá cả trên điện thoại
di động là nhu cầu cần thiết và có thể nói là cấp thiết trong tương lai khi mà có
nhiều nhà bán lẻ cạnh tranh giá cả với nhau và người hiện đại sẽ tốn ít thời gian và
chi phí để đi lại xem xét giá giữa các siêu thị. Khách hàng chỉ cần ngồi một chỗ và
chỉ cần vài thao tác đơn giản trên di động là có thể mua một món hàng rẻ và vừa với
túi tiền của mình mà không tốn nhiều thời gian và công sức.
Hiện nay, các loại hình trên chưa xuất hiện tại Việt Nam mà chủ yếu là trên
các trang web mua bán là chủ yếu như eBay.vn, hay 123mua, vatgia.com… Các
phần mềm so sánh giá trên di động chỉ mới xuất hiện ở các nước như Mỹ, Nhật là
chủ yếu và chưa thật sự có phần mềm tương tự tại Việt Nam. Chính vì những lí do
đó nhóm đã quyết định chọn đề tài viết ứng dụng hỗ trợ mua sắm do những lợi ích
của nó mang lại trong tương lai cho người dùng tại Việt Nam nói chung và thành
phố Hồ Chí Minh nói riêng.
Chương trình có những tính năng chính như tìm hiểu giá cả các mặt hàng
thông qua chụp mã vạch, thông qua tìm theo các danh mục hàng hóa, thông qua
từng siêu thị và thông qua giá trị tìm kiếm mà người dùng nhập vào qua bàn phím
thật hoặc bàn phím ảo có hỗ trợ tiếng Việt có dấu. Ngoài ra, còn thêm các tính năng
chỉ đường đến siêu thị gần nhất trong các hệ thống siêu thị, tính năng lưu danh sách
hàng hóa khách hàng cần mua và chia sẻ danh sách đó thông qua tin nhắn SMS và
8
tính năng lưu hàng hóa ưa thích để tiện cập nhật xem giá cả thay đổi trên các hàng
hóa đó.
Vấn đề chọn ứng dụng thực tế đã xong, vấn đề là trên điện thoại di động
dòng smart phone có rất nhiều và tương ứng với từng dòng thì có những hệ điều
hành hỗ trợ tương ứng. Ý tưởng đó phải được hiện thực hóa trên một hệ điều hành
nào đó sao cho có đầy đủ sự hỗ trợ từ hệ điều hành để hiện thực hóa các tính năng
đã đề ra. Trong mỗi hệ điều hành trên smart phone hiện nay đều có một kho ứng
dụng đi kèm tương ứng. Trong bước tiếp theo, ta sẽ so sánh các hệ điều hành hiện
có và các kho ứng dụng của nó để thấy được hệ điều hành nào đang lớn mạnh và
tiềm năng trên thị phần hệ điều hành trên các dòng smart phone. Từ đó chọn lựa
một hệ điều hành để hiện thực hóa ý tưởng ứng dụng thực tế trên.
1.1.4 So sánh các hệ điều hành và các kho ứng dụng của nó hiện có
trên các dòng smart phone
Hiện nay có nhiều hệ điều hành được phát triển dành riêng cho một hay
nhiều dòng điện thoại khác nhau. Mỗi hệ điều hành được “đỡ đầu” bởi một công ty
trong làng điện thoại smart phone; có thể kể đến như iPhone OS của Apple,
Android của Google, BlackBerry của RIM, Windows Mobile của Microsoft,
Symbian của Nokia, Palm webOS của Palm. Nhìn chung, mỗi hệ điều hành đều có
những mặt mạnh yếu khác nhau nhưng đóng góp phần lớn vào thị trường smart
phone trên toàn thế giới.
iPhone
OS Android BlackBerry
Windows
Mobile Symbian
Web
palm OS
Hãng sản
xuất
Apple Google RIM Microsoft Nokia Palm
Kho ứng
dụng
App Store
Android
Market
BlackBerry
Appworld
Market
Place
Ovi Store
Palm OS
Apps
Ngày mở
kho ứng
dụng
10/7/2008 22/10/2008 1/4/2009 27/7/2009 26/5/2009 8/1/2009.
9
Số lƣợng
ứng dụng
Hơn
120.000
Hơn
20.000
Hơn 2773
Hơn 600 Hơn 2066
Chưa
thống kê
Bảng - Bảng thống kê thông tin của các hệ điều hành trên smart phone (theo endgaget.com)
Sự bùng nổ mô hình cửa hàng ứng dụng trực tuyến được châm ngòi bởi App
Store của Apple - kho ứng dụng được thiết kế dành riêng cho iPhone và iPod
Touch. AppStore đã gặt hái được nhiều thành công ngoài sức mong đợi, góp phần
không nhỏ trong việc thúc đẩy doanh số của iPhone và iPod Touch đồng thời trở
thành mô hình kiểu mẫu mở đường cho hàng loạt kho ứng dụng của các công ty
khác trong làng điện thoại phát triển rầm rộ về sau. Có 5 kho ứng dụng đình đám và
được nhắc tên nhiều nhất ở thời điểm này, trong đó có App Store của Apple,
Android Market của Google, Windows Marketplace của Microsoft, BlackBerry App
World của RIM và Ovi Store của Nokia. Theo bảng số liệu của endgaget.com phía
trên, nổi cộm lên hai hệ điều hành nổi trội là iPhone OS và Android. Do vậy kể từ
phần này trở đi, nội dung phân tích tập trung nhiều hơn vào sự so sánh giữa hai hệ
điều hành này.
Theo con số thống kê mới đây của Androidlib.com liên quan đến các ứng
dụng có trên các cửa hàng ứng dụng trực tuyến thì số lượng ứng dụng miễn phí của
Android Market là 62,3% trong khi đó 23% là số ứng dụng không tính phí của Apps
Store của Apple. Điều đáng quan tâm hơn là 70% lượt tải về các ứng dụng trên
Apps Store dành cho các ứng dụng miễn phí. Điều này cho thấy Android là một nền
tảng hứa hẹn miễn phí cao cho các nhà phát triển phần mềm cũng như người dùng
cuối.
Đối với các VASP hay CP, khi tham gia vào kho ứng dụng Apps Store thì
phải đăng kí và chờ kiểm định gắt gao trong khi đó Android Market thì không cần
sự sự kiểm duyệt ấy. Theo thông tin mới đây của FPT Software, thì FTP đã gửi một
chương trình lên Apps Store và chờ đến bốn tháng kiểm duyệt với lí do không có
người Việt chuyên trách trong việc kiểm định. Ngoài ra, khi phát triển phần mềm
thì các CP phải dùng hệ điều Macintosh và môi trường lập trình XCode trong khi đó
10
với Android thì có thể lập trình trên Eclipse mà Eclipse có thể chạy được trên các hệ
điều hành thông dụng hiện nay như Windows, Macintosh, Linux.
Theo báo cáo của CanaLys (nguồn tin từ trang wikipedia.org -
http://en.wikipedia.org/wiki/Smartphone) về thị phần hệ điều hành smart phone
trong suốt quý 2 năm 2009 thì Google Android chỉ chiếm 2.8% nhưng cho đến thời
điểm hiện tại thì Android đã chiếm thị phần khá nhiều. Cũng theo dự báo của các
chuyên gia (theo tinhte.com đưa tin) thì tới năm 2013 thì Android sẽ là hệ điều hành
phổ biến đứng thứ 2 sau Symbian của Nokia.
Hình - Thị phần smart phone toàn cầu quý 2 năm 2009 (http://en.wikipedia.org/wiki/Smartphone)
Các chuyên gia nhận định, 2010 sẽ là năm của hệ điều hành Android bởi có
rất nhiều nhà sản xuất điện thoại di động lên kế hoạch cho sản phẩm chạy trên nền
Android. Ví dụ như Motorola sẽ ra 20 mẫu điện thoại dùng Android trong năm
2010 theo như Thời Báo Vi Tính Sài Gòn (20/01/2010). Thêm vào đó, theo nguồn
Changewave.com do thời báo Vi tính Sài Gòn đưa ngày 20/01/2010 thì 250% là
mức tăng của nhu cầu sử dụng các điện thoại thông minh dùng hệ điều hành
Android được thống kê vào giữa tháng 12/2009, so với mức 6% vào thời điểm
tháng 9/2009. Cũng theo ChangeWave, thì iPhone vẫn đứng đầu trong danh sách
smart phone được yêu thích nhất; tuy nhiên, tỉ lệ phần trăm iPhone trong vòng 3
tháng tới chỉ còn 28% giảm 4% so với hồi tháng 9/2009 (xem Phụ lục A Nghiên
cứu mới đây của ChangeWave về hệ điều hành Android khuấy động thị trường
smart phone và phục lục B để thấy rõ hơn khả năng tiềm tàng của Android so với
các hệ điều hành khác trên smart phone).
11
Tất cả các dẫn chứng và phân tích ở nhiều nguồn ở trên, thì Android nổi lên
là hệ điều hành tiềm năng trong tương lai, hứa hẹn nhiều cơ hội mới cho người sử
dụng đầu cuối, cho các VASP hay CP, cho các nhà cung cấp mạng, cho nhà sản
xuất điện thoại và cho OHA nên nhóm sẽ tìm hiểu sâu về hệ điều hành Android và
hiện thực hóa ý tưởng chương trình hỗ trợ mua sắm trên đó. Vì thế, trong phần tiếp
theo sẽ tìm hiểu phân tích hệ điều hành Android và khả năng phát triển của nó so
với các hệ điều hành khác cùng với sự lớn mạnh dần của Android.
1.2 Tìm hiểu việc lập trình trên Android và các tin tức đến sự lớn
mạnh của nó
1.2.1 Sự ra đời và lịch sử của Android
Android là hệ điều hành di
động dùng nhân Linux được phát
triển nhóm kỹ sư của Google.
Sau này, Hiệp hội các thiết bị cầm tay mở (OHA)
tiếp quản và phát triển. Android cho phép các nhà
phát triển có thể viết ứng dụng trên Android một
cách dễ dàng.
Ngày 05/11/2007, Hiệp hội các thiết bị cầm
tay mở thành lập gồm 47 thành viên đồng sáng lập
gồm các công ty phần cứng, phần mềm và viễn thông nhằm đưa ra các chuẩn mở
chung cho các thiết bị di động mà trong đó Google đóng vai trò đưa ra hầu hết tất cả
các đoạn mã Android. Hiện nay, OHA đã có 65 công ty thành viên phát triển chuẩn
mở cho thiết bị di động (xem phụ lục C các thành viên hiện có trong OHA).
Từ tháng 12/2006 khi Google chính thức gia nhập vào thị trường di động với
dòng máy dùng hệ điều hành đầu tiên là G1. Tiếp theo sau đó là hàng loạt các công
Hình - Màn hình chính của điện
thoại dùng hệ điều hành android
Hình - Biểu tƣợng
của Android
12
ty sản xuất ra các dòng điện thoại di động dùng Android như HTC, Motorola, Sony
Ericsson, … Xem phụ lục D - Các smartphone hiện dùng hệ điều hành Android.
Cùng lúc đó, hệ điều hành Android không ngừng cải tiến, liên tục đưa ra các
phiên bản cập nhật hệ điều hành. Các phiên bản cập nhật này đa phần dựa trên hệ
điều hành cơ bản với 2 tiêu chí là sửa lỗi cũ và thêm những tính năng mới.
Phiên
bản
Ngày phát
hành
Tên Tính năng mới và cập nhật giao diện
1.5 30/04/2009 Cupcake Ghi và xem video.
Tải hình lên Picasa và video lên
YouTube.
Khả năng đoán từ.
Kết nối Bluetooth.
Thêm thư mục và thành phần giao diện
mới.
Hiệu ứng hoạt hình giữa các màn hình.
Khả năng sao chép và dán.
1.6 15/09/2009 Donut Cải thiện Android Market.
Tích hợp camera và giao diện xem hình,
cho phép chọn nhiều hình để xóa.
Tìm theo giọng nói.
Hỗ trợ tìm kiếm nhiều hơn.
Hỗ trợ CDMA/EVDO, 802.1x VPN, cảm
nhận cử chỉ, và Text-to-Speech (phát âm
từ chuỗi).
2.0 26/10/2009 Eclair Tối ưu tốc độ phần cứng.
Hỗ trợ nhiều kích thước màn hình và độ
phân giải.
Giao diện trình duyệt web mới và hỗ trợ
HTML5.
Danh sách danh bạ mới.
Google Map 3.1.2
Hỗ trợ Microsoft Exchange.
13
Hỗ trợ đèn flash cho camera.
Phóng to kĩ thuật số.
Cải thiện bàn phím ảo.
Bluetooth 2.1.
Hình nền động.
2.0.1 3/12/2009
2.1 12/01/2010 Flan (Chưa chính thức)
Bảng - Bảng thống kê các phiên bản cỉa Android – nguồn Wiki
(http://en.wikipedia.org/wiki/Android_(operating_system))
Theo thời gian Android dần dần được cải thiện với nhiều hỗ trợ mới về mặt
giao diện cũng như tính năng cho người dùng. Android có nhiều tính năng hỗ trợ và
đáp ứng hầu hết nhu cầu sử dụng và lập trình của các nhà phát triển:
Giao diện Thích nghi với màn hình lớn, đồ họa 2D, 3D dựa trên
OpenGL ES 1.0.
Lƣu trữ Lưu trữ dữ liệu qua SQLite.
Kết nối GSM/EDGE, CDMA, EVDO, UMTS, Bluetooth, và Wifi.
Tin nhắn SMS và MMS.
Trình duyệt web Ứng dụng WebKit.
Hỗ trợ lập trình
trên Java
Chương trình viết trên nền Java nên được biên dịch trên
máy ảo Dalvik.
Truyền thông Audio/video: H.263, H.264, MPEG-4 SP, AMR, AMR-WB,
AAC, HE-AAC, MP3, MIDI, OGG Vorbis, WAV, JPEG,
PNG, GIF, BMP…
Hỗ trợ phần
cứng cộng thêm
Camera, màn hình chạm, GPS, gia tốc kế, từ kế.
Môi trƣờng phát
triển
Eclipse có plugin trên Android bao gồm máy ảo, ADT,
DDMS, và nhiều công cụ hỗ trợ khác.
Thị trƣờng ứng
dụng
Android Market với 20.000 ứng dụng gồm 62.3% là ứng
dụng miễn phí.
14
Đa chạm Android hỗ trợ đa chạm nhưng trong một số dòng smart
phone sẽ khóa đi vì thuộc bản quyền của Apple.
Bảng - Bảng thống kê các tính năng của Android (theo wiki.com)
Theo thời gian, Android đã dần trưởng thành rõ rệt về các tính năng cũng
như giao diện so với các hệ điều hành khác. Để thấy rõ hơn nữa sự khác nhau giữa
Android và các hệ điều hành khác trên nhiều khía cạnh, ta qua phần tiếp theo sẽ
thấy rõ hơn.
1.2.2 So sánh với các hệ điều hành khác
Ta có thể phân chia so sánh các hệ điều hành theo các tiêu chí sau:
Các thông số cơ bản gồm: Loại nhân, độ khả mở của nền tảng, doanh
nghiệp đối tác hỗ trợ đầu tiên và khả năng kết nối không dây.
Giao diện người dùng: ra hiệu trên màn hình, công nghệ màn hình, đa
cảm ứng, lớp bao giao diện, phương thức nhập liệu.
Tính năng chính: kiểu thông báo, công cụ quản lí danh bạ tương thích,
xử lí đa nhiệm, cắt dán, hỗ trợ đa phương tiện, tìm kiếm toàn cầu, cập nhật
firmware, trình duyệt, tethering và stereo bluetooth.
Khả năng hỗ trợ các nhà phát triển: SDK, kho ứng dụng, ứng dụng bổ
sung, ứng dụng ban đầu, khả năng quản lí ứng dụng trên thiết bị.
Từ bảng so sánh trong phần phụ lục E, ta thấy rằng Android nổi lên như là
một hệ điều hành nhiều tiềm năng so với các hệ điều hành còn lại. Có thể nói xét về
độ phổ biến hệ điều hành thì theo dự báo đã nói ở trên là Android sẽ đứng sau
Symbian trong năm 2013, nhưng nếu xét về mặt ưa thích trong các dòng smart
phone thì hệ điều hành Android sẽ còn đi một bước dài để đẩy lùi iPhone và tiến lên
vị trí dẫn đầu do chưa có smart phone nào đủ “bom tấn” để hạ gục được iPhone với
hệ điều hành iPhone OS như hiện nay. Mặc dù, Google mới đây, 05/01/2010, đưa ra
Nexus One với nhiều cải tiến vượt bậc nhưng nó hưa hẳn là kẻ hủy diệt iPhone. Hy
vọng trong thời gian sắp tới sẽ có nhiều smart phone dùng Android có những tính
15
năng vượt bậc về phần cứng cũng như kiểu dáng để có thể sánh cùng với iPhone
hiện nay.
Trong mục 1.2.2 là sự so sánh giữa Android và các hệ điều hành khác cùng
với nhận định là chưa thật sự có dòng smart phone nào đủ để chiếm lĩnh sự yêu
thích của người dùng. Đó là khía cạnh của Android đối với người dùng cuối. Còn
đối với những nhà phát triển phần mềm thì còn nhiều vấn đề cần đề cập tới. Tiếp
theo đi vào phân tích những thuận lợi và khó khăn mà các nhà phát triển gặp phải
khi lập trình trên Android.
1.2.3 Những thuận lợi và khó khăn của Android đối với nhà phát triển
Thuận lợi và khó khăn thì khá nhiều xét trên khía cạnh của nhà phát triển.
Trước tiên, thì khó khăn có vẻ chiếm ưu thế nhiều hơn nhưng trong tương lai khi
mà Android ngày càng được chấp nhận hơn thì chắc chắn những khó khăn đó sẽ
được cộng đồng các nhà phát triển cải thiện lại làm cho việc lập trình trên Android
sẽ gần gũi với nhiều nhà phát triển hơn.
Khía cạnh Kết
quả
Chú thích
Môi trƣờng
lập trình
Eclipse Có thể chạy được trên hầu hết trên các hệ điều hành
Windows, Macintosh và Linux.
Ngôn ngữ
lập trình
Java Giống ngôn ngữ C, cho nên dễ dàng cho các nhà phát triển,
nhất là nhà phát triển Java trên J2ME.
Tốc độ
chạy của
máy ảo
Khá
chậm
Đây là vấn đề mà hầu hết các nhà phát triển than phiền về
máy ảo Android. Nếu Google cải thiện được việc này thì sẽ
được đón nhận nhiều hơn từ các lập trình viên.
Hỗ trợ
debug
Có
nhưng
yếu
Khả năng hỗ trợ debug còn yếu vì đôi khi mất kết nối với
máy ảo hay máy ảo khởi động không chạy, và đương nhiên
là tốc độ debug thì cực chậm.
Lập trình
giao diện
Dùng
XML
Android hỗ trợ công cụ lập trình giao diện nhưng thật chất
các tập tin thuộc nền tảng XML. Nên những nhà phát triển
16
sẽ gặp khó khăn khi tiếp cận nhưng nó dễ dàng được hiệu
chỉnh tùy ý theo nhà phát triển do cơ chế xử lí giao diện
XML.
Tài liệu
hƣớng dẫn
Có trên
develo
per.An
droid.c
om
Nội dung phong phú có chia theo từng đối tượng, từng cụm
nhưng một vài chỗ chưa có ví dụ mã lệnh theo từng mục và
tất cả các ví dụ để chung vào APIDemo gây ra không ít
khó khăn cho các lập trình viên khi mới bắt đầu.
Bảng - Bảng phân tích khía cạnh Android đối với nhà phát triển
Thuận lợi và khó khăn của Android đối với nhà phát triển thì còn khá nhiều
khía cạnh và tùy thuộc vào nhiều yếu tố khác nhưng không vì thế mà tầm quan
trọng và khả năng phát triển của Android bị ảnh hưởng. Như đã trích dẫn các tin
phía trên, Android sẽ là hệ điều hành sáng giá và vững mạnh trong một vài năm tới.
Tiếp theo, ta tóm lược lại tần quan trọng và khả năng phát triển của Android trên
toàn thế giới và tại Việt Nam.
1.2.4 Tầm quan trọng và khả năng phát triển của Android trên thế giới
và Việt Nam
Không gì bàn cãi, trên thị trường thế giới Android dần dần sẽ tiến tới gần với
iPhone và trở thành dòng smart phone được ưa thích nhất vì hiện tại Android chỉ
thua iPhone trong thị trường smart phone. Với 250% là con số thể hiện mức tăng
của nhu cầu sử dụng các smart phone có hệ điều hành Android là con số biết nói để
thể hiện rằng Android sẽ vươn cao trong các dòng hệ điều hành smart phone hiện
tại.
Có rất nhiều diễn đàn, bài báo, blog nói về Android trên toàn thế giới như về
tin công nghệ, hướng dẫn sử dụng, giải đáp thắc mắc cho các nhà lập trình nhưng tất
cả đều mang tính chất nhỏ lẻ. Duy chỉ có một vài diễn đàn tương đối đông đúc hỗ
trợ người lập trình Android có thể kể đến kênh chính thức của Google như
stackoverflow, google group và rất nhiều kênh không chính thức như anddev.com,
phanAndroid.com…
17
Ở Việt Nam thì khá còn yên ắng với Android nhưng hiện nay một số công ty
lớn như FPT Software đã bắt đầu tuyển dụng người để tập hợp một đội chuyên trách
về các phần mềm Android trong công ty họ. Vào thời điểm cuốn khóa luận này báo
cáo thì FPT Software đã tuyên bố cần tuyển 50 nhà lập trình Android cho các dự án
liên kết với tập đoàn HTC.
Ở trường đại học KHTN Tp.HCM thì Android đã được tìm hiểu và viết ứng
dụng trong các khóa luận năm 2008 và năm 2009. Các nhóm đã tìm hiểu và viết
ứng dụng khá tốt nhưng tài liệu hướng dẫn về Android từ cơ bản đến nâng cao cũng
như các kinh nghiệm khi lập trình Android thì chưa có. Cho nên trong khóa luận
này muốn đưa ra phạm vi tìm hiểu Android toàn diện nhất cho các bạn không biết gì
về Android chỉ cần có một chút kiến thức về Java là có thể tiếp cận và lập trình
Android một cách nhanh nhất. Tiếp theo, chúng ta qua phần nêu lên phạm vi của
cuốn khóa luận này.
1.3 Phạm vi khóa luận
1.3.1 Tìm hiểu hệ điều hành Android
Trong các cuốn khóa luận trong các năm trước, các nhóm đã làm rất tốt các
ứng dụng trên Android nhưng chưa đưa ra một hướng dẫn chi tiết cụ thể về Android
cho người mới bắt đầu cho đến người đã tìm hiểu kĩ về Android. Mặc dù các tài liệu
hướng dẫn Android có khá nhiều trên thế giới nhưng hầu hết bằng tiếng Anh và
phần nào các tài liệu này viết cho Android 1.5 trở về trước nên chưa có những cập
nhật bổ sung cho các hệ điều hành Android mới sau này. Điều đó gây không ít khó
khăn cho các lập trình viên nào muốn tìm hiểu Android mà vốn tiếng Anh bị hạn
hẹp cũng như cập nhật những tính năng mới trên Android mà các cuốn ấy chưa cập
nhật.
Với những sự tóm lược lập trình Android từ cơ bản đến nâng cao cho các bạn
sinh viên khóa sau có thể tham khảo. Các mục chia theo từng chủ đề, với các đoạn
mã ví dụ minh họa mô tả ngay phía bên dưới những phương thức được trình bày.
18
1.3.2 Ứng dụng minh họa
Ứng dụng minh họa chính viết trên Android và được cài trên điện thoại di
động dùng Android mà điển hình là HTC Hero của tập đoàn HTC. Ứng dụng có tên
là eSaleShopping gồm các chức năng cơ bản như đã nêu trong phần 1.1.3.
Trong chương trình eSaleShopping này nhóm muốn ứng dụng các kiến thức
đã học như mô hình 3 lớp, 3 tầng, các kĩ thuật xử lí webservice để cho server và
client hiểu nhau, các kĩ thuật đã tìm hiểu từ Android và kiến thức cơ sở dữ liệu đã
học với mô hình như sau:
INTERNET
GooglMap
Service
Điểm Truy Cập
WiFi
Trạm Thu
Phát Song
Điện Thoại
Di Động
Nhân Viên
Nhập Liệu
Siêu Thị
Vệ Tinh
Trung Tâm Quản Lý
Trạm Thu Phát Sóng Webservice
Dữ Liệu
Trang Web Giao Tiếp Giữa
Webservice Và Người Dùng
Hình - Mô hình ứng dụng eSaleShopping
Hệ thống chương trình eSaleShopping gồm các thành phần sau:
Webservice: Chứa các chức năng quản lý thông tin gồm cơ sở dữ liệu
SQL Server 2005 chứa đầy đủ các store procedure, trigger, View và các hàm
truy vấn và quản lý cơ sở dữ liệu viết trên nền ASP.net bằng C#. Chúng tôi
đã xây dựng chúng bằng mô hình 3 tầng – 3 lớp và có phân tích cơ sở dữ liệu
từ bộ dữ liệu thực tế mà chúng tôi đã thu thập từ hầu hết các siêu thị và trung
tâm điện máy hiện có trên địa bàn thành phố Hồ Chí Minh như Metro Carry
& Cash, hệ thống CoopMart, hệ thống BigC, Trung tâm Điện máy Nguyễn
Kim, Thiên Hòa, Ideas, Hoàn Long Computer, Phong Vũ. Ngoài ra, do điện
19
thoại không có cơ chế Session giống như trang web ASP.net nên liên kết
giữa webservice và điện thoại thuộc dạng Disconnect dẫn đến điều kiện tìm
kiếm mà điện thoại gửi lên từ ban đầu sẽ mất đi sau mỗi phiên làm việc. Cuối
cùng, chúng tôi đã đưa ra cách giúp webservice giữ lại được tiêu chí tìm
kiếm đó và tiếp tục trả kết quả còn lại về điện thoại Android. Phần này sẽ
được trình bày rõ hơn trong chương 05 - Viết ứng dụng thực tế.
Website: là giao diện giao tiếp giữa Siêu Thị -Webservice và Admin-
Webservice. Được xây dựng trên nền ASP.NET, nó được hiểu như là một
cổng thông giữa người dùng và webservice.
Client (Dùng Android): tra cứu các thông tin hàng hóa, bản đồ, lưu trữ
các mặt hàng ưa thích và cần mua. Phần này được xây dựng hoàn toàn trên
Android. Nó bao gồm bộ các lớp giúp tổ chức, xử lí để lấy và chuyển dữ liệu
giữa điện thoại dùng Android và webservice; để truy vấn và thao tác lên dữ
liệu cục bộ trong Android trên SQLite. Ngoài ra, còn các chức năng thao tác
lên phần cứng của di động, các mục xử lí giao diện sao cho phù hợp với
người dùng trên điện thoại.
1.4 Mục tiêu khóa luận
Mục tiêu đầu tiên của khóa luận là giúp các đối tượng mới bắt đầu tìm hiểu
Android có thể nắm bắt ngay được những bước cần thiết đầu tiên để lập trình
Android. Tiếp đó là tìm hiểu các thành phần kiến thức cơ bản về giao diện và các
phương thức xử lí được hỗ trợ để từng bước đi sâu vào các kĩ thuật lập trình một
ứng dụng thực tế phục vụ cho nhu cầu của các bạn trong thực tế.
Mục tiêu thứ hai của khóa luận là chia sẽ các kinh nghiệm lập trình và cách
áp dụng các kiến thức đã học vào ứng dụng. Trong khi viết ứng dụng thực tế chúng
tôi đã gặp những vấn đề khó khăn và đã đưa ra các giải pháp thỏa đáng theo từng
trường hợp để giải quyết vấn đề. Các giải pháp đó được giải quyết dựa trên các kiến
thức liên quan đến kiến thức cơ sở dữ liệu, kiến trúc mô hình 3 tầng- 3 lớp, và các
kỹ năng giải quyết vấn đề để đảm bảo chương trình chạy đúng như dự kiến ban đầu.
Nói chung, chúng tôi đã kết hợp kiến thức lý thuyết cơ bản đã học từ các Thầy Cô,
20
kiến thức lập trình Android mới vừa tìm hiểu và một chút kỹ thuật để hoàn tất
chương trình ứng dụng thực tế của khóa luận. Trong quá trình làm việc chúng tôi
thu nhặt được một số kinh nghiệm khi làm Android cũng như giải quyết vấn đề và
trong cuốn báo cáo này chúng tôi muốn chia sẻ những kinh nghiệm ấy cho các đối
tượng muốn tìm hiểu Android trong xuốn khóa luận này và phần phụ lục.
Như đã đề cập trong mục 1.1.3 thì chương trình có thể như là một cầu nối
giữa người tiêu dùng và các nhà bán lẻ sản phẩm. Nó tạo ra cơ hội cũng như thách
thức cho các nhà bán lẻ để nâng cao chất lượng phục vụ của mình và ngày càng gần
gũi với người tiêu dùng nhiều hơn ở mục lúc mọi nơi. Khi chương trình đi vào thực
tế để giúp các người từ xa đến thành phố Hồ Chí Minh hay người tại nơi đây mua
mặt hàng với giá cả phải chăng và tiết kiệm nhất về mặt thời gian, chi phí . Đây là
mục tiêu cuối cùng của cuốn khóa luận này.
1.5 Tổ chức khóa luận
Nội dung của luận văn gồm những chương sau:
Chương 1. Mở đầu: Trình bày ngữ cảnh đề tài và tìm hiểu sơ lược hệ điều
hành Android nhằm đưa ra phạm vi và mục tiêu của khóa luận.
Chương 2. Khái quát về Android và từng bước làm quen với Android: Giới
thiệu kiến thức cơ bản về Android; sau đó, hướng dẫn từng bước cụ thể để tạo
project Android đầu tay. Cuối cùng là làm quen với cấu trúc project Android và
trạng thái từng thành phần ứng dụng Android.
Chương 3. Lập trình giao diện trên Android: Giới thiệu vấn đề và khái
niệm cơ bản của lập trình giao diện. Sau đó, giới thiệu lập trình giao diện đơn giản
qua từng dạng Layout và widget. Cuối cùng là các chú ý khi lập trình giao diện.
Chương 4. Lập trình theo từng chủ đề: Giới thiệu và hướng dẫn sơ bộ về
lập trình qua từng chủ đề với project mẫu như lập trình với Adapter, Media,
telephony, Luồng, thực đơn, kiểu chữ, khung thoại, nhập xuất tập tin, MapView,
Webkit và các widget khác. Thông qua đó, chúng tôi giới thiệu tổng quan các kĩ
thuật có liên quan tới ứng dụng minh họa của chúng tôi.
21
Chương 5. Viết chương trình ứng dụng và các giải pháp cho các chức
năng ứng dụng: Chúng ta vào phần phát biểu bài toán và giới thiệu kiến trúc của hệ
thống. Sau đó, chúng ta đi qua sơ đồ lớp hệ thống và các và sơ đồ các màn hình trên
Client. Tiếp đến là nêu ra chức năng chi tiết cùng với giải pháp cho từng chức năng
đó. Cuối vùng là cài đặt, thử nghiệm và so sánh với các chương trình tương tự khác.
Chương 6.Tổng kết: Các kết quả đạt được và các khả năng phát triển.
: giới thiệu
sơ nét Android
nêu lên giới thiệu . Các
Android và từng bước tiếp cận để có
thể lập trình trên Android nhanh nhất.
22
Chương 2 Khái quát về Andoid và từng bước làm quen
với Android
Trong chương này, đầu tiên chúng tôi giới thiệu sơ lược về Android. Sau
đó, chúng tôi giới thiệu và hướng dẫn từng bước thiết lập cơ bản để có thể lập trình
Android trên Eclipse. Kế tiếp là tạo ứng dụng minh họa để thông qua đó ta làm
quen với môi trường phát triển phần mềm Android trên Eclipse, với cấu trúc project
Android và với vòng đời các thành phần trong ứng dụng Android. Cuối cùng, chúng
ta sẽ làm quen với các công cụ hỗ trợ sẵn có của Android SDK. Chú ý thêm là trong
cả chương này, tất cả các phần lý thuyết và thực hành được trình bày trong phụ lục
G với project mẫu có trong CD đi kèm cuốn khóa luận này.
2.1 Giới thiệu sơ lược về Android
2.1.1 Định nghĩa Android
Android là nền tảng phần mềm do Google và Hiệp hội thiết bị cầm tay mở
(OHA) sáng lập ra. Đây là hệ điều hành được mong đợi làm cuộc cách mạng trong
thị trường smart phone toàn cầu.
Android bao gồm một bộ các thành phần phần mềm hoàn chỉnh cho thiết bị
di động như: một hệ điều hành, phần trình điều khiển thiết bị và ứng dụng di động
đi kèm.
23
2.1.2 Kiến trúc Android
Hình - Kiến trúc của Android
Chúng ta nhấn mạnh rằng Android là môi trường phát triển phần mềm được
xây dựng cho thiết bị di động. Nó không là nền tảng phần cứng.
Android gồm các thành phần sau:
Tầng ứng dụng (Applications): chứa các ứng dụng chính của hệ điều
hành Android. Ví dụ như trình gọi điện thoại, gửi tin nhắn, duyệt web, …
Tầng khung ứng dụng (Application Framework): chứa các trình
quản lí để quản lí nguồn tài nguyên ứng dụng, quản lí vị trí, quản lí điện
thoại, quản lí package, quản lý Activity, quản lý windows, … Có thể hiểu
đây là tầng trung gian giữa tầng ứng dụng chính và bộ thư viện chính của
Android.
Bộ thư viện Android (Libraries): chứa các bộ thư viện được xây dựng
từ nhân Linux dành riêng cho các thiết bị có bộ nhớ thấp như các thiết bị
điện thoại di động.
24
Tầng Android Runtime: chứa thư viện chính và máy ảo Dalvik để
chạy nhiều ứng dụng cùng một lúc.
Tầng lõi Linux: có thể xem đây là tầng trình điều khiển thiết bị giữa
các phần cứng trên các thiết bị di động và phần thư viện Android.
2.1.3 Các thành phần phần cứng, phần mềm Android hỗ trợ
Khung ứng dụng (Apllication framework): tái sử dụng lại các ứng dụng.
Máy ảo Dalvik (Dalvik Virtual Machine): được tinh chỉnh dành riêng cho
thiết bị di động chạy trên nền Android.
Trình duyệt tích hợp: dựa trên hệ thống Webkit.
Đồ họa đã được tối ưu: gồm thư viện đồ họa 2D và thư viện đồ họa 3D trên
nền OpenGL ES (tùy thuộc vào phần cứng thiết bị).
Hỗ trợ media: hỗ trợ các định dạng tập tin âm thanh, video và hình ảnh như
MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF.
Hỗ trợ điện thoại sử dụng băng tần GSM, CDMA, HSDPA, UTMA (tùy theo
phần cứng thiết bị).
Bluetooth, EDGE, 3G và Wifi (tùy thuộc vào phần cứng thiết bị).
Camera, GPS, la bàn số, gia tốc kế (tùy thuộc vào phần cứng thiết bị)
Môi trường phát triển đầy đủ: gồm máy ảo, công cụ debug, quản lí bộ nhớ
và tốc độ thực thi, và plugin cho Eclipse. Xem phụ lục G để rõ hơn.
Trong phần này, chúng ta đã tìm hiểu kiến thức nền tảng về Android, qua
phần sau chúng ta tìm hiểu các bước thiết lập cơ bản cho JDK, Eclipse, ADT,
Android SDK và thiết bị Android ảo.
2.2 Từng bước thiết lập cơ bản để lập trình Android và trách
nhiệm từng thành phần.
Trong phần này, chúng tôi hướng dẫn cài đặt Android hoàn chỉnh qua từng
bước và ý nghĩa các thành phần trong từng bước ấy.
Android là hệ điều hành chạy trên nền tảng Java nên trước tiên ta phải có
Java SE Development Kit (JDK) chạy trên máy trạm (như PC hay laptop). Kế đến
25
ta cần một môi trường phát triển phần mềm để phát triển ứng dụng. Google khuyến
cáo dùng Eclipse để có sự hỗ trợ tối đa từ các công cụ hỗ trợ lập trình của Android.
Google cung cấp một số công cụ để hỗ trợ phát triển ứng dụng trên Eclipse giúp rút
ngắn thời gian cũng như làm cho việc lập trình tiện dụng hơn trên Eclipse. Các công
cụ này gọi tắt là Android Development Tools (ADT) là một phần trong Android
SDK. Nó giúp Eclipse và Android SDK liên kết với nhau và cập nhật những nền
tảng Android mới cho Android SDK từ Google thông qua Eclipse.
Chúng tôi tạm chia ra làm 5 bước cài đặt cơ bản để có thể phát triển ứng
dụng Android. Các bạn có thể tham khảo chi tiết thêm trong phụ lục G.2. Sau đây,
chúng tôi trình bày theo từng bước:
2.2.1 Bước 1: Cài đặt Java SE (JDK)
Ta vào liên kết sau http://Java.sun.com/Javase/downloads/widget/jdk6.jsp.
Sau đó tải về bản JDK mới nhất và cài đặt trên máy trạm của bạn.
2.2.2 Bước 2: Tải về môi trường phát triển phần mềm Eclipse
Ta vào đường liên kết sau: http://www.eclipse.org/downloads/ và tải về bản
Eclipse mới nhất.
Tập tin tải về là tập tin dạng nén nên không cần cài đặt và ta có thể chạy trên
tập tin Eclipse.exe trong thư mục mới vừa giải nén. Chú ý, đối với một số hệ điều
hành nên chạy eclipse.exe với quyền Administrator để có quyền thực thi tối đa.
2.2.3 Bước 3: Thiết lập plugin ADT
Plugin ADT gồm các công cụ hỗ trợ lập trình Android, nó nằm trong bộ
Android SDK nhưng nó như là plugin “mồi” giúp cho Eclipse tải về nền tảng cho
Android SDK.
Ta mở Eclipse lên, vào Help/ Install New Software… Có 2 cách để thiết lập
ADT:
26
Cách 1: Cài đặt plugin ADT thông qua thư mục trên máy chủ Google.
Chọn Add/ Nhập vào địa chỉ http://dl-ssl.google.com/Android/eclipse/ vào
mục Location của hộp thoại Add Site và nhập tên tùy thích vào mục Name.
Hình - Cài đặt plugin ADT thông qua thƣ mục trên máy chủ Google
Chọn OK ta sẽ quay lại hộp thoại Install:
Hình - Màn hình chọn lựa các công cụ Android
Nhấn Next thì chương trình tiếp tục tải về plugin DDMS và ADT
cho Eclipse. Khởi động lại Eclipse.
Cách 2: Cài đặt plugin ADT thông qua tập tin .zip. Tải về tập tin
ADT-0.9.5.zip từ đường liên kết http://dl.google.com/Android/ADT-
27
0.9.5.zip. Cũng với hộp thoại Install ta nhấn nút Add. Chọn nút Archive...
trên hộp thoại Add Site và chọn tập tin ADT-0.9.5.zip mới vừa tải về.
Hình - Màn hình thiết lập ADT bằng tập tin Zip
Nhấn OK và quay ra các hộp thoại ngoài. Khởi động lại Eclipse.
Với cả 2 cách trên, nếu thiết lập thành công thì trên thực đơn Windows của
Eclipse có thêm trình đơn Android SDK and AVD Manager.
2.2.4 Bước 4: Thiết lập Android SDK cho Eclipse
Đầu tiên, vào trang web developer.Android.com để tải về bản Android SDK
theo như sự hướng dẫn của phụ lục G.2.1.5. Tiếp theo ta vào Windows/ Preferences
để thiết lập đường dẫn tới Android SDK. Nhấn nút Browse để chọn thư mục
\Android-sdk-windows.
Sau đó, vào thực đơn Windows/ Android SDK and AVD Manager/ Chọn
mục Available Packages thì ngay bên phải hộp thoại sẽ xuất hiện tất cả các mục cần
được tải về như hệ điều hành Android theo từng phiên bản, tài liệu hướng dẫn, công
cụ SDK,… Tốt nhất là ta chọn hết và nhấn nút Install Selected để tiến hành cài đặt
hết tất cả phần đã chọn (Lưu ý: Phải có đường truyền Internet ổn định khi tiến hành
cập nhật)
2.2.5 Bước 5: Cài đặt máy ảo
Sau khi đã thiết lập cho Android SDK xong, ta tiến hành cài đặt các máy ảo
với những hệ điều hành tương ứng như hướng dẫn phụ lục G.2.2.4
Như vậy, ta đã đủ những điều kiện cơ bản để tiến hành phát triển ứng dụng
trên máy trạm với:
JDK: nền tảng Java để phát triển ứng dụng.
28
Eclipse: do Google khuyến khích dùng làm môi trường phát triển
phần mềm cho Android.
ADT: là công cụ hỗ trợ lập trình Android trên Eclipse.
Android SDK: bộ nền cơ bản để phát triển ứng dụng Android.
Có thể nói ADT là mắt xích hay là “mồi” để nối giữa Android SDK
và Eclipse với nhau.
Mọi thông tin muốn hiểu rõ hơn đọc ở phần phụ lục G.
Ta vừa tìm hiểu các bước cài đặt cơ bản để lập trình Android. Qua phần sau,
chúng ta tạo ứng dụng Android “đầu tay” trên Eclipse theo từng bước để chúng ta
dễ dàng nắm bắt.
2.3 Làm quen với Android project trên môi trường Eclipse
2.3.1 Tạo ứng dụng NhatTrungHelloAndoid
Ta tham khảo sơ kịch bản cho ứng dụng đầu tay này. Ta sẽ viết chương trình
gồm có một ô nhập liệu và nút nhấn; khi nhấn nút nhấn thì sẽ có khung thoại hiện
giá trị chuỗi của ô nhập liệu đó. Ta sẽ trải qua các bước sau:
Bƣớc 1: Tạo Project mới
File/ New/ Android Project. Nhập vào các thông tin như hình đã nhập. Chọn
Finish để hoàn tất việc tạo project Android mới.
29
Hình - Màn hình thiết lập thông tin cho project Android
Bƣớc 2: Lập trình giao diện
Trong phần hướng dẫn trong phụ lục G.3.1.2 hướng dẫn ta từng bước để thiết
lập giao diện như kịch bản đề ra. Ở đây, các bạn không quan tâm tại sao nó phải thế
này hay thế kia mà làm theo từng bước để dần làm quen với nó. Trong các mục sau
và chương sau trong phần báo cáo chính cũng như phụ lục, chúng tôi sẽ trình bày rõ
hơn về cách dùng từng thành phần trong mục lập trình giao diện.
Ta từng bước thiết kế màn hình giao diện theo sự chỉ dẫn của phụ lục G.3.1.2
để đạt được giao diện cuối cùng như sau:
30
Hình - Màn hình giao diện của ứng dụng NhatTrungHelloAndroid đƣợc thiết kế trên Eclipse
Bƣớc 3: Lập trình xử lí
Trên màn hình giao diện có 3 đối tượng nhưng chỉ có 2 đối tượng ta cần thao
tác cho nên ta sẽ khai báo 2 thực thể để quản lí chúng. Bạn làm theo từng bước như
trên phụ lục G.3.1.3 để hoàn tất phần xử lí. Chú ý nếu dùng tiếng Việt trong các mã
lệnh Java khi lập trình thì phải chỉnh thuộc tính mã hóa chuỗi của project như đã
hướng dẫn trong mục G.3.1.3.
Khi hoàn tất 3 bước, ta nhấp chọn nút phải vào tên project và chọn Run As/ 1
Android Application. Trong khi máy ảo và chương trình đang chạy thì bạn không
nên thao tác trên bất cứ nút nhấn hay màn hình máy ảo và theo sự hướng dẫn của
phần phụ lục thì ta sẽ được kết quả như sau:
31
Hình - Giao diện máy ảo Android với giao diện ứng dụng đầu tay
Đây là máy ảo cùng với chương trình với kết quả khi bạn nhấn chọn nút
Chào Android.
Ta vừa tạo ứng dụng Android đầu tay, tiếp theo ta làm quen với các khung
nhìn Eclipse qua ứng dụng Android.
2.3.2 Làm quen với khung nhìn Eclipse qua ứng dụng Android
Eclipse có 3 loại khung nhìn Java, Debug và DDMS khi thiết lập ADT cho
nó; trong đó, Java và Debug là hai khung nhìn có sẵn trong Eclipse. Với mỗi khung
nhìn có những chức năng hỗ trợ riêng cho các nhà lập trình và mỗi khung nhìn được
kích hoạt với 3 nút nhấn bên phải trên của màn hình giao diện Eclipse. Mỗi khung
nhìn có một chức năng riêng và nêu chi tiết trong phần phụ lục G.4 của cuốn khóa
luận này:
Khung nhìn Java:
32
Hình - Màn hình Eclipse với khung nhìn Java
Khung nhìn Java gồm 3 thành phần chính: Package Explorer (bên
trái màn hình), Outline (bên phải dưới màn hình) và phần thao tác lập
trình lên tập tin .java và .xml (chính giữa màn hình).
Từng thành phần chính trong khung nhìn Java được nêu rõ trong
phần phụ lục G.4.1.
Khung nhìn DDMS: cho ta thao tác lên các thiết bị Android hiện đang
kết nối với Eclipse, hệ thống quản lí tập tin của máy ảo tương ứng, và trình
giả lập thông tin tổng đài, thông tin định vị vị trí, …
Trong khung nhìn này, có Device cho ta chọn thiết bị Android
hiện đang kết nối tới Eclipse. Hơn thế nữa, nó cho ta thấy hiện có bao
nhiêu tiến trình hiện đang chạy trên thiết bị Android. Như bạn có thể nhìn
rõ hơn ở phụ lục F.4.2.2 là mỗi chương trình có trên thiết bị là một dòng.
Emulator Control cho phép thao tác giả lập tổng đài như gọi điện,
gửi tin nhắn vào máy ảo hay giả lập thông tin vị trí GPS, …
File Explorer cho bạn thao tác thêm, xóa, sao chép các tập tin trên
thiết bị Android.
33
Hình - Màn hình Eclipse với khung nhìn DDMS
Khung nhìn Debug: cho ta kiểm lỗi chương trình gồm các nhóm thành
phần hỗ trợ như khung xem các luồng hiện đang chạy, khung xem giá trị các
biến muốn theo dõi, khung xem thể hiện là đang kiểm lỗi tới đâu, và khung
xem thông tin Logcat thể hiện nhật kí kiểm lỗi của ứng dụng.
Hình - Màn hình Eclipse với khung nhìn Debug
34
Có nhiều phần là thế nhưng khi dùng thật sự thì theo chúng tôi chỉ
thường xuyên dùng tính năng kiểm lỗi chính như Resume(F8), Step
Into(F5), Step Over(F6), Step Return(F7) và thêm - quan sát giá trị những
biến cần được quan tâm trong thẻ Expression nằm bên phải – trên của
màn hình.
Thế là ta đã làm quen với các khung nhìn Java, DDMS và Debug ứng với
một project Android trên Eclipse. Sau đây, ta sẽ làm quen với cấu trúc project
Android.
2.4 Làm quen với cấu trúc project Android trên Eclipse và trên bộ
nhớ ngoài
Nói chung, cấu trúc project trên Eclipse và trên bộ nhớ ngoài không khác
nhau là mấy và chỉ có vài điểm có thể hiện khác nhau.
Hình - Cấu trúc project Android trên bộ nhớ ngoài
35
Hình - Cấu trúc project Android trên Eclipse
Cấu trúc project trên Eclipse là sự thể hiện lại trên bộ nhớ nhưng đã phân
chia các Package theo hướng dễ dàng thao tác hơn cho các nhà lập trình. Phần này
đã được nói rõ trong phần phụ lục G.3.2. Ở đây, ta cần chú ý đến một vài điểm khác
biệt chính là cấu trúc trên Eclipse có bộ .jar. Đây là bộ thư viện của Google hỗ trợ
cho Android. Ngoài ra có thể dùng thêm các thư viện khác nếu cần:
Hình - Ví dụ các tập tin tham chiếu trong thƣ mục Referenced Library của project Android
Ta chú ý cấu trúc trên bộ nhớ có tập tin .apk trong thư mục /bin chứa các tài
nguyên và các tập tin thiết lập và cài đặt ứng dụng. Ta có thể xem nội dung các
thành phần trong tập tin .apk bằng WinRar. Bạn để ý thấy rằng, trong tập tin .apk
gồm tập tin .dex (do tất cả mã lệnh của tập tin .java được biên dịch thành), thư mục
36
/res (chứa tất cả tài nguyên có trong project) và AndroidManifest.xml. Tất cả các
chuỗi có trong tập tin XML sẽ được chuyển thành dạng nhị phân cho nên ta sẽ
không đọc được chúng. Qui trình biên dịch một project Android thành tập tin .apk
được thể hiện ở hình 2.14:
Hình - Hình mô tả qui trình biên dịch thành tập tin .apk
Trong mục 2.4, ta đã tìm hiểu cấu trúc project Android dựa trên tổ chức các
tập tin trên Eclipse và bộ nhớ. Trong phần tiếp theo, ta tìm hiểu vòng đời ứng dụng
Android thông qua từng trạng thái.
2.5 Làm quen với vòng đời các thành phần ứng dụng Android
2.5.1 Các khái niệm cơ bản
Trước khi vào các khái niệm cơ bản, ta cần hiểu là project Android được
biên dịch thành tập tin .apk trong đó các mã lệnh Java được biên dịch cùng với dữ
liệu và các tài nguyên. Tập tin .apk này được cài đặt vào thiết bị Android và khi
chạy trên thiết bị Android thì nó được xem như là một ứng dụng hoàn chỉnh.
Android phân chia nhiều thành phần con khi ứng dụng chạy gồm Activity,
Service, Broadcast Receiver, Content Provider.
37
Activity nói nôm na là sự thể hiện một màn hình tương ứng với từng
Form trên C# và trong chương trình có nhiều Activity; vì thế, ta qui định
Activity chạy đầu tiên khi ứng dụng khởi động bằng cách thiết lập thuộc tính
<category Android:name="Android.intent.category.LAUNCHER"/> trong
tập tin AndroidManifest.xml. Ví dụ, các Activity trong ứng dụng là các cửa
sổ tương tác trực tiếp với người dùng.
Service khác với Activity, nó chạy ngầm trong một khoảng thời gian
không xác định và người dùng không nhìn thấy nó. Ví dụ, như phần nghe
nhạc “nền” trong khi bạn đang thao tác trên màn hình khác thì phần nghe
nhạc đó là Service.
Broadcast Receiver: là thành phần nhận và hồi đáp các thông báo. Các
thông báo bắt nguồn từ mã hệ thống như pin yếu hay có một ảnh vừa chụp,
… Broadcast Receiver không thể hiện được thông tin trên giao diện mà
chúng khởi động một Activity khác để hiển thị thông tin hay dùng
NotificationManager để thông báo cho người dùng.
Content Provider: cung cấp bộ dữ liệu ứng dụng này cho ứng dụng
khác trên Android.
Ngoài ra, còn những khái niệm cần biết sau: tác vụ (task), tiến trình và luồng.
Với task là ngăn xếp chứa các Activity; Tiến trình là nơi mà các thành phần
Android chạy; và luồng là nơi mà một nhóm các hành động chạy ngầm trong khi
người dùng thao tác trên màn hình. Các khái nhiệm này chúng tôi đã trình bày trong
phụ lục G.5; các bạn có thể tham khảo thêm.
Các mục tiếp theo ta sẽ bàn kĩ hơn về vòng đời của các thành phần của ứng
dụng – bắt đầu khi Android khởi động các thành phần và kết thúc khi thực thể ứng
dụng bị hủy đi. Trong những phần tiếp theo chúng tôi sẽ nói rõ về thành phần
Activity và vòng đời của nó.
38
2.5.2 Vòng đời của Activity
Hình - Vòng đời của Activity (Nguồn developer.Android.com)
Một Activity có 3 trạng thái: Đang chạy, tạm dừng và dừng hẳn. Khi chuyển
từ trạng thái này qua trạng thái khác thì nó sẽ gọi một trong các phương thức chồng
(override) sau: void onCreate(Bundle savedInstanceState), void onStart(), void
39
onRestart(), void onResume(), void onPause(), void onStop(), void onDestroy(). Tất
cả các phương thức này có thể viết lại để phù hợp với từng mục đích công việc cụ
thể của chương trình. Với ý nghĩa từng phương thức và cách sử dụng đã nêu rõ
trong phụ lục G.5.4.1. Chúng ta sẽ làm quen với các công cụ sẵn có của SDK ở mục
2.6.
2.6 Làm quen với công cụ hỗ trợ sẵn có của Android SDK
Android SDK hỗ trợ nhiều công cụ hỗ trợ lập trình Android (ADT) đắc lực
cho nhà lập trình và nó đóng vai trò trung gian giữa Eclipse và Android SDK. Ngoài
ra còn nhiều công cụ khác như sau:
ADT trên Eclipse: cho phép tạo và kiểm lỗi ứng dụng Android một
cách dễ dàng. Ví dụ như có thêm mục tạo Android project mới, có thêm mục
kiểm lỗi chương trình, …
DDMS: theo dõi các tiến trình hiện đang chạy trên thiết bị, giả lập
tổng đài điện thoại (cuộc gọi và SMS), giả lập vị trí (location), quản lý tập tin
trong điện thoại Android ảo…
Hierarchy Viewer: giúp kiểm lỗi và tối ưu giao diện.
Draw 9-patch: ứng dụng vẽ hình ảnh mà hình ảnh đó có những qui
định co giãn theo nội dung và độ phân giải sao cho nó phù hợp trên các màn
hình khác nhau.
Ngoài ra, còn nhiều công cụ khác chạy thực thi thông qua dòng lệnh như:
ADB (giúp cài đặt ứng dụng vào thiết bị máy ảo), layoutopt, aapt, sqlite3, dx,
android, zipalign. Tất cả được liệt kê và hướng dẫn trong phụ lục F.6.6.
Trong chương 2, ta lần lượt đi qua tổng quan giới thiệu Android và bước đầu
làm quen với ứng dụng Android qua Eclipse đồng thời tìm hiểu về vòng đời các
thành phần của ứng dụng. Trong chương tiếp theo, chúng ta đi sâu hơn về lập trình
giao diện với các khái niệm lập trình giao diện cơ bản.
40
Chương 3 Lập trình giao diện trên Android
Trong chương này, giới thiệu sơ lược về các vấn đề và khái niệm cơ bản
trong lập trình giao diện trên Android. Sau đó là giới thiệu các dạng giao diện
Layout và widget có trên Android. Cuối cùng là các vấn đề cần chú ý khi lập trình
giao diện trên Android.
3.1 Các vấn đề và khái niệm cơ bản của lập trình giao diện
3.1.1 Các từ khóa trong lập trình giao diện
Trong lập trình giao diện có một số từ khóa ta cần phải nhớ như sau:
View: là từ chỉ chung các đối tượng có trên giao diện của Android. Ví
dụ như các layout hay các widget.
Layout là các khung chứa dùng để chứa các widget và phân hoạch “đô
thị” cho giao diện.
Widget và Control là các đối tượng điều khiển tương tác trực tiếp với
người dùng như nhận các sự kiện mà người dùng tác động lên nó. Đồng thời
nó thường nằm trong Layout khi cần có sự kết hợp nhiều Widget với nhau.
Ví dụ như nút nhấn (Button), EditText, ... là một Widget.
Tiếp theo, chúng ta sẽ lướt qua hệ thống các đối tượng giao diện trên
Android dưới cái nhìn hướng đối tượng.
3.1.2 Tổng quát các View dưới cái nhìn hướng đối tượng
Trong phần phụ lục H.1.5 có hình ảnh liệt kê các lớp đối tượng giao diện
dưới hình thức kế thừa “Cha-Con”. Hình đó gồm các lớp đối tượng chính sau:
Lớp View: là lớp cơ sở nhất của xây dựng giao diện người dùng trên
Android.
Lớp ViewGroup: là một View đặc biệt có thể chứa các View khác và
là lớp cơ sở cho các khung chứa như các LinearLayout, TableLayout,...
41
Lớp View ở nút lá: là các widget tương tác trực tiếp với người dùng.
3.1.3 Giới thiệu bản chất lập trình giao diện trên Android
Trên Android, các tập tin qui định giao diện của ứng dụng được viết bằng
ngôn ngữ XML. Trong đó, gồm hai kiểu đối tượng là khung chứa (layout) và điều
khiển (widget) được qui định bằng các thẻ XML với những thuộc tính của nó.
Android xem tập tin giao diện XML là một dạng tài nguyên và được lưu trong thư
mục /res/layout.
Việc dùng XML để qui định giao diện cho ứng dụng trong Android có những
mặt mạnh yếu khác nhau tùy theo từng quan điểm. Trước tiên, ta thấy mặt mạnh
nhất của nó là làm cho tập tin qui định giao diện có kích thước rất nhẹ và tách giao
diện ra khỏi lập trình để ta dễ dàng quản lí hơn. Song bên cạnh đó, việc dùng XML
để qui định giao diện rất phức tạp và khó quản lí khi giao diện có nhiều đối tượng
kết hợp lại với nhau. Ví dụ như hình 3-1 chỉ có 3 đối tượng trên màn hình nhưng thể
hiện bằng XML thì rất phức tạp:
Hình - Giao diện ứng dụng NhatTrungHelloAndroid
Hình - Giao diện ứng dụng NhatTrungHelloAndroi đƣợc quy định bằng XML
42
Chính vì lập trình bằng XML cho giao diện thì rất phức tạp cho nên Android
cung cấp công cụ đi kèm trong việc hỗ trợ lập trình giao diện rất hữu ích là kéo thả
các đối tượng từ bảng và thêm trực tiếp qua nút lệnh của Outline. Phần này chúng
tôi sẽ trình bày trong phần tiếp theo 3.1.4. Ngoài ra, các bạn có thể tham khảo thêm
phần bản chất của lập trình giao diện trong phụ lục H.1.
3.1.4 Cách thức tạo giao diện và lập trình giao diện
Ngoài cách dùng XML để tạo giao diện như đã trình bày ở trên, ta còn có thể
tạo giao diện bằng mã lệnh Java. Như vậy, ta tạo giao diện bằng 2 cách: bằng XML
và bằng mã lệnh Java.
Đầu tiên, ta bắt đầu tìm hiểu cách thức tạo giao diện bằng XML. Trước tiên,
ta tạo một tập tin XML trong thư mục /res/layout. Chú ý tên tập tin giao diện không
có chữ in hoa mà chỉ chứa các kí tự trong nhóm kí tự a-z hoặc 0-9 hoặc dấu _ (Phần
này đã trình bày trong phụ lục G). Sau đó ta tiến hành thao tác lên tập tin giao diện
đó bằng cách kéo thả vào đối tượng từ Layout, Views hoặc dùng nút thêm, xóa, sửa
trên Outline. Cho dù kéo thả hay dùng nút lệnh Outline thì nó đều
tạo ra tập tin giao diện XML.
Tiếp theo, chúng tôi giới thiệu cách lập trình giao diện khác là bằng mã lệnh
Java. Cũng như C#, ta có thể tạo một đối tượng và dùng phương thức
this.Controls.Add để thêm đối tượng đó lên giao diện. Android cũng tương tự thế,
nó tạo ra các đối tượng khung chứa và các đối tượng điều khiển (widget) rồi kết hợp
chúng lại với nhau tạo thành giao diện cho ứng dụng mà không cần thông qua tạo
tập tin giao diện XML.
Cuối cùng, chúng ta tìm hiểu cách thức thao tác đối tượng bằng mã lệnh
Java. Giống như C#, khi chúng ta muốn thay đổi thuộc tính và bắt các sự kiện cho
các đối tượng trên giao diện thì trên tập tin giao diện ta phải có khai báo định danh
ID cho chúng và trên tập tin Java ta khai báo thực thể kiểu dữ liệu ứng với trên giao
diện và với định danh tương ứng. Ví dụ như mã lệnh như sau khai báo thực thể
EditText và gán cho nó một chuỗi "Phan Thành Trung – Võ Thành Nhật":
43
// Khai báo thực thể (instance) ánh xạ qua bên EditTextTenCuaBan trên
final EditText edtTextTenNguoiDung = (EditText)
findViewById(R.id.EditTextTenCuaBan);
edtTextTenNguoiDung.setText("Phan Thành Trung – Võ Thành Nhật");
Trong chương này, chúng ta tìm hiểu cách thức tạo giao diện và cách thao
tác trên các điều khiển của giao diện. Tiếp theo, chúng ta tìm hiểu hiểu các dạng
thuộc tính thường gặp trên các View.
3.1.5 Các thuộc tính thường gặp trên các View
Các View bao gồm cả Layout và Widget có nhiều thuộc tính qui định cho
riêng mình và sự tương quan của nó với các đối tượng xung quanh. Tùy theo từng
View mà sẽ có một trong các nhóm thuộc tính sau:
Nhóm thuộc tính nội tại của View: nhóm thuộc tính này qui định lên
các giá trị và thành phần bên trong View đó, nó không hoàn toàn ảnh hưởng
bởi thuộc tính các View bên ngoài.
Nhóm thuộc tính Misc: qui định sự tương quan giữa View hiện tại với
cha của nó.
Nhóm thuộc tính Deprecate: Qui định thuộc tính chuỗi thuộc đối
tượng (Nếu View này là đối tượng có chứa chuỗi trong đó).
Hình - Các thuộc tính thƣờng gặp trên một View
44
Trên là các thuộc tính thường gặp của các View. Thuộc kích kích thước có
rất nhiều như canh lề, canh độ lớn của chữ, ... Tất cả đều được qui định bởi đơn vị
kích thước do Android hỗ trợ ở mục 3.1.6 kế tiếp.
3.1.6 Các đơn vị tính trên giao diện
Android hỗ trợ nhiều đơn vị lựa chọn tùy thuộc vào nhu cầu nhà phát triển:
px (pixel): số lượng điểm ảnh trên màn hình.
In(inches): kích thước được tính bằng đơn vị inches
Mm (milimeters): kích thước được tính bằng đơn vị milimet
Pt (points): có kích thước 1/72 inch
Dp (density-independent pixels): đơn vị ảo dựa trên độ dày đặc của
màn hình. Trên màn hình có 160 điểm ảnh trên 1 inch thì 1dp=1px.
Dip: gần nghĩa giống dp, được dùng nhiều trong các ví dụ ứng dụ mẫu
của Google.
Sp (scale-independent pixels): tương tự như dp nhưng áp dụng cho
kích tước các font chữ.
Đơn vị tính pixel là đơn vị tính có vẻ là lâu đời nhất trên lập trình giao diện
ứng dụng. Nhưng nó tồn tại nhiều bất cập khi dùng làm đơn vị cho các điều khiển
trên giao diện. Ví dụ như, khi chạy giao diện trên màn hình có độ phân giải khác
nhau thì các điều khiển trên màn hình sẽ bị giãn nỡ làm mất đi sự cân xứng. Còn
trên điện thoại di động, vấn đề độ phân giải khác nhau tùy thuộc vào từng thiết bị là
chuyện thường xảy ra nên tìm giải pháp chung cho giao diện là cho dù màn hình có
kích thước và độ phân giải khác nhau thì nó vẫn có thể thể hiện giao diện đẹp và
cân xứng. Giải pháp ấy là dùng đơn vị Dip như trình bày ở trên. Nó giúp giao diện
có độ co giãn linh hoạt ứng với từng kích thước và độ phân giải màn hình.
Trong phần này, chúng ta đã tìm hiểu khái niệm và thành phần cơ bản trong
lập trình giao diện. Qua phần sau, chúng tôi trình trình bày rõ hơn về các tính chất
các layout và giới thiệu các điều khiển (widget) thường gặp.
45
3.2 Lập trình giao diện cơ bản
3.2.1 Các loại điều khiển chứa điều khiển khác (layout)
Có 5 loại Layout chính trên Android là Linearlayout, TableLayout,
FrameLayout, AbsoluteLayout và RelativeLayout.
Hình - Hình minh họa Linear Layout
Hình - Hình minh họa Table Layout
LinearLayout: là khung chứa mà các đối tượng trong nó được trình
bày tuyến tính theo qui định thuộc tính hướng Orientation là dọc hay ngang.
TableLayout: là khung chứa được thiết kế theo dạng bảng có nhiều
dòng và nhiều cột và mỗi ô có thể chứa một widget con hay chứa một layout
khác
Hình - Hình minh họa Frame Layout
Hình - Hình minh họa Absolute Layout
FrameLayout: là khung chứa được thiết kế dạng nhiều FrameLayout
(nhiều khung) xếp đè lên nhau để tạo thành một giao diện hoàn chỉnh. Với
46
FrameLayout ta cần chú ý khi kết hợp nhiều Frame lại với nhau. Khi đó, việc
canh chỉnh lề cho các đối tượng trên Frame để khi ráp lại với nhau thì chúng
không nằm đè lên nhau như hình trên.
AbsoluteLayout: là khung chứa mà các điều khiển được kéo vào sẽ
nằm “cứng nhắc” trên màn hình và các đối tượng con của nó không chịu sự
chi phối hay ảnh hưởng bởi các đối tượng khác. Như bạn thấy ở hình trên,
nút HelloButton thứ hai (từ trái qua) được kéo vào khi màn hình dạng
Landscape (dạng quay ngang). Nhưng khi để Portrait (dạng để đứng) thì nó
sẽ mất đi một phần. Đây là điểm bất lợi của AbsoluteLayout.
Relative Layout: là khung chứa mà các đối tượng bên trong nó được
qui định vị trí tương đối theo mối quan hệ láng giềng. Như hình bên dưới qui
định rằng EditText nằm bên dưới TextView Type here. Nút OK nằm bên
dưới EditText và nút Cancel nằm bên trái nút OK.
Hình - Hình minh họa Relative Layout
Tất cả các phần layout với ý nghĩa và cách thức khi lập trình được nêu chi
tiết trong phụ lục H.2.1. Để tạo nên UI hoàn chỉnh, ngoài layout ta còn cần quan
tâm thêm các điều khiển thông dụng như sẽ trình bày ở mục sau.
3.2.2 Các điều khiển thông dụng
Các điều khiển thông dụng trong lập trình giao diện là các nhóm:
Hiện chuỗi và nhập liệu: EditText, TextView, ...
Nhóm nút nhấn: Button, ImageButton, ToggleButton, CheckBox,
RadioButton, ...
47
Nhóm điều khiển đa phương tiện: RatingBar, Clock, ImageZoom,
ImageView, ProgressBar, SeekBar, …
Các điều khiển này được trình bày trong phần phụ lục H.2.2.
Ngoài ra, ta có thể tạo ra các widget đáp ứng từng nhu cầu theo từng hoàn
cảnh bằng cách tạo một lớp mới dẫn xuất từ trực từ lớp ViewGroup. Do các widget
được qui định bằng các lớp theo hướng đối tượng như trong các mục trên đã trình
bày. Cho nên, ta có thể thiết kế một đối tượng mới từ lớp cơ sở.
Trong ứng dụng minh họa, chúng tôi có tham khảo từ project Android-misc-
widget của tác giả pskink (http://code.google.com/p/android-misc-widgets/) có chỉ
tạo một widget cho ta chọn các giá trị tương đối đẹp như sau:
Hình - Hình widget tên là Switcher
Qua phần sau, chúng tôi đưa ra các kinh nghiệm của chúng tôi khi lập trình
giao diện với Android.
3.3 Các chú ý khi lập trình giao diện
Chúng tôi chia sẻ một số kinh nghiệm khi lập trình giao diện như sau:
Khi lập trình nên tạo khung giao diện trước và sau đó đưa các widget
vào. Nên chọn khung LinearLayout vì khi ứng dụng được cài đặt trên thiết bị
khác nhau thì nó sẽ không bị ảnh hưởng nhiều.
Dùng các nút lệnh trên Outline để thêm các View. Khi thêm ở đâu thì
chọn ngay cha nó và nhấn thêm.
Muốn hiệu chỉnh giao diện đẹp hơn nên vào thư mục /Android-sdk-
windows/ để tham khảo thêm các tập tin XML qui định giao diện; từ đó nắm
bắt các ý tưởng hiệu chỉnh giao diện giúp cho chương trình ứng dụng đẹp
hơn.
48
Tham khảo thêm APIDemo để biết thêm các widget cơ bản trên
Android. Đó là nguồn tham khảo cực kì hữu dụng.
Trong chương 3, chúng ta đã tìm hiểu phần lập trình cơ bản trên giao diện
ứng dụng Android. Trong chương tiếp theo, chúng ta tiến hành tìm hiểu theo từng
chủ đề mà mỗi chủ đề là một mảng lập trình gồm giao diện và xử lí trên Android.
Tất cả các chủ đề mà chúng tôi đưa ra phần nào giúp lập trình nên một ứng dụng
tương đối hoàn chỉnh. Các chủ đề ấy được chúng tôi trình bày chi tiết và rất rõ trong
phần phụ lục H.2. Với mỗi phần trong phụ lục H.2, chúng tôi trình bày chi tiết ý
nghĩa, cách thức lập trình cùng với những nhận xét là kinh nghiệm lập trình của
chúng tôi trên chương trình minh họa cho khóa luận này.
49
Chương 4 Lập trình theo từng chủ đề
Trong chương này, chúng tôi trình bày sơ lược các vấn đề lập trình theo
từng chủ đề. Chúng tôi chỉ nói sơ lược phần ý tưởng còn cách thức lập trình thì đã
trình bày rõ trong phần phụ lục. Các chủ đề cơ bản mà chúng tôi trình bày trong
mục này là Adapter, hoạt cảnh chuyển động, media, thao tác với Telephony, luồng,
thực đơn, kiểu chữ, hộp thoại, tập tin, MapView, Webkit, và còn một số widget khác.
Với từng chủ đề, chúng tôi sẽ trình bày chi tiết khi nó có liên quan trực tiếp với
phần mềm ứng dụng minh họa của chúng tôi. Các chủ đề còn lại được trình bày chi
tiết trong phần phụ lục với code mẫu để ta dễ dàng hiểu cách dùng hơn. Đồng thời
với mỗi chủ đề đó, chúng tôi có viết project mẫu để minh họa cho từng chủ đề ấy.
4.1 Lập trình với Adapter
4.1.1 Giới thiệu Adapter.
Nói một cách dễ hiểu, Adapter đóng vai trò gắn kết từng thành phần dữ liệu
vào từng đối tượng thành phần giao diện và tạo nên một danh sách hay một hệ
thống các phần tử giao diện hoàn chỉnh.
Adapter có nhiều lớp thể hiện là BaseAdapter, ArrayAdapter<T>,
CursorAdapter, và SimpleAdapter; ngoài ra, còn có SpinnerAdapter dùng cho
Spinner và ListAdapter dùng cho ListView. Mỗi lớp Adapter có những mặt mạnh
yếu khác nhau và được sử dụng cho hầu hết các Widget dạng danh sách tùy theo
từng hoàn cảnh cụ thể của bài toán như sau:
BaseAdapter: là lớp cơ sở cho các lớp Adapter còn lại. Nó có tính tùy
biến cao nhưng lập trình sẽ hơi phức tạp.
ArrayAdapter<T>: là lớp dẫn xuất trực tiếp từ BaseAdapter. Tính tùy
biến trung bình và lập trình cũng tương đối dễ.
CursorAdapter: là lớp dùng để kết nối dữ liệu từ một Cursor cho danh
sách với mỗi phần tử có phần phức tạp hơn so với ArrayAdapter<T>.
50
CursorAdapter thường được dùng khi muốn đọc dữ liệu từ cơ sở dữ liệu để
hiện lên danh sách.
SimpleAdapter: là Adapter đơn giản nhất và dễ hiểu nhất trong việc
gắn dữ liệu lên giao diện vì nó dùng cơ chế ánh xạ một-một giữa dữ liệu và
mỗi phần tử của danh sách với mỗi phần tử có một khung giao diện chung
được qui định bởi tập tin XML.
Tiếp theo đây, chúng ta qua mục lập trình với Adapter trên các widget dạng
danh sách.
4.1.2 Lập trình với Adapter trên Spinner, Gallery, Listview cơ bản,
ListView nâng cao, GridView cơ bản, GridView nâng cao
Có nhiều widget dùng Adapter để thể hiện danh sách dữ liệu như Spinner,
Gallery, ListView và GridView. Mỗi dạng có một kiểu giao diện riêng thể hiện đặc
trưng của chúng. Về mặt lí thuyết mà nói, tất cả các widget kể trên có thể dùng lớp
BaseAdapter nhưng như vậy lập trình sẽ khá phức tạp. Sau đây là khuyến khích của
chúng tôi dựa theo kinh nghiệm lập trình với Android trên khóa luận này:
Spinner: gần giống như DropDownList bên C#. Nó dùng để hiện danh
sách đơn giản. Cho nên ta có thể dùng ArrayAdapter<T> hoặc dùng
SpinnerAdapter đã đủ để thể hiện dữ liệu lên Spinner.
Gallery: hiện danh sách hình ảnh dạng từng tấm liên tục. Do kiểu dữ
liệu là hình ảnh cho nên tốt nhất ta viết thêm lớp mới dẫn xuất trực tiếp từ
lớp BaseAdapter để làm Adapter cho Gallery. Trong lớp mới này, chúng ta
chú ý đến việc viết lại các hàm cơ bản và đặc biệt là hàm public View
getView(int position, View convertView, ViewGroup parent) có nhiệm
vụ gán tài nguyên vào ImageView theo từng vị trí.
ListView cơ bản: là danh sách các phần tử mà mỗi phần tử là một
chuỗi hay số đơn giản. Cho nên ta chỉ cần dùng ArrayAdapter<T> hoặc dùng
ListViewAdapter đã đủ để thể hiện dữ liệu lên ListView.
51
ListView nâng cao: là danh sách mà mỗi phần tử chứa nhiều
TextView với những giá trị khác nhau. Khi ấy, chúng ta chỉ cần dùng
SimpleAdapter để đủ ánh xạ từ dữ liệu sang danh sách. Nhưng nếu trong
danh sách phức tạp hơn như nó chứa hình ảnh, chuỗi, … thì ta nên viết lại
lớp mới dẫn xuất từ lớp BaseAdapter với việc thiết kế lại hàm getView() cho
phù hợp với nhu cầu thực tế.
GridView cơ bản: là kiểu thể hiện dạng lưới các phần tử có kiểu
chuỗi, hoặc số. Trong hoàn cảnh này thì ArrayAdapter<T> là lớp đủ để giúp
Gallery thực hiện điều ấy.
Gallery nâng cao: cũng tương tự như ListView nâng cao nhưng đằng
này nó được thể hiện ở dạng lưới. Cho nên tương tự, ta chỉ cần dùng
SimpleAdapter là thích hợp trong hoàn cảnh này. Nhưng nếu Gallery có mỗi
phần tử gồm hình ảnh, chuỗi, … thì ta phải viết một lớp Adapter dẫn xuất
trực tiếp từ BaseAdapter mới có thể tinh chỉnh từng phần tử theo ý muốn.
Cách thức lập trình chi tiết cho từng widget thì chúng tôi đã trình bày tương
đối chi tiết trong phụ lục I.1.
Nhìn chung, chúng ta thấy rằng nếu các widget có các phần tử gồm nhiều
thành phần phức tạp gồm hình ảnh, chuỗi, nút nhấn, ... thì chúng ta phải viết một
lớp dẫn xuất trực tiếp từ BaseAdapter để phục cho từng trường hợp giao diện phức
tạp cụ thể.
Việc lập trình với Adapter rất đơn giản và dễ hiểu. Nhưng để áp dụng nó cho
phù hợp với từng nhu cầu thực tế thì rất khó. Qua phần tiếp theo, chúng tôi sẽ trình
bày một cách dùng Adapter vào trong màn hình thể hiện danh sách hàng hóa của
chúng tôi.
4.1.3 Dùng Adapter cho màn hình danh sách hàng hóa
Trong chương trình ứng dụng của chúng tôi, có dùng SimpleAdapter cho
việc hiện danh sách các sản phẩm trả về từ webservice. Danh sách hàng hóa với mỗi
dòng gồm hình ảnh và các thông tin dạng chuỗi của sản phẩm. Chúng tôi đã tham
52
khảo tạo một lớp dẫn xuất trực tiếp từ lớp SimpleAdapter Nhưng có phần đặc biệc ở
đây, là nó tải về phẩn chuỗi trước, sau đó nó sẽ tải về các hình ảnh.
Theo như mặc định của chương trình chúng tôi, ứng dụng gửi yêu cầu lấy 10
bộ dữ liệu từ webservice về và hiện lên ListView. Nhưng nó chỉ hiện chuỗi trước,
hình nào về trước thì nó hiện lên trước chứ không nhất thiết phải đợi cả 10 hình về
rồi mới hiện. Nhưng trong khi ấy, người dùng kéo ListView đến cuối danh sách làm
kích hoạt việc tải thêm 10 dòng sản phẩm nữa. Khi đó, 10 bộ dữ liệu chuỗi về trước
và 10 liên kết hình lại được đưa vào danh sách. Trong lúc này, các liên kết hình cũ
và hình mới sẽ lần lượt được tải về trong khi người dùng xem danh sách hoặc có thể
kéo đến cuối danh sách thêm lần nữa và cứ thế tiếp diễn. Hành động như vậy gần
giống với hiện danh sách các phần mềm của AndroidMarket. Nó làm cho người
dùng dễ chịu và dễ sử dụng; đặc biệt là không làm mất nhiều thời gian của người
dùng.
Sau khi tham khảo nhiều cách thức khác nhau từ các nguồn tài nguyên hay
giải pháp trên mạng nhằm giải quyết vấn đề đã nêu ở trên. Chúng tôi đã tìm thấy
được hai cách được nhiều nhà lập trình tham khảo trên các diễn đàn. Đó là cách của
Mark Murphy và Evan Charlton. Mark Murphy – tác giả sách Busy Coder’s Guide
to Android Development. Nhưng cách của ông ta sẽ bị lỗi khi người dùng cuộn
danh sách lên xuống trong khi tải về dữ liệu làm xấu đi giao diện. Trong khi đó,
cách của Evan Charlton Charlton – sinh viên năm 4 ngành CNTT của Học viện
Công nghệ Rochester – giải quyết được vấn đề chúng tôi đặt ra. Giái pháp ấy nằm
trong project mẫu cho ứng dụng Magnatune của tác giả Evan. Ứng dụng này là ứng
dụng thể hiện danh sách các album, bài hát, nhạc sĩ, … từ server. Tác giả này đã
viết các lớp xử lí HTTPQueue, HTTPThread, RemoteImageView,
TestEndlessSlowAPI và XXXSimpleAdapter (lớp dẫn xuất từ Adpater) để giải
quyết ứng dụng Manatune ấy.
Tiếp theo, ta tìm hiểu lập trình với hoạt cảnh chuyển động trên Android.
53
4.2 Lập trình với hoạt cảnh chuyển động
4.2.1 Giới thiệu các dạng hoạt cảnh chuyển động
Lập trình với hoạt cảnh chuyển động có 2 hướng thực hiện là:
Hướng 1: Lập trình qui định chuyển động trong tập tin XML và áp
dụng tập tin cho cho một đối tượng nào đó.
Hướng 2: Dùng mã lệnh Java để qui định hoạt cảnh chuyển động của
đối tượng.
Với 2 hướng trên, ta có 2 dạng hoạt cảnh chuyển động là trên đối tượng dùng
TweenAnimation và trên khung ảnh có hiệu ứng hoạt hình dùng
FrameByFrameAnimation. Trong phần phụ lục I.2, chúng tôi đã trình bày cách lập
trình hoạt cảnh chuyển động với 2 dạng theo 2 hướng khác nhau. Có nhiều hình
thức hoạt cảnh chuyển động như điều chỉnh mức độ màu (AlphaAnimation), hoạt
cảnh xoay (RotateAnimation), hoạt cảnh co giãn (ScaleAnimation), hoạt cảnh thay
đổi vị trí (TranslateAnimation). Chúng ta có thể tham khảo thêm ở phụ lục I.2.2.
Cuối cùng, Để làm hoạt cảnh này ta cần có một ImageView thể hiện hình
ảnh và dùng lớp AnimationDrawable để thiết lập hoạt cảnh cho hình ảnh đó. Chúng
tôi đã trình bày chi tiết trong phụ lục I.2.3.
Trong mục 4.2.2, chúng tôi chỉ trình bày sơ lược về các lập trình hoạt cảnh
chuyển có trên ứng dụng minh họa của chúng tôi.
4.2.2 Các hoạt cảnh chuyển động trong ứng dụng
Đầu tiên, chúng tôi áp dụng các hoạt cảnh chuyển động cho các nút nhấn
trong số màn hình như các nút lệnh trong màn hình chụp mã vạch, …
Ngoài ra, một số màn hình có dùng Panel dạng bảng sẽ “bay ra nhẹ nhàng”
khi nhấn nút kích hoạt mở Panel. Chúng tôi đã tham khảo từ Android-misc-wiget
của tác giả pskink (http://code.google.com/p/android-misc-widgets/) để lấy các lớp
qui định chuyển động và tần số chuyển động cho các hoạt cảnh. Các lớp này được
chúng tôi đặt trong gói interpolator như BackInterpolator, BounceInterpolator,
54
CircInterpolator, CubicInterpolator, EasingType, ElasticInterpolator,
ExpoInterpolator, QuadInterpolator, QuartInterpolator, QuintInterpolator,
SineInterpolator.
Tiếp theo, chúng ta qua phần lập trình với Media.
4.3 Lập trình Media
Android hỗ trợ phát Media với nhiều kiểu dữ liệu như âm thanh, hình ảnh,
video và từ nhiều nguồn khác nhau như trong tài nguyên ứng dụng, trên SD Card và
trên mạng. Chúng tôi đã giới thiệu lập trình Media chi tiết trên phụ lục I.3.
Khi lập trình ta phải dùng Permission để xin phép dùng Internet nếu muốn
phát các tập tin trên mạng. Ngoài ra còn có các nhận xét khác trong phụ lục I.3.4.
Tiếp theo, chúng ta qua phần lập trình với Telephony.
4.4 Lập trình với Telephony
4.4.1 Giới thiệu
Lập trình với Telephony là lập trình với các chức năng gọi điện thoại, tin
nhắn, rung máy, lấy thông tin IMEI máy,... Trong phụ lục I.4, chúng tôi đã trình bày
giới thiệu và cách lập trình chi tiết Telephony trên điện thoại. Trong mục 4.4.2 tiếp
theo, chúng tôi trình bày cách tính năng mà chúng tôi đã dùng với Telephony trên
ứng dụng.
4.4.2 Áp dụng lập trình Telephony vào ứng dụng
Với tính năng gọi và gửi tin nhắn thì có 2 hình thức trên Telephony là
gọi/gửi tin trực tiếp hoặc là thông qua màn hình gọi/ gửi tin. Trong ứng dụng, chúng
tôi dùng cách thông qua màn hình gửi tin để cho người dùng chủ động trong việc
gọi/ gửi tin khi người dùng muốn.
Chúng tôi dùng tính năng gọi điện thoại cho ứng dụng trong màn hình chi
tiết siêu thị. Khi người dùng nhấn vào biểu tượng điện thoại thì sẽ mở màn hình gọi
điện với số điện thoại được nhập sẵn lên màn hình. Người dùng chỉ phát lệnh gọi.
55
Ngoài ra, đối với việc gửi tin nhắn thì chúng tôi áp dụng trong màn hình
danh sách hàng hóa cần mua. Khi đó, ứng dụng tổng hợp danh sách hàng hóa cần
mua thành chuỗi và mở màn hình gửi tin nhắn với nội dung là chuỗi đó. Việc còn
lại là người dùng chọn người nhận và phát lệnh gửi.
Chúng tôi cho máy rung khi nhấn 1 số nút trên màn hình.
Cuối cùng, lập trình lấy số IMEI của máy là một phần quan trọng trong khóa
luận của chúng tôi. Do chúng tôi dùng nó làm định danh cho máy ứng với một View
trên web service. Vì các số IMEI của tất cả các thiết bị di động khác nhau từng đôi
một. Tiếp theo, chúng ta qua chủ đề lập trình luồng trong ứng dụng Android.
4.5 Lập trình với Luồng
4.5.1 Giới thiệu luồng
Luồng là đơn vị nhỏ nhất trong xử lí đồng thời. Có thể có nhiều luồng chạy
song song với nhau trên cùng một tiến trình ứng dụng. Luôn có một luồng chính
(Main Thread) khi ứng dụng đang chạy.
Luồng được dùng khi muốn thực thi những thao tác mất nhiều thời gian và
cần chạy ngầm. Nhưng ngược lại, nếu dùng nó thì việc lập trình hơi phức tạp và cần
xác định, tránh và giải quyết DeadLock.
Trong lập trình luồng có 2 phương pháp là dùng Message và dùng Post.
Chúng tôi đã trình bày chi tiết trong phụ lục I.5.3. Ở đây, chúng tôi trình bày luồng
được dùng ra sao trong ứng dụng minh họa của chúng tôi. .
4.5.2 Cách thức dùng luồng trong ứng dụng minh họa
Luồng được chúng tôi dùng rải rác trong ứng dụng minh họa. Đầu tiên là
dùng trong việc kiểm tra sự đồng bộ dữ liệu giữa server và client; nếu có bất đồng
bộ, sẽ hiện thông báo ngay cho client để yêu cầu cập nhật lại dữ liệu.
Ngoài ra, chúng tôi còn dùng trong việc tải hình về “từ từ” từ webservice
trong màn hình danh sách hàng hóa. Vì các hình ảnh được đặt vào một luồng riêng,
56
nên chúng sẽ “từ từ” tải hình về thư mục tạm trên client và hiện hình đó lên danh
sách hàng hóa.
Tiếp theo, chúng ta qua lập trình thực đơn cho từng màn hình ứng dụng.
4.6 Lập trình với thực đơn
4.6.1 Giới thiệu
Thực đơn trên Android có 2 dạng thực đơn cho màn hình và thực đơn ngữ
cảnh cho từng điều khiển (widget) khi có sự kiện “nhấn lâu” trên đối tượng. Trên
thực đơn màn hình gồm các thành phần chuỗi, biểu tượng, thực đơn con; trong khi
đó, thực đơn ngữ cảnh có thể dùng chuỗi, nút chọn RadioButton, nút chọn
CheckBox. Cách thức lập trình với hai dạng thực đơn vừa nêu được chúng tôi trình
bày chi tiết trong phụ lục I.6. Qua phần tiếp theo, chúng tôi giới thiệu các trường
hợp dùng thực đơn trong ứng dụng minh họa.
4.6.2 Cách thức dùng thực đơn trên ứng dụng minh họa
Đối với từng dạng thực đơn kể trên, ta có 2 phương pháp thiết lập là dùng
XML để qui định cấu trúc thực đơn hoặc dùng mã lệnh Java cho chúng. Sau đó gán
tập tin XML hoặc đối tượng qui định cấu trúc thực đơn đó vào thực đơn ứng dụng
hay ngữ cảnh hiện tại. Cuối cùng là viết sự kiện cho từng mục chọn của thực đơn.
Trong ứng dụng, hầu như tất cả màn hình chúng tôi đều có dùng thực đơn
cho màn hình. Còn thực đơn ngữ cảnh thì chúng tôi có dùng cho Danh sách hàng
hóa cần mua. Khi nhấn lâu thì sẽ hiện thực đơn ngữ cảnh có một số mục chọn như
xóa hàng hóa đó chẳng hạn. Chúng tôi có các ví dụ và nhận xét trong phụ lục I.6.2
và I.6.3. Tiếp theo, chúng ta qua phần lập trình với kiểu chữ (Font).
4.7 Lập trình với kiểu chữ (Font)
Kiểu chữ trên Android rất đơn điệu vì nó chỉ có 4 kiểu chữ cơ bản là Normal,
Sans, Serif, và Monospace. Chúng ta có thể dùng nhiều kiểu chữ hơn nữa cho giao
diện ứng dụng bằng cách dùng các tập tin .ttf qui định kiểu chữ cho các điều khiển.
57
Ta có thể tham khảo kĩ hơn ở phụ lục I.7. Sau đây, chúng ta qua phần lập trình với
khung thoại.
4.8 Lập trình với khung thoại (Dialog)
Trên Android có hỗ trợ nhiều dạng hộp thoại phục vụ nhu cầu thông báo cho
người dùng như: AlertDialog, ProgressDialog, DatePickerDialog và
TimePickerDialog. Từng hộp thoại vừa kể sử dụng trong các trường hợp khác nhau
tùy theo từng hoàn cảnh bài toán. Phần này chúng tôi đã trình bày chi tiết trong phụ
lục I.8. Trong ứng dụng, phần nhiều chúng tôi sử dụng AlertDialog.
Về cách thức lập trình nội dung cho từng Dialog thì Android đã có sự hỗ trợ
tương đối. Ngoài ra, chúng ta có thể hiệu chỉnh lại giao diện cho từng hộp thoại theo
ý riêng của ta bằng cách viết lại tập tin XML qui định giao diện của hộp thoại. Các
cách thức lập trình trên hộp thoại và các ví dụ thì chúng tôi đã trình bày theo từng
mục con trong I.8.2. Qua phần sau, chúng ta qua phần lập trình với nhập xuất tập tin
gồm Preferences, Files và Database.
4.9 Lập trình với nhập xuất tập tin
4.9.1 Giới thiệu
Trên Android hỗ trợ nhiều cách nhập xuất tập tin với nhiều hình thức như sau:
Preferences: giúp lưu trữ những thiết lập cho ứng dụng bằng tập tin
XML trong thư mục ứng dụng com.<Ten_ung_dung>/shared_prefs.
Files: cho phép ta đọc/ ghi những tập tin chuỗi, âm thanh, hình ảnh,
video lên thư mục ứng dụng hoặc ổ đĩa SDCard.
Databases: lưu trữ dữ liệu dạng quan hệ với số lượng lớn để giúp ta dễ
dàng truy xuất khi cần.
Việc lập trình cơ bản với Prefereneces, Files và Databases thì cúng tôi đã
trình bày rõ ràng trong mục I.9. Qua phần sau chúng tôi trình bày kĩ hơn về cách áp
dụng cách dùng Files và Database của chúng tôi trong ứng dụng.
58
4.9.2 Lập trình với tập tin (Files)
Với Files, ta có thể ghi/ đọc bất kì tập tin nào mà ta muốn vào SDCard và thư
mục ứng dụng trong bộ nhớ trong của thiết bị Android. Lập trình với Files thì chúng
tôi áp dụng cách thức lưu tạm hình ảnh tải từ webservice trên client. Nói dễ hiểu
hơn là khi người dùng một khi đã lướt qua danh sách hàng hóa thì các hình ảnh sẽ
được tải về lưu trong thư mục được chúng tôi chỉ định. Lần sau, khi tìm danh sách
hàng hóa nào có hình ảnh với tên giống như củ thì nó sẽ không cần tải lại hình ảnh
đó vì nó đã lưu tạm hình ảnh đó lại rồi.
Qua phần tiếp theo, chúng tôi trình bày cách thức mà chúng tôi tiếp cận và
lập trình CSDL SQLite trên client.
4.9.3 Lập trình với cơ sở dữ liệu (Databases)
Khi lập trình với CSDL trên .Net thì chúng tôi thường xây dựng lớp
DataProvider dùng để cung cấp những phương thức cơ bản nhất để mở, thao tác,
truy vấn, đóng CSDL cho các lớp XXXDAO (với XXX là tên đối tượng dữ liệu).
Cũng với tư tưởng ấy, chúng tôi xây dựng lớp DataProviderTest.java cung cấp các
hàm cơ bản cho việc thao tác lên CSDL SQLite của ứng dụng Android.
Lớp DataProvider với những phương thức cơ bản sau:
Tên phƣơng thức Ý nghĩa sử dụng
DataProviderTest() Khởi động tên đường dẫn vật lý đến tập
tin CSDL.
SQLiteDatabase openConnection() Mở kết nối đến CSDL nếu tồn tại tập tin
như đường dẫn. Nếu không, tạo tập tin
với đường dẫn đó.
Boolean initDatabase() Khởi tạo CSDL từ lúc ban đầu. Có dùng
giao tác để kiểm tra tính toàn vẹn giao
tác.
Void
execMultipleSQL(SQLiteDatabase,
Thực thi danh sách các câu SQL lên
CSDL.
59
String[])
Boolean tableExist(SQLiteDatabase,
String)
Kiểm tra tên bảng có tồn tại không
trong CSDL.
Cursor execQuery(SQLiteDatabase,
String)
Thực thi câu truy vấn và trả về một
Cursor.
Cursor execQuery(SQLiteDatabase,
String[])
Thực thi danh sách các câu truy vấn.
Cursor execQuery(SQLiteDatabase
db, String tablename, String[]
columns, String selection, String[]
selectionArgs, String groupBy,String
having, String orderBy)
Thực thi truy vấn dựa theo CSDL, tên
bảng, các cột tham gia, các cột kết quả,
điều kiện chọn, nhóm theo, chọn và sắp
xếp
int execNonQuery(SQLiteDatabase
db,String sql)
Dùng để thực thi câu lệnh SQL.
int
execInsertCommand(SQLiteDatabase
db,String table, ContentValues values)
Dùng để thêm dữ liệu từ CotentValues
vào CSDL.
int
execUpdateCommand(SQLiteDatabase
db,String table, ContentValues values)
Dùng để chỉnh dữ liệu từ CotentValues
vào CSDL.
int
execDeleteCommand(SQLiteDatabase
db, String table, String whereClause,
String[]
whereArgs)
Dùng để xóa dữ liệu.
Bảng - Bảng các phƣơng thức cơ bản của DataProviderTest
Các phương thức trên, chúng tôi đã viết lại toàn bộ với ý tưởng đã được học
bên lập trình ứng dụng trên C#. Ta thấy các phương thức trên thuộc 3 nhóm rõ rệt là
nhóm thiết lập và khởi động kết nối; nhóm thực thi truy vấn/ thao tác bằng câu lệnh
SQL; và nhóm thực thi câu lệnh truy vấn/thao tác bằng phương thức sẵn có.
60
Tất cả các phương thức trên là phương thức chủ đạo cho các lớp đối tượng
DAO còn lại của ứng dụng. Trên đầu mỗi lớp XXXDAO.java thì chúng tôi dùng cơ
chế try/catch/finally để bao bọc việc mở kết nối, thao tác trên kết nối và cuối cùng
là đóng kết nối như ví dụ thêm dữ liệu như sau:
DataProviderTest provider = new DataProviderTest(mContext);
SQLiteDatabase db = provider.openConnection();
try{
ContentValues values = new ContentValues();
values.put("Ma", hhcmDTO.get_Ma());
values.put("Ten", hhcmDTO.get_Ten());
values.put("DonViBan", hhcmDTO.get_DonViBan());
values.put("SoLuong", hhcmDTO.get_SoLuong());
values.put("Gia", hhcmDTO.get_Gia());
values.put("DaMua", hhcmDTO.get_DaMua());
values.put("HinhPicture", hhcmDTO.get_HinhPicture());
result= provider.execInsertCommand(db, "HangHoaCanMua",
values);
} catch (Exception e) {
// TODO: handle exception
} finally{
db.close();
}
Ngoài ra, nó còn hỗ trợ giao tác cho các hành động trên cơ sở dữ liệu. Tiếp
theo, chúng ta đi vào phần lập trình với mạng trên ứng dụng Android.
4.10 Lập trình với Network
Có nhiều cách thức lập trình mạng trên Android. Ở đây, chúng tôi dùng
KSoap là bộ thư viện nguồn mở để có thể lập trình lấy dữ liệu từ các nguồn
webservice .Net hoặc PHP. Nhưng trong phần này, chúng tôi trình bày trên nguồn
.Net. Phần này, chúng tôi đã trình bày rõ trong phụ lục I.9.5.2.
Tương tự như lớp DataProvider dành cho khai tác với dữ liệu cục bộ, thì lớp
ServiceProvider thì dành cho khai thác với các phương thức của webservice. Chúng
61
tôi đã xây dựng bộ hàm cơ bản đủ để cho các lớp YYYService.java sử dụng(Với
YYY là đối tượng dữ liệu của Client). Lớp ServiceProvider gồm các hàm sau:
Tên phƣơng thức Ý nghĩa sử dụng
public ServiceProvider(Context
context) Lớp khởi tạo có/ hoặc không có tên hàm
tương ứng với tên trên web service ServiceProvider(Context
context,String method_name)
SoapObject
getDataFromServer(PropertyInf
o[] arrProperty, Object[]
arrValue)
Lấy kết quả SoapObject trả về từ webservice
với tham số đầu vào là arrProperty là tên và
kiểu thuộc tính đầu vào của phương thức trên
webservice và arrValue là giá trị tương ứng.
Bảng - Bảng các phƣơng thức trong ServiceProvider
Trong các lớp YYYService.java, chúng tôi dã sử dụng lại hàm của
ServiceProvider để lấy về SoapObject trả về từ webservice. Kế đến, chúng tôi phân
giải SoapObject thành từng thành phần cho đến khi nào lấy được giá trị cần lấy.
Tiếp theo, chúng ta qua phần lập trình MapView.
4.11 Lập trình với MapView
MapView là khung nhìn bản đồ dùng để hiển thị bản đồ GoogleMaps do
Google hỗ trợ khi lập trình trên Android. Google hỗ trợ chỉ đường cho Việt Nam
được vài tháng trở lại đây. Phần lập trình với MapView, chúng tôi đã trình bày rất
rõ thành từng bước trong mục I.10.
Trong ứng dụng thực tế, chúng tôi có sử dụng phần bản đồ như là một phần
chức năng chỉ đường đi ngắn nhất từ vị trí hiện tại (lấy qua GPS, mạng điện thoại
hoặc Wifi) đến siêu thị gần nhất theo tiêu chí cho trước. Để có vị trí thật của cả gần
chục hệ thống siêu thị - tức gần trăm siêu thị - thì chúng tôi đã rà vị trí từng siêu thị
trên GoogleEarth để phóng to hình và cố gắng xác định vị trí siêu thị trên đó để từ
đó lấy thông tin kinh độ và vĩ độ của siêu thị để lưu vào CSDL.
62
4.12 Lập trình với Webkit
Android giúp ta hỗ trợ gọi trình duyệt web ngay từ trong chương trình ứng
dụng với tham số đầu vào là địa chỉ trang web cho trước. Trong ứng dụng thực tế,
chúng tôi có sử dụng trong phần gọi trang web của siêu thị để người dùng tiện hơn
khi muốn vào xem hàng hóa trên trang chính của siêu thị. Chúng tôi trình bày chi
tiết trong phụ lục I.11. Tiếp theo, ta qua phần lập trình với các điều khiển khác.
4.13 Lập trình với các Widget khác
Có 3 widget DatePicker, TimePicker và Tab trong phần này. Chúng tôi thấy
sự cần thiết của Tab cũng quan trọng nên chúng tôi đã trình bày rõ nó trong phụ lục
I.12.2.
Còn DatePicker và TimePicker thì chúng tôi chỉ giới thiệu và lập trình rất kĩ
trong project mẫu HelloOtherWidget đi kèm với CD của khóa luận này.
4.14 Các vấn đề nảy sinh khi lập trình Android
Trong khi lập trình Android thì bạn chạy ứng dụng bằng thao tác RunAs trực
tiếp trên tên project có thể sẽ bị lỗi như sau:
Hình - Hình minh họa lỗi của Emulator
Cách khắc phục thông thường nhất là vào thư mục chứa thẻ nhớ chương trình
và xóa thư mục .iso.lock đi.
63
Hình - Hình minh họa cách tập tin thẻ nhớ ảo bị khóa
Nếu vẫn không thể chạy được thì ta chỉ còn cách vào Windows/Android
SDK and AVD Manager của IDE Eclipse để khởi động máy ảo.
Trong chương này, chúng ta đã làm quen với các chủ đề lập trình cơ bản trên
Android. Với mỗi phần nào có liên quan đến ứng dụng của chúng tôi viết minh họa
thì chúng tôi có nêu rõ hơn về phần đó. Ngoài ra muốn tìm hiểu rõ hơn thì có thể
tham khảo thêm ở phần phụ lục đi kèm với cuốn khóa luận này. Trong chương tiếp
theo, chúng tôi nói về chương trình ứng dụng của khóa luận này và các giải pháp
cho từng chức năng trên đó.
64
Chương 5 Chương trình ứng dụng và các giải pháp cho
các chức năng của ứng dụng
Trong chương này, chúng tôi phát biểu bài toán và trình bày sơ đồ Use-
Case. Tiếp theo chúng tôi trình bày phân tích và thiết kế dữ liệu của hệ thống. Kế
đến, chúng tôi trình bày thiết kế của hệ thống và giao diện ứng dụng. Cuối cùng
chúng tôi tổng hợp môi trường cài đặt, thử nghiệm và so sánh với các ứng dụng
tương tự khác hiện nay.
5.1 Phát biểu bài toán
Phạm vi khóa luận của chúng tôi là tìm hiểu hệ điều hành Android và viết
ứng dụng minh họa. Phần tìm hiểu hệ điều hành Android thì chúng tôi đã trình bày
tổng quan trong các chương trên và chi tiết trong phần phụ lục G trở đi.
Còn phần hệ thống ứng dụng chúng tôi có tên là eSaleShopping. Hệ thống là
chương trình hỗ trợ mua sắm hàng hóa cho người dùng smart phone dùng hệ điều
hành Android. Hệ thống gồm hai thành phần chính gồm client sử dụng smart phone
hệ điều hành Android và webservice trên nền ASP.net để cung cấp thông tin cho
client. Tiếp theo, chúng ta lần lượt đi qua các chức năng chính yếu nhất của hai
thành phần chính này.
Các chức năng trên thành phần Client dùng Android gồm:
Chức năng tìm kiếm sản phẩm theo:
Mã vạch: chụp mã vạch và phân giải mã vạch thành con số để
tiến hành gửi thông tin mã vạch vừa chụp lên máy chủ của chúng
tôi để máy chủ xử lí và trả về danh sách kết quả hàng hóa tương
ứng. Ngoài ra, có thể thêm vào danh sách hàng hóa ưa thích hoặc
hàng hóa cần mua.
65
Theo từng hệ thống siêu thị: với từng hệ thống siêu thị khác
nhau thì chúng tôi sẽ cho tìm kiếm trên những danh mục hàng hóa
mà siêu thị đó hiện đang bán.
Theo danh mục hàng hóa: với từng danh mục hàng hóa thì
chúng tôi sẽ cho người dùng tìm theo loại hàng hóa trên tất cả các
siêu thị hiện có trên máy chủ của chúng tôi.
Theo điều kiện tìm theo chuỗi: cho phép người dùng tìm hàng
hóa theo chuỗi có dấu với nhiều điều kiện kết hợp Và-Hoặc khác
nhau.
Chức năng lưu và theo dõi giá cả các hàng hóa ưa thích.
Chức năng lập danh sách các hàng hóa cần mua để dễ dàng quản lí giỏ
hàng khi đi vào các siêu thị. Ngoài ra, ứng dụng còn có thể gửi danh sách
hàng hóa cần mua qua SMS.
Chức năng xem thông tin và bản đồ hệ thống siêu thị: xem thông tin
một siêu thị của hệ thống siêu thị và có thể chỉ đường đi đến siêu thị gần
nhất nằm trong hệ thống siêu thị. Đồng thời, có thể liên lạc với siêu thị qua
trang web hoặc gọi điện trực tiếp qua điện thoại.
Chức năng xem danh sách sản phẩm với nhiều thông tin hữu ích gồm
hình ảnh, giá cả, có khuyến mãi hay không. Các kết quả trả về theo từng đợt
và client hiện từng đợt kết quả sao cho tiện dụng nhất.
Chức năng xem thông tin chi tiết hàng hóa từ kết quả tìm kiếm gồm:
Thông tin chính yếu của sản phẩm gồm tên, hình, giá cả, thông tin
chi tiết và các thông tin khuyến mãi (nếu có).
Các sản phẩm cùng nhóm tại siêu thị (nếu có).
Sản phẩm hiện đang bán tại các siêu thị khác (nếu có).
Thêm sản phẩm hiện tại vào danh sách ưa thích, cần mua.
Chức năng lưu trữ các thông tin hệ thống siêu thị, danh mục hàng hóa
trên điện thoại để tiện truy cập và phát lệnh tìm kiếm lên máy chủ. Dễ hiểu
66
hơn là ứng dụng lưu thông tin cơ bản cần thiết đủ để làm dữ liệu điều kiện để
gửi lên máy chủ. Cho nên, ứng dụng có cơ chế đồng bộ giữa máy chủ và
client trên một phần nào đó khi phần đó trên máy chủ có sự thay đổi.
Các chức năng trên thành phần webservice:
Xây dựng một cơ sở dữ liệu gồm hệ thống siêu thị, siêu thị, danh mục
hàng hóa, loại hàng hóa, đợt bán hàng, hàng hóa, tham số. Tất cả dữ liệu đều
được dựa trên bộ dữ liệu thật có được khi đi thu thập từ các siêu thị trên
thành phố. Đặc biệt là 443 bộ sản phẩm gồm các mã vạch thu thập từ các
siêu thị trong thành phố.
Xây dựng nên bộ tham số phục vụ cho việc đồng bộ dữ liệu của client
với server.
Tìm hiểu cách thức tạo/xóa view bằng phương pháp “động” tùy thuộc
vào chuỗi điều kiện mà client đưa lên.
Xây dựng một webservice tương đối hoàn chỉnh phục vụ cho việc
giao tiếp giữa client và webservice.
Mục 5.1.1 là phần phát biểu chi tiết bài toán của chúng tôi, tiếp theo để dễ
dàng hiểu rõ hơn chức năng hệ thống ứng dụng chúng tôi đã làm, chúng ta qua phần
tiếp theo là mô tả sơ đồ Use-Case.
5.2 Sơ đồ Use Case
67
Hình - Sơ đồ use case cho ứng dụng eSaleShopping
Tên Use-Case Chức năng
Tim Hang Hoa Theo Ma Vach Tìm hàng hóa bằng cách chụp mã vạch với đầu
vào là hình mã vạch và đầu ra là chuỗi mã vạch.
Tim Hang Hoa Theo Chuoi Tìm hàng hóa theo nhiều điều kiện nhập liệu từ
màn hình với đầu vào là chuỗi tìm kiếm và đầu
ra là danh sách hàng hóa tương ứng.
Tim Hang Hoa Theo Danh
Muc Hang Hoa Va Loai Hang
Hoa
Tìm hàng hóa theo danh mục mặt hàng và từ đó
theo loại hàng hóa. Với đầu vào là danh mục
hàng/loại hàng và đầu ra là danh sách hàng hóa
tương ứng.
Tim Hang Hoa Theo Sieu Thi Tìm hàng hóa theo hệ thống siêu thị và siêu thị
Nguoi Dung
Tim Hang Hoa Theo Ma Vach
Tim Hang Hoa Theo He Thong Sieu Thi va Sieu Thi
Quan Ly Hang Hoa Uu Thich
Quan Ly Hang Hoa Can MuaXem Thong Tin Hang Hoa
Chup Ma Vach<<include>>
<<extend>>Them Hang Hoa Uu Thich
<<include>>
<<include>>
Xem Thong Tin SieuThi va Ban Do Den Sieu Thi
<<extend>>
Tim Hang Hoa Theo Danh Muc Hang Hoa va Loai Hang Hoa
Tim Hang Hoa Theo Chuoi
Them Hang Hoa Can Mua
68
Va He Thong Sieu Thi ứng với hệ thống siêu thị đó. Với đầu vào là
thông tin hệ thống siêu thị và đầu ra là danh sách
hàng hóa tương ứng.
Quan Ly Hang Hoa Ua Thich Quản lý hàng hóa ưa thích bao gồm xem, xóa,
thêm.
Quan Ly Hang Hoa Can Mua Quản lý hàng hóa cần mua gồm thêm, xóa, xem.
Chup Ma Vach Chụp mã vạch phục vụ cho use-case tìm.
Them Hang Hoa Ua Thich Thêm hàng hóa ưa thích. Nó phục vụ cho use-
case quản lý hàng hóa ưa thích.
Them Hang Hoa Can Mua Thêm hàng hóa cần mua. Nó phục vụ cho use-
case quản lý hàng hóa cần mua.
Xem Thong Tin Hang Hoa Xem thông tin hàng hóa.
Xem Thong Tin Sieu Thi Va
Ban Do Den Sieu Thi
Xem thông tin siêu thị và bản đồ đến siêu thị.
Bảng - Bảng tên và chức năng Use-case
Phần 5.2 này đã giới thiệu sơ đồ Use-case của hệ thống ứng dụng. Tiếp theo,
phần 5.3 sẽ giới thiệu việc phân tích và thiết kế dữ liệu cho hệ thống.
5.3 Phân tích và thiết kế dữ liệu
5.3.1 Phân tích và thiết kế dữ liệu trên Webservice
Sau đây là sơ đồ CSDL trên webservice:
69
Hình - Sơ đồ CSDL trên server
5.3.2 Phân tích và thiết kế dữ liệu trên Client
Do nhu cầu trên client có lưu vết lại một số thuộc tính, hay phục vụ cho nhu
cầu đồng bộ với dữ liệu trên webservice nên ta có cơ sở dữ liệu như sau:
Hình - Hình sơ đồ các lớp dữ liệu
Ngoài ra, trên client còn thêm ba bảng sau:
70
HangHoaCanMua (Ma INTEGER PRIMARY KEY
AUTOINCREMENT , Ten text, DonViBan text, SoLuong integer, Gia float,
DaMua int, HinhPicture blob): phục vụ cho lưu trữ hàng hóa cần mua.
HangHoaDaXem (Ma integer): phục vụ cho lưu vết hàng hóa đã xem.
HangHoaUaThich (Ma integer, MaLoaiHangHoa integer,
TenNhaSanXuat text, Barcode text,Ten text, Hinh text, TuKhoa text,
HinhPicture blob): phục vụ cho lưu trữ hàng hóa ưa thích
5.4 Thiết kế hệ thống
5.4.1 Kiến trúc hệ thống
Hệ thống ứng dụng chúng tôi được viết trên 2 tầng riêng biệt là tầng
Webservice (được xây dựng trên nền .Net) và tầng Client dùng thiết bị Android.
Ngoài ra còn có các service bổ trợ thêm như hình minh họa như sau:
INTERNET
GooglMap
Service
Điểm Truy Cập
WiFi
Trạm Thu
Phát Song
Điện Thoại
Di Động
Nhân Viên
Nhập Liệu
Siêu Thị
Vệ Tinh
Trung Tâm Quản Lý
Trạm Thu Phát Sóng Webservice
Dữ Liệu
Trang Web Giao Tiếp Giữa
Webservice Và Người Dùng
Hình - Hình mô tả hệ thống ứng dụng eSaleShopping
Hai thành phần chính trên hệ thống mà chúng tôi phát triển là ứng dụng phía
Client (trên điện thoại di động dùng Android) và Webservice với bộ dữ liệu gồm tất
cả các thông tin hệ thống siêu thị và sản phẩm của chúng.
71
Ngoài ra, còn nhiều dịch vụ của các bên thứ ba hỗ trợ như:
Dịch vụ cung cấp tín hiệu vị trí từ vệ tinh (GPS), từ mạng (nhà cung
cấp mạng điện thoại, Wifi).
Dịch vụ cung cấp bản đồ GoogleMap của Google.
Dịch vụ gồm trang web giao tiếp giữa nhân viên nhập liệu siêu thị và
hệ thống.
5.4.2 Mô tả nhiệm vụ và kiến trúc hệ thống trên webservice
Nhiệm vụ chính của webservice là lưu trữ dữ liệu và cung cấp dữ liệu cho
nhiều Client cùng lúc tùy theo tiêu chí mà Client đó đã gửi lên webservice. Kiến
trúc của webservice gồm các kiến trúc nhỏ như sau:
Kiến trúc xử lý thông số IMEI, chuỗi điều kiện tìm kiếm và trả về kết
quả cho client.
Hình - Hình kiến trúc xử lý và trả về kết quả tìm kiếm sàn phẩm trên webservice
Trong kiến trúc nhỏ này, ta thấy giá trị đầu vào là IMEI, chuỗi
điều kiện cần tìm và đầu ra là kết quả từ view động ứng với IMEI và điều
kiện đầu vào. Đây là giải pháp mà chúng tôi đưa ra để tiết kiệm lượng dữ
liệu truyền lên cho webservice từ client và giảm thiểu hành động tạo câu
truy vấn nhiều lần trên cơ sở dữ liệu. Chúng ta có hoàn cảnh như sau:
72
Do chúng tôi dùng kSOAP để kết nối với webservice để lấy dữ
liệu về. Cơ chế kết nối ấy là Disconnected – nghĩa là client mở
kết nối, gửi thông tin lên webservice, lấy thông tin về và đóng kết
nối đóng. Cho nên, webservice sẽ không hiểu client là ai ngay sau
khi ngắt kết nối.
Lượng dữ liệu trả về cho client đôi khi khá lớn nên phải chia
thành từng đợt để gửi về cho client.
Chính vì hai hoàn cảnh trên nên chúng tôi đã tạo view động với
nội dung là chuỗi điều kiện và tên view là IMEI mà client gửi lên. Với
view động, client không cần gửi điều kiện tìm kiếm lên nữa mà chỉ gửi số
dòng đã có và IMEI. Căn cứ vào IMEI và số dòng đã có, webservice sẽ
trả về dữ liệu mà client cần.
Kiến trúc tiếp nhận và trả về thông tin cập nhật cho client
Hình - Kiến trúc tiếp nhận và trả về thông tin cập nhật cho client
Kiến trúc này giúp so khớp thông tin tham số client gửi lên với
tham số trên webservice để tiến hành đồng bộ. Trên client, chúng tôi có
lưu lại các thông tin tham số và dữ liệu ban đầu để tạo dữ liệu điều kiện
cho các chức năng tìm kiếm trên client. Cho nên, một khi dữ liệu điều
kiện trên webservice thay đổi thì client phải cập nhật lại trước khi người
dùng sử dụng ứng dụng.
73
5.4.3 Mô tả nhiệm vụ và kiến trúc trên client dùng Android
Nhiệm vụ chính của Client là phát lệnh gửi điều kiện tìm kiếm sản phẩm lên
webservice và nhận về từng đợt kết quả tương ứng. Ngoài ra, nó còn sử dụng một
số service sẵn có của Google như bản đồ và các chức năng khác của điện thoại như
chụp mã vạch, gọi điện, gửi tin,...
Client gồm các kiến trúc con như sau:
Tổng hợp thông tin tìm kiếm mà người dùng thao tác để gửi lên
webservice và nhận về kết quả theo từng đợt.
Hình - Kiến trúc tổng hợp thông tin tìm kiếm trên client
Trong mục 5.4.2 đã trình bày lí do tại sao tạo view động. Trong
kiến trúc hình 5-8 này, chúng tôi trình bày rõ thêm về cách tạo dữ liệu gửi
lên webservice tại client. Client xử lí các thông tin tìm kiếm rồi kết hợp
thông tin IMEI để gửi lên webservice. Webservice tạo view trước. Sau
đó, tại client chỉ cần gửi lên IMEI và số bộ dữ liệu hiện có thì webservice
sẽ trả về số bộ dữ liệu tiếp theo tương ứng. Trong ứng dụng minh họa,
mỗi lần chúng tôi để webservice trả về mỗi lần 10 bộ dữ liệu.
74
Tổng hợp các thông tin cần đồng bộ với webservice và yêu cầu đồng
bộ tuần tự theo từng thành phần nếu có sự khác biệt giữa hai bên.
Hình - Kiến trúc đồng bộ thông tin giữa client và webservice
Trong mục 5.4.2 đã trình bày kiến trúc đồng bộ cho client với
webservice trên một số dữ liệu điều kiện. Trong kiến trúc hình 5-9 thể
hiện client tổng hợp các thông tin điều kiện trên client và gửi chúng lên
webservice rồi nhận về danh sách các dữ liệu được cập nhật. Tùy theo độ
lớn dung lượng loại dữ liệu điều kiện mà chúng tôi sẽ lấy dữ liệu về rồi
cập nhật hoặc là xóa hết dữ liệu cũ rồi tải về toàn bộ dữ liệu mới.
Tổng hợp và quản lí danh sách cần mua
75
Hình - Kiến trúc tổng hợp và quản lý danh sách hàng hóa cần mua
Trên client có phần quản lý thông tin hàng hóa cần mua như thêm,
xóa hàng hóa cần mua. Ngoài ra, còn có thể chia sẻ danh sách hàng cần
mua qua SMS khi cần.
Tổng hợp và quản lí danh sách ưa thích
Hình - Kiến trúc tổng hợp và quản lý hàng hóa ƣa thích
Trên client có phần quản lý danh sách hàng hóa ưa thích và giúp
người dùng theo dõi giá cả các mặt hàng người dùng hiện đang quan tâm.
76
5.4.4 Các lớp trên Client
Trên Client có rất nhiều lớp được gán vào trong các Package như sau:
Các lớp giao diện (Activity)
ManHinhBanDoDuongDi Màn hình hiện bản đồ đường đi đến siêu thị
từ vị trí hiện tại
ManHinhChinh Màn hình giao diện đầu tiên khi vừa khởi
động chương trình
ManHinhChiTietHangHoa Màn hình hiện chi tiết hàng hóa
ManHinhChiTietHeThongSieuThi Màn hình hiện thông tin chi tiết hệ thống
siêu thị
ManHinhDanhMucHangHoa Màn hình hiện danh sách các danh mục hàng
hóa theo dạng danh sách
ManHinhDanhSachHangHoa Màn hình hiện danh sách kết quả hàng hóa
trả về từng đợt từ webservice
ManHinhDanhsachHangHoaUaT
hich
Màn hình hiện danh sách hàng hóa ưa thích.
manHinhDanhSachMuaHang Màn hình hiện danh sách hàng hóa cần mua
ManHinhHeThongSieuThi Màn hình hiện các Logo hệ thống siêu thị
dạng lưới.
ManHinhLoaiHangHoa Màn hình hiện danh sách loại hàng hóa.
ManHinhLuaChonSieuThi Màn hình hiện danh sách các siêu thị của
một hệ thống siêu thị.
ManHinhThongTinChuongTrinh Màn hình hiện thông tin người viết chương
trình và thông tin phần mềm.
ManHinhThongTinVaBanDoDuo
ngDiSieuThi
Màn hình thông tin chi tiết của một siêu thị
ManHinhTimTheoChuoi_GiupDo Màn hình hiện cách thức sử dụng các đối
tượng của màn hình tìm theo chuỗi.
77
ManHinhTimTheoChuoi Màn hình cho phép người dùng nhập các
chuỗi tìm kiếm sản phẩm theo nhiều tiêu chí.
ManHinhTimTheoMaVach Màn hình cho phép chụp mã vạch và hiện
kết quả mã vạch lên cho người dùng.
ManHinhTuyChon Màn hình cho thiết lập các lựa chọn cho toàn
chương trình
ZoomImage Màn hình cho xem hình ảnh phóng to của
hình ảnh hàng hóa.
Các lớp Adapter
Phục vụ làm lớp cầu nối cho việc hiển thị
dữ liệu lên các đối tượng dạng danh sách
trên giao diện từ đơn giản đến phức tạp
Các lớp DataProvider
Phục vụ cho thao tác lên dữ liệu
cục bộ trên SQLite. Trong đó có
lớp DataProviderTest là lớp cầu nối
giữa các lớp DAO còn lại với
CSDL.
Các lớp DTO
78
Là lớp có nhiệm vụ lưu trữ các thông tin dữ liệu
và là phương tiện lưu thông thông tin giữa các
lớp thuộc dạng DataProvider, ServiceProvider,
Adapter, UpdateCenter.
Các lớp MapCenter
Chứa các lớp phục vụ cho việc vẽ và thao tác
lên bản đồ.
Các lớp ServiceProvider
Chứa các lớp phục vụ gửi các yêu cầu lên
webservice và nhận các kết quả trả về. Trong
đó, có lớp ServiceProvider là lớp chứa các hàm
cơ bản nhất cho các lớp còn lại dùng để gửi yêu
cầu lên webservice tùy thuộc vào từng hành
động theo từng lớp khác nhau.
Các lớp UpdateCenter
Là các lớp dùng để cập nhật thông tin dữ liệu
giữa service và thiết bị Android. Các lớp này sử
dụng hai lớp ServiceProvider và DataProvider
để tiến hành lấy dữ liệu từ service và cập nhật
dữ liệu đó xuống CSDL SQLite.
Các lớp Utility
79
Chứa các lớp dùng để thực thi các tính năng phục
vụ cho giao diện, cho việc giao tiếp với các ứng
dụng khác, và thao tác lấy thông số của máy.
Các lớp widget
Chứa các lớp định nghĩa các điều khiển mới.
Các lớp interpolator
Các lớp dùng định nghĩa các hiệu ứng hoạt cảnh
chuyển động.
Bảng - Bảng các lớp có trên client
5.4.5 Các lớp trên webservice
Các lớp BUS
Là các lớp ở lớp BUS Bussiness trong
mô hình 3 lớp.
Các lớp DAO
80
Là các lớp DAO thao tác trực tiếp lên
CSDL trên Server
Các lớp DTO
Là các lớp DTO lưu trữ và là phương
tiện lưu thông dữ liệu giữa các lớp DAO,
BUS và lớp Service.
Là lớp chứa các phương thức giao tiếp
trực tiếp giữa Server và các hệ thống bên
ngoài.
Bảng - Bảng các lớp có trên webservice
81
5.5 Thiết kế giao diện
5.5.1 Sơ đồ các màn hình trên Client
Hình - Sơ đồ các màn hình trên client
Hình - Sơ đồ màn hình mô tả [1] cho hình 5-11
Màn hình chính
MH tìm theo danh mục
MH tìm theo Loại hàng
hóa
MH danh sách hàng
hóa
MH chi tiết hàng hóa
MH tìm theo hệ thống siêu
thị
.[1]
MH tìm theo chuỗi
MH danh sách hàng hóa
MH chi tiết hàng hóa
MH tìm theo mã vạch
[2]
MH chi tiết hàng hóa
MH hàng hóa cần mua
[3]
MH hàng hóa ưu thích
MH tùy chọnMH thông tin chương trình
Màn hình thông tin hệ thống siêu
thị
MH chỉ đường đi ngắn nhất
MH lựa chọn của một siêu thị trong hệ thống siêu thị
MH thông tin siêu thị
Màn hình gọi điện
Màn hình bản đồ
MH chỉ đường đến siêu thị
MH tìm hàng hóa theo chuỗi
MH tìm hàng hóa theo mã vạch
MH tìm hàng hóa theo danh mục
Màn hình trang web của siêu thị
(nếu có)
1 2 3 4 5 6 7
1
8
82
Hình - Sơ đồ màn hình mô tả [2] cho hình 5-11
Hình - Sơ đồ màn hình mô tả [3] cho hình 5-11
5.5.2 Ý nghĩa các màn hình theo các nhánh của sơ đồ 5-11
Nhánh số 1: Tìm theo danh mục
Màn hình tìm theo mã vạch
Màn hình danh sách hàng hóa
cần mua
Màn hình xem danh sách hàng
cần mua
Màn hình danh sách hàng hóa
ưa thích
Màn hình xem danh sách hàng
hóa ưa thích
Màn hình danh sách hàng hóa theo mã vạch
Màn hình hàng hóa cần mua
Màn hình thêm hàng cần mua
Màn hình xem hàng cần mua
Màn hình xóa hàng cần mua
Màn hình gửi tin nhắn
83
Màn hình
chính
Màn hình tìm
theo danh
mục
Màn hình tìm
theo loại hàng
hóa
Màn hình
danh sách
hàng hóa
Màn hình chi
tiết hàng hóa
Chứa 6 chức
năng chính của
ứng dụng trên
6 nút nhấn.
Ngoài ra, trong
thực đơn chính
có Thiết lập
chương trình,
và thông tin
chương trình.
Hiện danh
sách danh mục
hàng hóa có
trong cơ sở dữ
liệu bao gồm
hình ảnh và
thông tin.
Hiện danh
sách loại hàng
hóa ứng với
danh mục
hàng hóa đã
chọn.
Hiện danh
sách hàng hóa
ứng với loại
hàng hóa đã
chọn.
Hiện thông tin
tin chi tiết
hàng hóa ứng
với hàng hóa
đã chọn trong
màn hình danh
sách hàng hóa.
Nhánh số 2: Các màn hình tìm theo hệ thống siêu thị
Màn hình tìm
theo hệ thống siêu
thị
Màn hình
thông tin hệ
thống siêu thị
Màn hình trang web của hệ thống siêu thị
Màn hình siêu thị gần nhất hoặc siêu thị cần
84
Chứa các Logo của
hệ thống siêu thị.
Các thông tin và
logo hệ thống siêu
thị này được cập
nhật về từ
webservice khi có
sự thay đổi.
Gồm thông tin
liên kết trang
web của hệ
thống siêu thị,
danh sách các
siêu thị và nút
nhấn dẫn đường
đến siêu thị gần
nhất nằm trong
hệ thống.
đến
Hướng dẫn chỉ đường đến siêu thị thông qua
GoogleMap đồng thời có danh sách các
điểm trên lộ trình để người đi tiện theo dõi.
Màn hình thông tin siêu thị
Thông tin của siêu thị đồng thời có nút nhấn
xem lộ trình bản đồ đường đi và màn hình
gọi điện thoại.
Tìm hàng hóa theo chuỗi/Tìm hàng hóa theo
mã vạch/Tìm hàng hóa theo danh mục:
được trình bày trong các nhánh tiếp theo.
Nhánh số 3: Các màn hình tìm theo chuỗi
85
Màn hình tìm theo
chuỗi
Màn hình con của tìm theo chuỗi
Người dùng có thể nhập
vào các giá trị gồm tên
hàng hóa, mã vạch, chọn
hình thức khuyến mãi
hay không, giá tiền.
Hỗ trợ thêm các điều kiệm tìm kiếm như chọn thêm danh
mục, loại hàng hóa, hệ thống siêu thị, xuất xứ và nhà sản
xuất hàng hóa. Tất cả các chuỗi nhập vào đều là tiếng
Việt có dấu. Ứng dụng đòi hỏi người dùng tải về
VietnameseIMEI để có thể gõ tiếng Việt theo kiểu là Vni
và Telex.
Nhánh số 4: Tìm theo mã vạch
Màn hình tìm theo mã
vạch
Màn hình con của
màn hình tìm theo mã
vạch
Màn hình gợi ý khi chụp
mã vạch không thành
công
Màn hình chụp mã vạch giúp
chụp hình ảnh mã vạch và
phân giải chúng thành chuỗi
mã vạch tương ứng để làm
dữ liệu đầu vào cho việc tìm
kiếm, thêm vào hàng hóa ưa
Màn hình này là kết quả
sau khi chụp mã vạch
thành công. Nếu không
thì sẽ xuất hiện gợi ý
như hình bên.
Màn hình này sẽ hiện hộp
thoại gợi ý tìm theo chuỗi
nếu không chụp mã vạch
thành công.
86
thích và cần mua.
Nhánh số 5: Hàng hóa cần mua
Màn hình hàng hóa cần mua Thêm hàng hóa cần mua
Gồm 2 danh sách các hàng hóa:
trên là chưa mua, dưới là đã
mua. Khi đã mua hàng, người
dùng nhấp chọn hàng hóa trên
danh sách trên thì hàng hóa đó
sẽ xuống danh sách dưới và
được thiết lập là đã mua.
Gồm các thông tin hàng hóa và hình ảnh. Tùy
theo người dùng, ít nhất thông tin phải có là hình
ảnh hoặc tên hàng hóa.
Xóa hàng cần mua
Người dùng xóa hay xóa hết tất cả hàng hóa cần
mua.
Màn hình gửi tin nhắn
Người dùng có thể chia sẻ nội dung cầm mua qua
tin nhắn SMS.
Nhánh số 6: Hàng hóa ưa thích
87
Màn hình danh sách hàng hóa ƣa
thích
Ý nghĩa
Người dùng sử dụng màn hình hàng hóa ưa
thích để tiện theo dõi và lưu vết các hàng
hóa mà họ hiện đang quan tâm và cần theo
dõi giá cả. Với chức năng này, họ có thể
theo dõi giá cả thay đổi để tiện ra quyết
định mua khi cần.
Nhánh số 7 và 8: Màn hình tùy chọn và màn hình thông tin
Màn hình tùy
chọn
Ý nghĩa Màn hình
thông tin
nhóm
Ý nghĩa
Người dùng có thể xóa các hình
tạm trong quá trình xem danh sách
hàng hóa và xóa các mặt hàng ưa
thích. Đồng thời, chúng ta có thể
cập nhật dữ liệu từ webservice.
Màn hình
thông tin
chương trình
và thông tin
về chúng tôi.
Màn hình chi tiết
Các màn hình
chi tiết
Ý nghĩa
Màn hình chi tiết hàng hóa
Màn hình chi tiết chứa tất cả các thông tin giá cả với màu sắc
phân biệt có khuyến mãi hay không, giá áp dụng từ ngày nào đến
ngày nào, nút nhấn liên kết thông tin siêu thị, thêm vào hàng cần
mua, thêm vào hàng ưa thích, giá bán hàng đó tại các siêu thị
khác và giá bán các mặt hàng tương tự.
88
Thẻ xem thông tin khuyến mãi
Có khung chứa riêng các thông tin khuyến mãi (nếu có).
Thẻ xem thông tin nhà sản xuất, xuất xứ và thông tin hàng
hóa
Có khung chứa riêng các thông tin nhà sản xuất, xuất xứ và
thông tin hàng hóa.
Màn hình phóng to hình hàng hóa
Với hình lớn để tiện cho người dùng quan sát.
5.6 Cài đặt, thử nghiệm và so sánh
5.6.1 Cài đặt
Chúng tôi tiến hành cài đặt thử nghiệm ứng dụng lên máy có cấu hình như
sau:
HTC HERO NEXUS ONE
- Hệ điều hành Android 1.5
- Bộ xử lí: Qualcomm 528 Ghz
- RAM 288MB
- Bộ nhớ trong 512 MB
- SDCard: 4 GB
- Hệ điều hành Android 2.1
- Bộ xử lí: SnapDragon 1Ghz
- RAM: 512 MB
- Bộ nhớ của máy: 512 MB
- SDCard: 8GB
89
5.6.2 Kết quả thử nghiệm và so sánh
Chúng tôi đã thử nghiệm trên 2 máy trên, kết quả cho thấy trong cùng một
thời điểm thì webservice trả về cho 2 client 2 kết quả như mong muốn thể hiện giải
pháp của chúng tôi đưa ra là hoàn tốt giải quyết được tình trạng nhiều máy yêu cầu
kết quả từ máy chủ và máy chủ trả về kết quả ứng với từng client. Kết quả trả về
theo từng đợt liên tục mà không bị trùng lấp. Tín hiệu rất ổn định nếu chúng tôi sử
dụng mạng 3G; trong khi đó, nếu dùng Wifi của trường thì đôi khi chập chờn không
lấy được danh sách.
Ngoài ra, chúng tôi đã thử dùng chức năng chỉ đường bằng GPS với mạng
3G của Viettel để truy cập tìm đường đi đến siêu thị gần nhất từ vị trí hiện tại của
chúng tôi. Thì độ chính xác của vị trí hiện tại chính xác trong bán kính 10 mét tùy
theo vị trí chúng tôi đang đứng có cản trở sóng từ vệ tinh hay không. Nếu không có
tín hiệu từ vệ tinh thì ứng dụng tự động chuyển sang tín hiệu vị trí của Viettel cung
cấp, nhưng độ chính xác của nó tùy thuộc vào từng vị trí chúng tôi đứng. Nếu ở
ngoại thành thì khoảng 1000 mét trở lại, còn trong nội ô thì khoảng vài trăm mét trở
lại. Ngoài ra, nếu dùng sóng Wifi, thì ứng dụng cũng có thể bắt thông tin vị trí với
độ chính xác cở vài chục mét trở lại.
Giao diện chuyển động hoạt cảnh, tốc độ xử lí ứng dụng tương đối nhanh
chóng tạo cảm giác mượt mà khi dùng ứng dụng.
Chúng tôi tiến hành gửi tin nhắn qua SMS và sử dụng các chức năng khác
đều tốt.
So với các ứng dụng thì giao diện ứng dụng chúng tôi có phần bắt mắt hơn
và do sử dụng tiếng Việt nên dễ dàng sử dụng đối với người Việt Nam.
Trong chương này, chúng ta đã hiểu được cái nhìn tổng quan về chức năng,
các lớp đối tượng của hệ thống ứng dụng trên cả 2 tầng là webservice và client.
Chúng tôi đưa ra và giải thích về mô hình dữ liệu đã chọn trên server và từng chức
năng trên client cùng với giải pháp của nó. Và ta đã cài đặt và chạy thử ứng dụng
với những so sánh trên. Trong chương cuối ta sẽ tổng kết các kết quả đạt được và
các hướng phát triển tương lai của ứng dụng.
90
Chương 6 Tổng kết
Chương này chúng tôi sẽ trình bày các kết quả đạt được trong luận văn
này và hướng phát triển của nó.
6.1 Các kết quả đạt được
Trong quá trình thực hiện đề tài “Tìm hiểu hệ điều hành Android và viết
ứng dụng minh họa”, nhóm đã đạt được những kết quả sau:
Có cơ hội nghề nghiệp trong tương lai. Theo như phân tích của chúng
tôi trong chương đầu tiên, Android hiện nay đang có tiềm năng phát triển khá
mạnh. Lúc cuốn khóa luận này được báo cáo thì các công ty lớn như FPT
“khát” nhân sự Android. Cho nên cơ hội việc làm cho Android là khá lớn.
Tìm hiểu được hệ điều hành Android. Chúng tôi đã tìm hiểu được hệ
điều hành Android và viết một cuốn phụ lục tương đối đầy đủ về các bài
phân tích sự phát triển tương lai của Android, các vấn đề lý thuyết cơ bản
trên Android, và cách thức lập trình theo từng chủ đề trên Android một cách
chi tiết. Có thể còn nhiều thiếu sót trong phụ lục nhưng phần nào cũng giúp
được người mới làm quen với Android có thể tiếp cận được Android một
cách nhanh chóng.
Xây dựng nên khung chung cho lập trình trên CSDL SQLite trên
Android là lớp DataProvider với nhiều tính năng như kết nối và đóng CSDL,
đảm bảo giao tác, đưa ra nhiều phương thức thao tác chuẩn trên CSDL. Từ
lớp đó, ta có thể viết nhiều lớp đối tượng để thao tác trên các bảng dữ liệu.
Xây dựng nên khung cho lập trình dạng 2 tầng trở lên với lớp
ServiceProvider. Lớp này tạo nên khung chung cho việc truy xuất dữ liệu từ
một Webservice.
Xây dựng được ứng dụng tìm kiếm thông tin và giá cả hàng hóa. Với
bộ dữ liệu thật do tổng hợp từ những lần đi thực tế và tổng hợp từ Internet,
91
ứng dụng có thể đi vào thực tế một cách dễ dàng. Giúp người dùng tìm kiếm
thông tin hàng hóa (thông tin sản phẩm, giá cả, khuyến mãi, …), thông tin hệ
thống siêu thị (địa chỉ, vị trí, loại hàng hóa, …) mà không cần đi đến nơi hay
tìm thông tin hàng hóa trên các trang web trên di dộng vì có phần bất tiện và
các thông tin không tập trung.
6.2 Hướng phát triển:
Bộ các hàm trên webservice chưa chuẩn và đẹp về mặt phân hoạch
phát triển trong tương lai mặc dù đã sử dụng mô hình 3-tier-3layer.
Bổ sung trang web giao tiếp giữa nhân viên siêu thị và hệ thống để
siêu thị chủ động trong việc cập nhật thông tin hệ thống siêu thị và hàng hóa
khuyến mãi của mình. Trên trang web có cơ chế quản lí hai loại tài khoản là
nhân viên siêu thị và Administrator quản trị webservice.
Hoàn thiện chức năng dẫn đường đi thông qua giọng nói vì người
dùng tại thành phố Hồ Chí Minh dùng xe gắn máy làm phương tiện giao
thông chính cho nên không thể vừa nhìn màn hình điện thoại mà vừa chạy…
Xây dựng hệ thống với giao diện có thể thay đổi Skin theo từng mùa,
dịp lễ, hay một dịp bất kì.
Cho chọn nhiều loại ngôn ngữ bằng cách thay đổi đồng loạt để thích
ứng nhiều người dùng.
92
TÀI LIỆU THAM KHẢO
Tài liệu tiếng Anh
[1]. Chris Haseman, Android Essentials, Apress, United States of America, 2008.
[2]. Ed Burnette, Hello, Android, ThePragmaticBookshelf, United States of America,2009.
[3]. Els van de Kar and Alexander Verbraeck, Designing Mobile Service Systems, 2007.
[4]. John Eddy, Patricia DiGiacomo Eddy, Google on the Go: Using an Android-Powered
Mobile Phone, Que, 2009
[5]. Mark L. Murphy, Beginning Android, Apress, United States of America, 2009.
[6]. Reto Meier, Professional Android Application Development, Wiley, Canada, 2009.
[7]. Rick Rogers, John Lombardo, Android Application Development, 1st Edition, O'Reilly
Media, 2009.
[8]. Sayed Y. Hashimi and Satya Komatineni, Pro Android, Apress, United States of
America,2009.
[9]. Vijay Kumar, Mobile Database Systems, Wiley, Canada, 2006.
[10]. W. Frank Ableson, Charlie Collins, and Robi Sen, Unlocking Android, Manning, 2009.
[11]. Project Magnatune - Evan Charlton - Fourth-year student at Rochester Institute of
Technology.
[12]. Google Map Parameters: http://mapki.com/wiki/Google_Map_Parameters#General
[13]. Android Developers: http://developer.Android.com/index.html
[14]. Android Market: http://www.Android.com/market/
[15]. Anddev.org: http://www.anddev.org/
[16]. Stack Overflow: http://stackoverflow.com/
Tài liệu tiếng Việt
[17]. Tô Xuân Khôi Nguyên, Đoàn Chánh Thức, Nghiên cứu và xây dựng từ điển trên G-
phone, 2008.
[18]. Diễn đàn G-Android: http://www.g-Android.com/forum/
[19]. Diễn đàn Tinh Tế: http://www.tinhte.com/home/
[20]. Dịch vụ Web: http://www.phpvn.org/index.php?topic=301.0