103
TRƯỜNG ĐẠI HC KHOA HC TNHIÊN KHOA CÔNG NGHTHÔNG TIN VÕ THÀNH NHT PHAN THÀNH TRUNG TÌM HIU HĐIỀU HÀNH ANDROID VÀ XÂY DNG NG DNG MINH HA KHÓA LUN TT NGHIP CNHÂN CNTT TP.HCM, 2010

Thesis Final

Embed Size (px)

Citation preview

Page 1: Thesis Final

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

Page 2: Thesis Final

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

Page 3: Thesis Final

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

……………………………………………….………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

………………………………………………………………………………………

Page 4: Thesis Final

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

Page 5: Thesis Final

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

Page 6: Thesis Final

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

Page 7: Thesis Final

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

Page 8: Thesis Final

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

Page 9: Thesis Final

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

Page 10: Thesis Final

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

Page 11: Thesis Final

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

Page 12: Thesis Final

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

Page 13: Thesis Final

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.

Page 14: Thesis Final

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

Page 15: Thesis Final

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í

Page 16: Thesis Final

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, …

Page 17: Thesis Final

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

Page 18: Thesis Final

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à

Page 19: Thesis Final

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.

Page 20: Thesis Final

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 đó

Page 21: Thesis Final

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

Page 22: Thesis Final

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

Page 23: Thesis Final

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.

Page 24: Thesis Final

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

Page 25: Thesis Final

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

Page 26: Thesis Final

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

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

Page 27: Thesis Final

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…

Page 28: Thesis Final

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.

Page 29: Thesis Final

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

Page 30: Thesis Final

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ô,

Page 31: Thesis Final

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.

Page 32: Thesis Final

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.

Page 33: Thesis Final

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.

Page 34: Thesis Final

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.

Page 35: Thesis Final

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

Page 36: Thesis Final

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:

Page 37: Thesis Final

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-

Page 38: Thesis Final

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.

Page 39: Thesis Final

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.

Page 40: Thesis Final

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:

Page 41: Thesis Final

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:

Page 42: Thesis Final

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:

Page 43: Thesis Final

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.

Page 44: Thesis Final

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

Page 45: Thesis Final

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

Page 46: Thesis Final

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

Page 47: Thesis Final

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.

Page 48: Thesis Final

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

Page 49: Thesis Final

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

Page 50: Thesis Final

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.

Page 51: Thesis Final

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

Page 52: Thesis Final

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

Page 53: Thesis Final

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":

Page 54: Thesis Final

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

Page 55: Thesis Final

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.

Page 56: Thesis Final

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

Page 57: Thesis Final

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

Page 58: Thesis Final

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.

Page 59: Thesis Final

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.

Page 60: Thesis Final

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

Page 61: Thesis Final

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.

Page 62: Thesis Final

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

Page 63: Thesis Final

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.

Page 64: Thesis Final

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,

Page 65: Thesis Final

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.

Page 66: Thesis Final

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,

Page 67: Thesis Final

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.

Page 68: Thesis Final

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.

Page 69: Thesis Final

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.

Page 70: Thesis Final

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

Page 71: Thesis Final

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

Page 72: Thesis Final

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.

Page 73: Thesis Final

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.

Page 74: Thesis Final

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

Page 75: Thesis Final

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.

Page 76: Thesis Final

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

Page 77: Thesis Final

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

Page 78: Thesis Final

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

Page 79: Thesis Final

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:

Page 80: Thesis Final

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:

Page 81: Thesis Final

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.

Page 82: Thesis Final

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:

Page 83: Thesis Final

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.

Page 84: Thesis Final

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.

Page 85: Thesis Final

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

Page 86: Thesis Final

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.

Page 87: Thesis Final

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.

Page 88: Thesis Final

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

Page 89: Thesis Final

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

Page 90: Thesis Final

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

Page 91: Thesis Final

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

Page 92: Thesis Final

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

Page 93: Thesis Final

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

Page 94: Thesis Final

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

Page 95: Thesis Final

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

Page 96: Thesis Final

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.

Page 97: Thesis Final

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

Page 98: Thesis Final

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

Page 99: Thesis Final

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

Page 100: Thesis Final

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.

Page 101: Thesis Final

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,

Page 102: Thesis Final

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.

Page 103: Thesis Final

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