ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Lại Quang Tùng ỨNG DỤNG LƯU TRỮ THÔNG TIN BẰNG CHUỖI MÃ VẠCH

KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY

Ngành: Công nghệ thông tin

HÀ NỘI - 2009

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Lại Quang Tùng ỨNG DỤNG LƯU TRỮ THÔNG TIN BẰNG CHUỖI MÃ VẠCH

KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY

Ngành: Công nghệ thông tin

Cán bộ hướng dẫn: TS. Trương Anh Hoàng HÀ NỘI - 2009

Lời cảm ơn

Trước tiên, em xin gửi lời cảm ơn sâu sắc tới thầy Trương Anh Hoàng (bộ môn

Công Nghệ Phần Mềm, trường Đại học Công Nghệ, Đại học Quốc Gia Hà Nội). Thầy

đã tận tình chỉ dẫn cho em từ những bước đi đầu tiên đến khi hoàn thành đề tài khóa luận này. Thầy luôn giúp em giải quyết vấn đề trong những lúc khó khăn. Ở thầy em

học được không chỉ là sự hiểu biết mà còn là cách làm việc và lẽ sống.

Em xin gửi lời cảm ơn tới tất cả các thầy, cô giáo trong khoa Công nghệ thông

tin – trường Đại học Công Nghệ – Đại học Quốc Gia Hà Nội đã nhiệt tình giảng dạy cho chúng em những tri thức của kỷ nguyên mới – kỷ nguyên công nghệ và truyền thông.

Cảm ơn những người bạn của tôi, những người đã giúp đỡ tôi rất nhiều trong học

tập, trong cuộc sống và hoàn thành khóa luận này.

Cuối cùng, con xin gửi lời cảm ơn đến bố, mẹ và gia đình. Bố mẹ luôn là chỗ dựa

tinh thần vững chắc cho con.

Hà Nội, ngày 22 tháng 5 năm 2009

Lại Quang Tùng

Tóm tắt

Mã vạch ngày nay đã trở nên phổ biến với mỗi người trong chúng ta, không chỉ

đem lại sự thuận tiện cho người sử dụng, nó còn mang lại một phong cách mới trong

mua sắm và tra thông tin về sách sản phẩm. Không dừng lại ở đó, tiềm năng của mã vạch còn rất lớn khi xuất hiện các loại mã vạch hai chiều, ghi được nhiều thông tin hơn

các mã vạch một chiều trước kia.

Khóa luận sẽ trình bày về mã vạch nói chung và mã vạch QR nói riêng, giới

thiệu về thư viện mã nguồn mở Zxing để đọc mã vạch, cách sử dụng thư viện này để phát triển phần mềm. Khóa luận cũng đi nghiên cứu về các nền tảng di động và đặc biệt là nền tảng Android. Ở phần cuối, khóa luận sẽ trình bày ứng dụng thư viện Zxing

vào việc xây dựng “Ứng dụng lưu trữ thông tin bằng chuỗi mã vạch” trên nền tảng

Android. Ứng dụng này xuất phát cho phép mã hóa các tệp nhỏ bất kỳ thành một chuỗi

các mã vạch, và giải mã chúng để trở lại thành tệp ban đầu. Cơ sở này cho phép ta

truyền số liệu giữa hai thiết bị thông qua màn hình (hoặc các thiết bị hiển thị được hình

ảnh như giấy) và camera. Phần phụ lục cung cấp một số thuật ngữ thường dùng của

Android.

Mục lục

Mở đầu.............................................................................................................. 1 Chương 1: Các nền tảng di động ..................................................................... 3 1.1 Brew ............................................................................................................................ 5 1.1.1 Giới thiệu .............................................................................................................. 5 1.1.2 Ưu nhược điểm...................................................................................................... 5 1.2 Java ME...................................................................................................................... 6 1.2.1 Giới thiệu .............................................................................................................. 6 1.2.2 Ưu nhược điểm...................................................................................................... 6 1.3 Symbian ...................................................................................................................... 7 1.3.1 Giới thiệu .............................................................................................................. 7 1.3.2 Ưu nhược điểm...................................................................................................... 7 1.4 BlackBerry.................................................................................................................. 8 1.4.1 Giới thiệu .............................................................................................................. 8 1.4.2 Ưu nhược điểm...................................................................................................... 8 1.5 Windows Mobile......................................................................................................... 8 1.5.1 Giới thiệu .............................................................................................................. 8 1.5.2 Ưu nhược điểm...................................................................................................... 9 1.6 iPhone ......................................................................................................................... 9 1.6.1 Giới thiệu .............................................................................................................. 9 1.6.2 Ưu nhược điểm...................................................................................................... 9 1.7 Android..................................................................................................................... 10 1.7.1 Giới thiệu ............................................................................................................ 10 1.7.2 Ưu nhược điểm.................................................................................................... 10 Chương 2: Nền tảng Android ........................................................................ 12 2.1 Khái niệm ................................................................................................................. 12 2.2 Đặc điểm ................................................................................................................... 13 2.2.1 Tính mở............................................................................................................... 13 2.2.2 Tính ngang bằng của các ứng dụng ...................................................................... 13 2.2.3 Phá vỡ rào cản phá triển ứng dụng ....................................................................... 13 2.2.4 Dễ dàng và nhanh chóng xây dựng ứng dụng....................................................... 13 2.3 Kiến trúc của nền tảng Android .............................................................................. 14 2.3.1 Kiến trúc tổng quát .............................................................................................. 14 2.3.2 Hệ điều hành ....................................................................................................... 14 2.3.3 Thư viện và các giao diện lập trình ứng dụng....................................................... 14 2.4 Các thành phần của ứng dụng ................................................................................. 17 2.4.1 Hoạt động (Activity)............................................................................................ 17 2.4.2 Dịch vụ................................................................................................................ 20 2.4.3 Broadcast receivers (bộ nhận quảng bá) ............................................................... 21 2.4.4 Content provider.................................................................................................. 21 2.4.5 Các thành phần kích hoạt (các Intent) .................................................................. 22 2.4.6 Ngắt một thành phần............................................................................................ 23 2.4.7 Tập tin khai báo (manifest) .................................................................................. 23 2.4.8 Bộ lọc Intent........................................................................................................ 24 2.5 Công cụ hỗ trợ lập trình Android............................................................................ 25 Chương 3: Mã vạch, mã QR và thư viện Zxing............................................ 27 3.1 Mã vạch .................................................................................................................... 27

3.1.1 Khái niệm............................................................................................................ 27 3.1.2 Ứng dụng ............................................................................................................ 27 3.2 Mã QR ...................................................................................................................... 28 3.2.1 Khái niệm............................................................................................................ 28 3.2.2 Khả năng lưu trữ.................................................................................................. 29 3.3 Thư viện Zxing ......................................................................................................... 29 3.3.1 Khái niệm............................................................................................................ 29 3.3.2 Cách sử dụng....................................................................................................... 30 Chương 4: Xây dựng ứng dụng lưu trữ thông tin bằng chuỗi mã vạch ...... 34 4.1 Đặt vấn đề................................................................................................................. 34 4.2 Giải pháp .................................................................................................................. 34 4.3 Phân tích ................................................................................................................... 34 4.3.1 Các chức năng của hệ thống................................................................................. 34 4.3.2 Xác định tác nhân và ca sử dụng .......................................................................... 35 4.3.3 Mối quan hệ giữa tác nhân và các ca sử dụng....................................................... 35 4.3.4 Biểu đồ tuần tự .................................................................................................... 37 4.4 Thiết kế ..................................................................................................................... 43 4.4.1 Thiết kế lớp ......................................................................................................... 43 4.5 Thiết kế giao diện ..................................................................................................... 46 4.6 Kiểm thử chương trình ............................................................................................ 46 4.6.1 Kiểm thử ca sử dụng............................................................................................ 46 4.6.2 Kết quả thực nghiệm............................................................................................ 49 Kết luận........................................................................................................... 55

Danh mục ký hiệu viết tắt

Giải thích

Ký hiệu Tiếng Anh Tiếng Việt

Giao diện lập trình ứng dụng API Application Programming Interface

Code Division Multiple Access CDMA

GPRS

GSM General Packet Radio Service Global System for Mobile Communications

Java 2 Standard Edition J2SE

Mobile Information Device Profile MIDP

Operating System Personal Computer OS PC

Software Development Kit SDK

Universal Serial Bus USB

Wireless Fidelity Một công nghệ trong hệ thống thông tin di động Gói dịch vụ vô tuyến tổng hợp Hệ thống thông tin di động toàn cầu Là đặc tả và cũng là nền tảng thực thi cho các ứng dụng Java Thuộc tính thông tin thiết bị di động Hệ điều hành Máy tính cá nhân Bộ công cụ phát triển phần mềm Một chuẩn kết nối tuần tự trong máy tính Hệ thống mạng không dây Wi-Fi

Danh mục bảng biểu

Bảng 1:

Thị trường di động năm 2008 [1] ........................................................................ 3

Bảng 2: Mối quan hệ giữa tác nhân và các ca sử dụng.................................................... 35

Bảng 3:

Bảng hành động của tác nhân và phản ứng của hệ thống với ca sử dụng Encode36

Bảng 4:

Bảng hành động của tác nhân và phản ứng của hệ thống với ca sử dụng Decode36

Bảng 5:

Bảng hành động của tác nhân và phản ứng của hệ thống với ca sử dụng Help ... 37

Bảng 6:

Biểu đồ tuần tự ca sử dụng Decode files ........................................................... 40

Bảng 7:

Bảng ca kiểm thử mã hóa tập tin ....................................................................... 47

Bảng 8:

Bảng ca kiểm thử giải mã tập tin....................................................................... 48

Bảng 9:

Bảng ca kiểm thử giải mã ảnh ........................................................................... 49

Danh mục hình vẽ

Hình 1:

Bản đồ phát triển điện thoại di động [2] .............................................................. 4

Hình 2:

Điện thoại Android, HTC Dream (trái) và HTC Magic (phải) ........................... 12

Hình 3:

Nhân Linux trên Android.................................................................................. 14

Hình 4:

Thư viện lâp trình ứng dụng trên Android ......................................................... 14

Hình 5:

Khung ứng dụng ............................................................................................... 16

Hình 6:

Các ứng dụng trên Android............................................................................... 16

Hình 7:

Vòng đời của một hoạt động ............................................................................. 19

Hình 8: Một ảnh mã QR ................................................................................................ 28

Hình 9:

Biểu đồ ca sử dụng hệ thống ............................................................................. 35

Hình 10: Biểu đồ tuần tự của hệ thống............................................................................. 38

Hình 11: Biểu đồ tuần tự ca sử dụng Encode ................................................................... 39

Hình 12: Biểu đồ tuần tự ca sử dụng Decode Images ....................................................... 41

Hình 13: Biểu đồ hoạt động của hệ thống ........................................................................ 42

Hình 14: Biểu đồ lớp của hệ thống .................................................................................. 45

Hình 15:

Thiết kế giao diện chương trình ........................................................................ 46

Hình 16: Mã hóa tập tin ringtone.mid .............................................................................. 49

Hình 17: Các ảnh mã QR được chương trình tạo ra từ tập tin MID ringtone.mid.............. 52

Hình 18: Một số hình ảnh về giải mã các tập tin ảnh........................................................ 53

Hình 19: Màn hình danh sách các ứng dụng .................................................................... 56

Hình 20: Màn hình chính của chương trình...................................................................... 56

Hình 21: Cửa sổ chức năng mã hóa ................................................................................. 57

Hình 22: Cửa sổ giải mã .................................................................................................. 57

Hình 23: Nhập đường dẫn tập tin ảnh đầu tiên được mã hóa ............................................ 57

Mở đầu

Ngày nay, việc ứng dụng mã vạch đã trở nên phổ biến đối với mọi người kể cả

trên thế giới và Việt Nam. Mỗi khi đi siêu thị chúng ta vẫn thấy người thu ngân dùng

một thiết bị quét mã vạch in trên sản phẩm giúp cho việc thanh toán dễ dàng hơn. Đấy mới chỉ là một ứng dụng nhỏ của việc sử dụng mã vạch vào đời sống thường ngày.

Cùng với sự phát triển của công nghệ, mã vạch đã cải tiến không chỉ còn đơn

giản là lưu mã của sản phẩm mà còn có khả năng lưu được nhiều thông tin của sản

phẩm hơn với việc sử dụng mã vạch 2 chiều.

Một lợi thế của ứng dụng mã vạch là khả năng tiện dụng, chúng ta có thể sử dụng

tại bất kỳ đâu, bất kỳ khi nào bằng việc sử dụng một thiết bị thông minh có hỗ trợ máy

ảnh (ví dụ: điện thoại di động) có khả năng đọc mã vạch và giải mã mã vạch đó.

Đặt trong hoàn cảnh giữa hai thiết bị Android không có sự bất kỳ kết nối nào (không Bluetooth, không Wi-Fi) mà chúng lại muốn chia sẽ dữ liệu cho nhau. Khóa

luận sẽ đưa ra một giải pháp cho việc lưu trữ, chia sẻ thông tin này dựa trên mã vạch 2

chiều QR kết hợp với nền tảng Google Android − một nền tảng di động mới đầy hứa

hẹn và là đối thủ xứng tầm của iPhone.

Khóa luận sẽ tập trung nghiên cứu về các nền tảng di động, các đặc điểm của

chúng, đi sâu nghiên cứu nền tảng Google Android và công nghệ mã vạch hiện nay,

cuối cùng là ứng dụng vào giải quyết bài toán ứng dụng lưu trữ thông tin bằng chuỗi

mã vạch

Nội dung khóa luận bao gồm 6 phần với các nội dung chính sau:

Mở đầu: Đặt vấn đề

Chương 1: Giới thiệu khái quát các nền tảng di động hiện nay, đưa ra các điểm

mạnh, điểm yếu của từng nền tảng.

Chương 2: Giới thiệu về nền tảng di động Google Android, các đặc điểm, cấu

trúc và các công cụ phát triển của Android

1

Chương 3: Trình bày về mã vạch và mã QR, các ứng dụng của chúng trong đời sống hàng ngày. Chương này cũng trình bày về thư viện mã nguồn mở Zxing, ứng dụng và cách sử dụng của thư viện mở này.

Chương 4: Ứng dụng vào giải quyết bài toán “Ứng dụng lưu trữ thông tin bằng

chuỗi và mã vạch” trên Android. Ứng dụng giúp lưu trữ và chia sẽ thông tin giữa các điện thoại Android với nhau.

Kết luận: Tổng kết lại toàn khóa luận, những gì đã làm được, so sánh với các

2

khóa luận trước về Android và đưa ra hướng phát triển tiếp theo cho khóa luận.

Chương 1: Các nền tảng di động

Hiện nay, chúng ta biết đến rất nhiều nền tảng di động khác nhau như: Brew,

Java ME, BlackBerry, iPhone…Nhưng không hẳn ai trong mỗi chúng ta đều biết về

chúng, chúng có những ưu điểm gì những nhược điểm gì? Trong nội dung chương này, khóa luận sẽ giới thiệu về một số nền tảng di động phổ biển hiện nay và những

đặc điểm của chúng để thấy được điểm mạnh, điểm yếu của mỗi nền tảng. Trước hết là

một số hình ảnh tổng quan về thị trường di động. Bảng 1 là thống kê năm 2008 về thị

phần của thị trường di động [1]. Hình 1 là bức tranh toàn cục về các nền tảng di động và các công ty phát triển chúng [2].

3

Bảng 1: Thị trường di động năm 2008 [1]

4

Hình 1: Bản đồ phát triển điện thoại di động [2]

1.1 Brew 1.1.1 Giới thiệu

Brew [3] (Binary Runtime Environment for Wireless  môi trường thực thi nhị

phân cho thiết bị không dây) là nền tảng ứng dụng di động được hãng Qualcomm phát

triển, ra đời chính thức từ năm 2001. Brew có nguồn gốc phát triển dành cho các điện thoại CDMA, nhưng đã chuyển sang hướng phát triển mới bao gồm cả GSM/GPRS.

Nó cho phép tải và chạy những chương trình nhỏ như trò chơi, hay gửi tin nhắn, chia sẻ hình ảnh, xác định vị trí, v.v….

Một ưu thế của nền tảng này đó là các nhà phát triển ứng dụng có thể dễ dàng

chuyển các ứng dụng của họ sang các thiết bị của Qualcomm. BREW làm việc ở giữa

ứng dụng với hệ điều hành trên chíp của thiết bị không dây, cho phép những người phát triển phần mềm ứng dụng không cần phải viết mã cho giao tiếp hệ thống hay phải

hiểu các ứng dụng không dây.

1.1.2 Ưu nhược điểm

Ưu điểm

Kiểm thử: nhiều người phát triển có thể cho rằng việc kiểm thử phức tạp của ứng

dụng Brew làm chậm ngày phát hành hay chi phí cao của phần mềm. Tuy nhiên việc

kiểm thử kỹ lưỡng sẽ giúp các ứng dụng trên Brew cuối cùng ít lỗi nhất và có chất

lượng cao hơn.

Giao diện lập trình ứng dụng Brew (Brew API): thư viện lập trình ứng dụng của

Brew mạnh và dễ sử dụng hơn của nhiều nền tảng khác (như API của Java ME).

Đồ họa: phát triển đồ họa cho các trò chơi hay ứng dụng khác dễ dàng hơn các

nền tảng khác, bởi Brew cung cấp khả năng truy cập vào vùng đệm màn hình.

Không giới hạn kích thước bộ nhớ: Brew không giới hạn kích thước bộ nhớ như

J2ME (có giới hạn là 128K).

Giảm sự cạnh tranh cho những người phát triển ứng dụng: do người phát triển phải trả phí kiểm thử phần mềm của họ, điều này làm giảm tính cạnh tranh. Trong phần lớn trường hợp, chúng ta không phải lo về các phần mềm miễn phí.

Nhược điểm

Không phổ biến: dù có nhiều ưu điểm nó vẫn không phổ biến như các nền tảng

5

khác như Java ME.

Tốn phí kiểm thử: để phần mềm của mình có thể được chấp nhận và sẵn sàng

bán, nó phải được kiểm thử bởi NTSL (National Software Testing Labs) và tốn ít nhất khoảng 400 đô la Mỹ.

Không nén được: mã nguồn Brew không thể nén lại vì lý do an ninh và có thể

làm tăng kích thước phần mềm.

Hồ sơ thiết bị: hồ sơ thiết bị của Brew thường rất đắt, không miễn phí như MIDP

(Mobile Information Device Profile) của J2ME.

Không tương thích: mặc dù có nơi để kiểm thử, nhiều thiết bị di động vẫn không

tương thích với nền tảng Brew [4].

1.2 Java ME 1.2.1 Giới thiệu

Java ME (viết tắt của Java Micro Edition) là một nhánh phát triển của nền tảng

Java, nhằm mục đích cung cấp một bộ API để phát triển ứng dụng trên các thiết bị

nhúng như điện thoại di động, PDA, các thiết bị cầm tay…Trước kia Java ME có tên

khác là J2ME (Java 2 Micro Edition).

1.2.2 Ưu nhược điểm

Ưu điểm

Khả chuyển: viết một lần chạy mọi nơi, đây là lợi thế lớn nhất của Java ME. Các

ứng dụng, nhất là ứng dụng trò chơi trên máy bàn dễ dàng chuyển sang cho các thiết bị

cầm tay.

Bảo mật: mã nguồn được chạy trong giới hạn của máy ảo Java. MIDlet có thể

được ký hiệu bằng mật mã và xác nhận trên thiết bị. Java ME có kiến trúc phân quyền

cao cấp.

Bộ giao diện lập trình ứng dụng phong phú, ngày càng hoàn thiện hơn. Ngoài ra, Java ME được sự ủng hộ của các hãng truyền thông và nhà sản xuất thiết bị cầm tay lớn.

Các công cụ phát triển sẵn có, miễn phí. Ví dụ như Netbeans, Eclipse, Wireless

toolkit…

Nhược điểm

Nhược điểm lớn nhất của Java ME là không tận dụng hết được khả năng đặc

6

trưng của các thiết bị. Nhu cầu và sự phát triển của các thiết bị cầm tay đòi hỏi thư

viện API của Java ME phải ngày càng hoàn thiện hơn để theo kịp các nền tảng khác

nếu không muốn bị tụt hậu.

1.3 Symbian 1.3.1 Giới thiệu

Symbian là một hệ điều hành mở được thiết kế cho các thiết bị di động của công

ty Symbian, hiện nay nó thuộc sở hữu của nhiều công ty khác (Nokia, Ericsson, Sony

Ericsson, Panasonic, Samsung…). Symbian hỗ trợ Java, đồng bộ hóa máy tính, truy

cập Bluetooth và chuyển gói dữ liệu GPRS. Symbian là hệ điều hành phổ biến nhất của các điện thoại và các thiết bị thông minh.

1.3.2 Ưu nhược điểm

Ưu điểm

Ưu điểm đầu tiên có thể kể đến là sự phổ biến. Ngay từ đầu, hệ điều hành

Symbian phát triển với mục đích lấy được đơn đặt hàng cho các công ty phát triển thiết

bị viễn thông. Điện thoại đầu tiên sử dụng hệ điều hành Symbian là Nokia 9210 năm

2001. Sau đó, đã có hơn 1 tỉ điện thoại được bán khắp thế giới năm 2007, hơn một

trăm triệu là điện thoại thông minh, trong đó có đến ¾ chạy hệ điều hành Symbian [5].

Trên thị trường thiết bị di động không có chuẩn nào về cỡ màn hình, bàn phím,

các nút… Symbian đã phân loại giao diện đồ họa từ các thành phần hệ thống khác

nhau. Nó cho phép hệ thống thích hợp với mọi loại cỡ và độ phân giải màn hình kể cả

màn hình cảm ứng. Nó còn cho phép tạo sự thêm độc đáo bằng phần cứng cảm nhận

gia tốc.

Điểm mạnh nhất của Symbian là hệ điều hành mở hỗ trợ đa ngôn ngữ (C++ và

Java). Việc lập trình với ngôn ngữ C++ trên PC với sự hỗ trợ của bộ công cụ

Microsoft Visual Studio và bộ giả lập rất dễ dàng. Bên cạnh đó, Symbian cũng hỗ trợ

cả Java ME.

Nhược điểm

7

Hiện nay do sự phát triển của nhiều nền tảng di động mới nổi lên như BlackBerry, iPhone hay Google Android thì hệ điều hành Symbian đang đứng trước khó khăn để theo kịp các đối thủ.

1.4 BlackBerry 1.4.1 Giới thiệu

Hệ điều hành BlackBerry [6] là một phần mềm nền tảng độc quyền của RIM

(Research in Motion, Canada) cho dòng thiết bị cầm tay BlackBerry và các thiết bị hỗ trợ BlackBerry. Nó là hệ điều hành cung cấp chức năng đa nhiệm, sử dụng bàn phím

Qwerty, cùng với bi xoay hay màn hình cảm ứng. Hiện tại hệ điều hành BlackBerry 4

hỗ trợ MIDP 2.0, cho phép kích hoạt và đồng bộ hoàn toàn với thư điện tử Microsoft

Exchange, lịch, các tác vụ, ghi chú và danh bạ…

Người lập trình thứ ba có thể viết phần mềm sử dụng các API do BlackBerry

cung cấp, nhưng bất kể chương trình nào sử dụng các chức năng giới hạn phải có chữ

ký điện tử, để có thể đồng bộ được với tài khoản của người phát triển ở RIM. Điều này

đảm bảo thủ tục bản quyền tác giả của một ứng dụng, nhưng không đảm bảo chất lượng hay bảo mật của mã nguồn.

1.4.2 Ưu nhược điểm

Ưu điểm

Thiết kế tiện lợi, nhiều chức năng, ứng dụng phong phú, phù hợp với nhiều mục

đích nhất là doanh nhân với bàn phím Qwerty, gửi nhận thư điện tử… Hiện nay, RIM

đã có mở một kho ứng dụng App World của mình, cộng thêm ứng dụng giải trí và tiện

ích trên BlackBerry còn ít, điều này hứa hẹn nhiều cơ hội cho người lập trình. Một lợi

thế nữa của BlackBerry là một trong những hệ điều hành phổ biến nhất cho các thiết bị

di động (vị trí thứ 2 sau Symbian).

Nhược điểm

Lập trình trên BlackBerry gặp nhiều khó khăn do có ít tài liệu, công cụ hỗ trợ,

cộng đồng phát triển không lớn và cũng như Symbian, BlackBerry đang giảm ưu thế

với sự nổi nên của Android và iPhone.

1.5 Windows Mobile 1.5.1 Giới thiệu

8

Windows Mobile là một hệ điều hành nhỏ gọn kết hợp với một số các ứng dụng cơ bản dành cho các thiết bị di động dựa trên các API của Microsoft Win32. Windows Mobile có thể chạy trên nhiều nền tảng phần cứng khác nhau như: Pocket PC, Smartphone, v.v… Nó được thiết kế có chút tương đồng với phiên bản Windows cho máy bàn.

1.5.2 Ưu nhược điểm

Ưu điểm

Ưu điểm lớn nhất của Windows Mobile là nó có thư viện API khá giống với API

trên Win32, các công cụ hỗ trợ lập trình đầy đủ với Visual Studio, điều này làm cho những người phát triển trên Win32 không mất công tìm hiểu lại các API và các công

cụ lập trình.

Nhược điểm

Sự có mặt của iPhone và Android là hai trở ngại lớn với Windows Mobile. Hai

nền tảng này đang hoàn thiện và được người dùng rất ưa chuộng.

1.6 iPhone 1.6.1 Giới thiệu

Hệ điều hành iPhone là một hệ điều hành được phát triển bởi hãng Apple Inc,

chạy trên iPhone (cả hai mẫu 2G và 3G) và Ipod cảm ứng. Nó dựa trên nhân Mac của

hệ điều hành Mac X và sử dụng nền tảng Darwin. Hệ điều hành iPhone có bốn lớp

trừu tượng: lớp Core OS, lớp Core Services, lớp Media và lớp Cocoa Touch. Hệ điều

hành sử dụng dưới 240 MB trong tổng số bộ nhớ của thiết bị.

Vào 3/2008 bộ công cụ phát triển phần mềm chính thức ra mắt, cho phép người

phát triển tạo ứng dụng cho iPhone và Ipod Touch và kiểm thử qua một bộ giả lập

iPhone. Tuy nhiên, việc tải một ứng dụng lên trên thiết bị chỉ có thể sau khi trả phí

phát triển chương trình iPhone (iPhone Developer Program fee). Từ khi ra bản Xcode

3.1, Xcode trở thành môi trường phát triển cho iPhone SDK. Hiện nay Xcode chỉ được

cài trên Mac OS.

Người phát triển có thể đặt bất kỳ giá nào trên mức thấp nhất cho các ứng dụng

của họ để phân phối thông qua App Store, tại đó họ được trả 70% lợi nhuận. Ngược

lại, họ cũng có thể phát hành ứng dụng miễn phí và không phải trả khoản phí nào để phát hành và phân phối các ứng dụng đó [7].

1.6.2 Ưu nhược điểm

Ưu điểm

Màn hình cảm ứng đa điểm: iPhone sử dụng hoàn toàn bằng cảm ứng và không sử dụng các nút. Với iPhone ta có thể điều khiển trên màn hình kể cả việc trượt của

các ngón tay. Ta có thể phóng to ảnh bằng cách trượt hai ngón tay ra xa và thu nhỏ

9

bằng cách ngược lại.

Bộ cảm nhận gia tốc: Những phản ứng nhanh chóng của bộ cảm nhận gia tốc

thay đổi độ phân giải màn hình từ dọc sang ngang tự động khi ta đặt điện thoại nằm ngang. Điều này làm sinh động thêm cho các trò chơi.

Chất lượng âm thanh, hình ảnh hoàn hảo, phù hợp cho các trò chơi và có chức

năng đa nhiệm là những đặc điểm nổi trội của iPhone.

Nhược điểm

Không gửi được tin nhắn đa phương tiện (MMS) và IM (Instant Messaging),

thiếu bộ nhớ mở rộng. Việc lập trình trên cho iPhone phải thực hiện trên hệ điều hành

Mac, do đó không phải ai cũng có thể lập trình cho iPhone. Hơn thế, nếu muốn đưa

chương trình ra máy thật người lập trình phải trả một khoản phí lập trình, điều này làm giảm tính cạnh tranh so với các đối thủ khác.

1.7 Android 1.7.1 Giới thiệu

Android là một phầm mềm nền tảng cho các thiết bị di động, được xây dựng trên

nhân Linux, được Google phát triển và sau này là Liên minh thiết bị cầm tay mở. Nó

cho phép người phát triển viết mã trên ngôn ngữ Java, điều khiển các thiết bị thông

qua thư viện Java do Google phát triển.

Tháng 11/2007 nền tảng Android chính thức được giới thiệu với sự công bố của

Liên minh thiết bị cầm tay mở (Open Handset Alliance). Mục tiêu của Google đang

muốn đưa cỗ máy tìm kiếm của họ thống lĩnh các thiết bị di động khi mà điện thoại

thông minh đang phát triển mạnh mẽ như hiện nay.

1.7.2 Ưu nhược điểm

Ưu điểm

Google Android là nền tảng mở, cho phép người dùng có thể tùy biến nền tảng

theo ý thích, hơn nữa lại có một Liên minh thiết bị cầm tay mở hậu thuẫn, Google Android đang là đối thủ xứng tầm của iPhone của Apple. Google đang tích cực mở rộng cộng đồng phát triển các ứng dụng cho Android. Bộ công cụ phát triển phần mềm (SDK) đầy đủ, hỗ trợ đa nền (Linux, Windows hay Mac OS) do chạy trên máy ảo Java. Thư viện ngày càng hoàn thiện, dễ dàng cho người lập trình.

Nhược điểm

Có hỗ trợ cảm ứng đa điểm, nhưng chức năng này bị tắt (do sợ vi phạm bản

10

quyền với iPhone), giao điện không bắt mắt, khả năng hỗ trợ bộ nhớ kém iPhone,

không đồng bộ được với máy tính. Hi vọng trong thời gian tới Google sẽ sớm khắc

11

phục những nhược điểm này.

Chương 2: Nền tảng Android

Chương này giới thiệu về nền tảng Android, khái niệm, các đặc điểm của nền

tảng Android. Tiếp đến là đi sâu trình bày về kiến trúc và giới thiệu bộ công cụ lập

trình cho Android.

2.1 Khái niệm

Hình 2: Điện thoại Android, HTC Dream (trái) và HTC Magic (phải)

Android là một hệ thống, một hệ điều hành dựa trên Java và chạy trên nhân linux

2.6. Nó được phát triển bởi Liên minh thiết bị cầm tay mở (Open Handset Alliance),

với phương châm mang lại phong cách sử dụng Internet mới và mở cho điện thoại di

động.

Android cung cấp một tập hợp đầy đủ các phần mềm cho thiết bị di động bao

12

gồm: hệ điều hành, các khung ứng dụng và các ứng dụng cơ bản.

2.2 Đặc điểm 2.2.1 Tính mở

Android được xây dựng từ dưới đi lên cho phép người phát triển tạo các ứng

dụng di động hấp dẫn với đầy đủ các điểm mạnh của các thiết bị cầm tay hiện có. Android hoàn toàn mở, một ứng dụng có thể gọi tới bất kể một chức năng lõi của điện

thoại như tạo cuộc gọi, gửi tin nhắn hay sử dụng máy ảnh, cho phép người phát triển

tạo phong phú hơn, liên kết hơn các tính năng cho người dùng. Android được xây

dựng trên nhân Linux mở. Thêm nữa, nó sử dụng một máy ảo mà đã được tối ưu hóa bộ nhớ và phần cứng với môi trường di động. Android mà một mã nguồn mở, nó có

thể được mở rộng để kết hợp tự do giữa các công nghệ nổi trội. Nền tảng này sẽ tiếp

tục phát triển bởi cộng đồng phát triển để tạo ra các ứng dụng di động hoàn hảo.

2.2.2 Tính ngang bằng của các ứng dụng

Với Android, không có sự khác nhau giữa các ứng dụng điện thoại cơ bản với

ứng dụng của bên thứ ba. Chúng được xây dựng để truy cập như nhau tới một loạt các

ứng dụng và dịch vụ của điện thoại. Với các thiết bị được xây dựng trên nền tảng

Android, người dùng có thể đáp ứng đầy đủ các nhu cầu mà họ thích. Chúng ta có thể

đổi màn hình nền, kiểu gọi điện thoại, hay bất kể ứng dụng nào. Chúng ta thậm chí có

thể hướng dẫn điện thoại chỉ xem những ảnh mình thích.

2.2.3 Phá vỡ rào cản phát triển ứng dụng

Android phá vỡ rào cản để tạo ứng dụng mới và cải tiến. Một người phát triển có

thể kết hợp thông tin từ trang web với dữ liệu trên điện thoại cá nhân – chẳng hạn như

danh bạ, lịch hay vị trí trên bản đồ – để cung cấp chính xác hơn cho người khác. Với

Android, người phát triển có thể xây dựng một ứng dụng mà cho phép người dùng xem vị trí của những người bạn và thông báo khi họ đang ở vị trí lân cận. Tất cả được

lập trình dễ dàng thông qua sự hỗ trợ của MapView và dịch vụ định vị toàn cầu GPS.

2.2.4 Dễ dàng và nhanh chóng xây dựng ứng dụng

13

Android cung cấp bộ thư viện giao diện lập trình ứng dụng đồ sộ và các công cụ để viết các ứng dụng phức tạp. Ví dụ, Android có thể cho phép người phát triển biết được vị trí của thiết bị và cho phép các thiết bị giao tiếp với nhau để có thể tạo nên mạng xã hội chia sẻ ngang hàng rộng khắp. Thêm nữa, Android còn bao gồm một bộ công cụ đầy đủ giúp cho việc phát triển trở nên dễ dàng.

2.3 Kiến trúc của nền tảng Android 2.3.1 Kiến trúc tổng quát

Android bao gồm bốn thành phần sau, theo [8]:

 Hệ điều hành

 Thư viện và các giao diện lập trình ứng dụng

 Khung ứng dụng

 Ứng dụng

2.3.2 Hệ điều hành

Hình 3: Nhân Linux trên Android

Android sử dụng nhân Linux 2.6 làm nhân cho các dịch vụ hệ thống như bảo

mật, quản lý bộ nhớ, quản lý tiến trình (xử lý tiến trình, đa luồng), ngăn xếp mạng và

trình điều khiển thiết bị (giao tiếp USB, giao tiếp hồng ngoại, không đây, v.v…). Nhân

Linux này cũng có vai trò như một lớp trừu tượng giữa phần cứng và phần mềm.

2.3.3 Thư viện và các giao diện lập trình ứng dụng

Android có một thư viện khá phong phú [9] cung cấp sẵn để người lập trình có

thể sử dụng. Hình 4 là sơ đồ tóm tắt về hệ thống thư viện này.

Hình 4: Thư viện lâp trình ứng dụng trên Android

2.3.3.1 Android runtime

Android có một tập các thư viện nòng cốt để cung cấp hầu hết các chức năng sẵn

có trong thư viện cốt lõi của ngôn ngữ lập trình Java.

14

Mỗi ứng dụng Android đều chạy trong tiến trình của nó, với mỗi máy ảo Dalvik riêng. Dalvik được viết để thiết bị có thể chạy nhiều máy ảo Dalvik một cách hiệu quả.

Máy ảo Dalvik thực thi các tập tin thực thi Dalvik (.dex) đã được nén lại. Máy ảo

Dalvik dựa trên thanh ghi, chạy các lớp được biên dịch bằng bộ biên dịch ngôn ngữ Java và chuyển sang định dạng .dex bằng công cụ “dx”.

Máy ảo Dalvik dựa trên nhân của Linux với các chức năng bên dưới như phân

luồng và quản lý bộ nhớ mức thấp.

2.3.3.2 Bộ thư viện

Android cung cấp một tập các thư viện C/C++ được các thành phần của Android

sử dụng khác nhau. Khung ứng dụng Android mang lại nhiều khả năng cho những

người phát triển. Sau đây là một vài thư viện cơ bản:

 Hệ thống thư viện C: một dẫn xuất của hệ thống thư viện C chuẩn cho

những thiết bị nhúng trên nền Linux.

 Thư viện đa phương tiện: sử dụng nhân mở PacketVideo, hỗ trợ nhiều định dạng âm thanh, hình ảnh và cả video, bao gồm Mpeg4, H264, MP3,

ACC, ẢM, JPG và PNG.

 Surface manager: quản lý việc truy cập tới các hệ thống hiển thị con và việc kết hợp của các lớp đồ họa 2 chiều, 3 chiều từ nhiều ứng dụng.

 Thư viện cơ sở Web: một máy trình duyệt web hiện đại tận dụng sức mạnh của trình duyệt Android, cho phép nhúng cửa sổ duyệt web cho

ứng dụng.

 SGL (Scalable Graphics Library): cỗ máy đồ họa 2D của Android.

 Thư viện 3D: được cài đặt trên dựa trên API của OpenGL ES 1.0; thư viện bao gồm cả bộ cảm nhận gia tốc phần cứng 3D, tối ưu hóa các phần

mềm 3D.

 FreeType: thư viện font chữ ảnh nhị phân và véc tơ.

 SQLite: là thư viện truy xuất cơ sở dữ liệu nhỏ, mạnh, có sẵn trong mọi

ứng dụng Android.

15

2.3.3.3 Khung ứng dụng

Hình 5: Khung ứng dụng

Android cho phép người phát triển có toàn quyền truy xuất vào các API khung

được sử dụng bởi các ứng dụng nòng cốt. Kiến trúc ứng dụng được thiết kế để đơn

giản hóa việc sử dụng lại các thành phần, mỗi ứng dụng có thể cho phép các ứng dụng

khác khả năng sử dụng các thành phần này. Điều này giống với kỹ thuật cho phép người dùng đặt lại các thành phần.

Dưới đây là tất cả các ứng dụng của hệ thống và các dịch vụ:

 Tập hợp phong phú của các Views sử dụng để xây dựng các ứng dụng, bao gồm các list, các grid, các text box, các button và thậm chí nhúng cả trình duyệt web.

 Content Providers cho phép các ứng dụng truy xuất dữ liệu từ ứng dụng

khác (ví dụ như danh bạ), hay chia sẻ dữ liệu.

 Resource Manager cung cấp truy cập tới tài nguyên không phải mã nguồn như là các tập tin lưu các xâu, tập tin đồ họa, hay tập tin bố cục

giao diện.

 Notification Manager cho phép các ứng dụng hiển thị các thông báo trên

thanh trạng thái.

 Activity Manager quản lý vòng đời của các ứng dụng (từ khi chúng sinh ra, được thực thi, chuyển sang trạng thái chờ, gọi thực thi lại và kết

thúc).

2.3.3.4 Ứng dụng

Hình 6: Các ứng dụng trên Android

Đây là lớp trên cùng của kiến trúc nền tảng Android. Android sẽ hoạt động với một bộ các ứng dụng bao gồm ứng dụng thư điện tử, gửi tin nhắn, lịch, bản đồ, trình

16

duyệt web, danh bạ v.v… Tất cả các ứng dụng được viết bằng ngôn ngữ Java. Các ứng dụng này có thể được cung cấp sẵn hoặc được phát triển bởi những lập trình viên.

2.4 Các thành phần của ứng dụng

Một ứng dụng trên Android được cấu thành từ bốn thành phần cơ bản sau:

 Activities (Hoạt động)

 Services

 Broadcast Receivers

 Content Provider

Các thành phần này không nhất thiết phải có mặt đầy đủ trong ứng dụng. Chúng

ta có thể xem các thành phần nào được sử dụng trong ứng dụng bằng việc xem khai báo trong file AndroidManifest.xml.

2.4.1 Hoạt động (Activity)

2.4.1.1 Khái niệm

Một hoạt động là một giao diện người dùng trực quan mà người dùng có thể thực

hiện trên đó mỗi khi được kích hoạt. Một ứng dụng có thể có nhiều hoạt động và

chúng có thể gọi đến nhau chuyển giữa các hoạt động với nhau. Mỗi activity là một

dẫn xuất của lớp android.app.Activity.

Mỗi hoạt động có một cửa sổ để vẽ lên. Thông thường cửa sổ này phủ đầy màn

hình, ngoài ra nó cũng có thể có thêm các cửa sổ con khác như là hộp thoại…Nội dung

của cửa sổ của hoạt động được cung cấp bởi một hệ thống cấp bậc các View (là đối

tượng của lớp Views).

2.4.1.2 Vòng đời của hoạt động

Các hoạt động trong hệ thống được quản lý bởi một cấu trúc dữ liệu ngăn xếp.

Khi có một hoạt động được khởi tạo, nó được đẩy vào trong ngăn xếp, chuyển sang

trạng thái thực thi và hoạt trộng trước đó sẽ chuyển sang trạng thái chờ. Hoạt động này

chỉ trở lại trang thái kích hoạt khi mà hoạt động vừa khởi tạo kết thúc việc thực thi.

Một hoạt động có ba trạng thái chủ yếu đó là:

 Nếu hoạt động được hiển thị ngoài cùng của màn hình (hoạt động này

nằm trên đỉnh ngăn xếp hoạt động), nó ở trong trạng thái thực thi.

17

 Khi bị chiếm mất quyền điều khiển nhưng vẫn được hiển thị trên màn hình thì một hoạt động sẽ chuyển sang trạng thái tạm dừng. Các thông tin về trạng thái và các dữ liệu mà hoạt động đang sử dụng vẫn được lưu giữ (bởi chương trình quản lý của hệ thống) nhưng khi hệ thống rơi vào trạng thái thiếu bộ nhớ thì những thông tin trên có thể bị giải phóng.

 Khi một hoạt động đang ở trạng thái dừng hoặc tạm dừng, hệ thống có thể xóa bỏ hoạt động khỏi bộ nhớ thông qua việc yêu cầu hoạt động này

kết thúc.

Biểu đồ sau mô tả trạng thái trong vòng đời của một hoạt động. Hình chữ nhật

viên còn thể hiện các phương thức Callback mà chúng ta có thể khai báo để gọi thực

thi một số thao tác khi hoạt động chuyển sang trạng thái khác (phương thức Callback là phương thức được gọi lại bởi một phương thức khác khi có một sự kiện xảy ra). Các

18

trạng thái chính của một hoạt động được thể hiện bởi các hình viên thuốc.

19

Hình 7: Vòng đời của một hoạt động

Vòng đời của một hoạt động có thể được thể hiện trong những quá trình sau:

Toàn bộ thời gian sống của một hoạt động bắt đầu từ lời gọi đầu tiên tới phương thức onCreate (Bundle) tới lời gọi phương thức onDestroy(). Trong quá trình này, một

hoạt động sẽ khởi tạo lại tất cả các tài nguyên cần sử dụng trong phương thức

onCreate() và giải phóng chúng khi phương thức onDestroy() được thực thi.

Thời gian sống có thể nhìn thấy của một hoạt động bắt đầu từ lời gọi tới phương thức onStart(), cho tới khi phương thức onStop() của nó được thực thi. Toàn bộ các tài

nguyên đang được sử dụng bởi hoạt động vẫn tiếp tục được lưu giữ, người dùng có thể

thấy giao diện nhưng không tương tác được với hoạt động do trong qua trình này hoạt

động không ở trạng thái chạy tiền cảnh.

Thời gian sống tiền cảnh của một hoạt động là quá trình bắt dầu từ khi có lời gọi

tới phương thức onResume() và kết thúc bằng lời gọi tới phương thức onPause().

Trong thời gian này, hoạt động chạy ở tiền cảnh và có thể tương tác với người dùng.

2.4.2 Dịch vụ

2.4.2.1 Khái niệm

Một dịch vụ (service) là các đoạn mã được thực thi ngầm bởi hệ thống mà người

sử dụng không thấy được. Ví dụ như một chương trình chơi nhạc, sẽ có vài hoạt động

cho phép người dùng duyệt danh sách các bài hát và lựa chọn bài nào để phát. Tuy

nhiên, chức năng chơi nhạc không được thiết kế như một hoạt động bởi chúng ta sẽ

muốn chuyển qua cửa sổ khác, như khi soạn tin nhắn thì bài nhạc vẫn tiếp tục được

chơi. Trong trường hợp này, ứng dụng chơi nhạc sẽ khởi tạo một dịch vụ bằng cách sử

dụng phương thức Context.startService().

Một ứng dụng có thể dễ dàng thực hiện liên kết tới một dịch vụ đang chạy (thậm

chí khởi động nếu nó chưa thực thi) bằng phương thức Context.bindService(). Khi đó

dịch vụ này sẽ cung cấp cho ứng dụng cơ chế để giao tiếp với chúng thông qua giao diện gọi là IBinder (đối với dịch vụ chơi nhạc có thể cho phép dừng hoặc chuyển qua bài nhạc kế tiếp).

2.4.2.2 Vòng đời của một dịch vụ

Vòng đời của một dịch vụ được hiểu là quá trình hoạt động từ khi nó được tạo ra cho tới khi bị loại khỏi hệ thống. Có hai cách thức để một dịch vụ có thể được chạy

20

trong hệ thống:

Khi hệ thống có lời gọi tới phương thức Context.startService(). Trong trường

hợp này, dịch vụ sẽ được thực hiện liên tục cho tới khi hệ thống gọi phương thức Context.stopService().

Khi các ứng dụng gọi phương thức Context.bindService() để tạo kết nối với

dịch vụ (dịch vụ sẽ được khởi tạo nếu tại thời điểm đó nó đang không hoạt động). Ứng

dụng sẽ nhận được một đối tượng IBinder do dịch vụ trả lại để có thể gọi các phương thức Callback phù hợp để truy cập tới các trạng thái của dịch vụ. Nếu do lời gọi

Context.bindService() mà dịch vụ được khởi tạo thì nó sẽ được thực thi cho tới khi nào

kết nối trên (tức là đối tượng IBinder) vẫn còn tồn tại.

2.4.3 Bộ nhận quảng bá (Broadcast receivers)

2.4.3.1 Khái niệm

Bộ nhận quảng bá là một thành phần không làm gì cả nhưng nó nhận và phản hồi

lại các thông báo quảng bá. Nhiều quảng bá có nguồn gốc từ mã hệ thống, ví dụ thông

báo thay đổi múi giờ, pin yếu, ảnh đã chụp hay thay đổi ngôn ngữ. Các ứng dụng có

thể khởi động quảng bá, ví dụ để các ứng dụng khác biết rằng dữ liệu đã được tải về

xong trên thiết bị và sẵn sàng sử dụng.

Một ứng dụng có thể có bất kỳ số lượng bộ nhận quảng bá nào để nhận những

thông báo quan trọng với nó. Tất cả các bộ nhận quảng bá được kế thừa từ lớp

BroadcastReceiver.

Bộ nhận quảng bá không có giao diện. Tuy nhiên, chúng có thể khởi động một

hoạt động để đáp lại thông tin mà nó nhận được, hay chúng có thể sử dụng

NotificationManager để thông báo người dùng biết. Các thông báo có thể được sự chú

ý của người dùng theo các cách các nhau như là sáng màn hình, rung thiết bị, bật âm

thanh nào đấy… Thông thường, chúng đặt thông báo trên thanh trạng thái, nơi người

dùng có thể nhận được thông báo.

2.4.4 Content provider

2.4.4.1 Khái niệm

Các ứng dụng có thể lưu trữ dữ liệu của mình trong các tập tin hoặc sử dụng cơ sở dữ liệu SQLite sẵn có v.v… Content Provider có chức năng cung cấp một tập hợp các phương thức cho phép một ứng dụng có thể lưu trữ và lấy dữ liệu được quản lý bởi content provider đó.

Content Provider là một đặc trưng riêng của Android, nhờ đó mà các ứng dụng

21

có thể chia sẻ dữ liệu với nhau một cách dễ dàng

2.4.5 Các thành phần kích hoạt (các Intent)

Content provider được kích hoạt khi chúng được gọi từ một ContentResolver. Ba

thành phần khác (hoạt động, dịch vụ và bộ nhận quảng bá) được kích hoạt bởi thông

điệp không đồng bộ từ các intent. Một intent là một đối tượng có kiểu Intent chứa nội dung của thông điệp. Với các hoạt động và dịch vụ, nó gọi tên hành động được yêu

cầu và xác định URI của dữ liệu tác động tới ở giữa. Ví dụ, nó có thể truyền tải một

yêu cầu cho một hoạt động hiển thị một ảnh cho người dùng hay cho phép người dùng

sửa văn bản. Với bộ nhận quảng bá, đối tượng Intent gọi tên của hành động được thông báo. Ví dụ, bộ nhận quản bá có thể thông báo các phần nó quan tâm là nút chụp

ảnh đã được bấm.

Có vài phương thức cho việc kích hoạt mỗi thành phần:

Một hoạt động được khởi chạy thông qua một đối tượng

Intent Context.startActivity() hay Activity.startActivityForResult(). Hoạt động đáp lại có thể theo dõi intent được tạo ra đó bằng phương thức getIntent() và cập nhật thông qua

phương thức setIntent(Intent). Android gọi phương thức onNewIntent() để bỏ qua các

intent đến trước nó.

Một hoạt động thường bắt đầu hoạt động khác. Nếu nó muốn trả lại kết quả hoạt

động nó đã khởi chạy, nó sẽ gọi phương thức startActivityForResult() thay cho

phương thức startActivity(). Ví dụ, nếu nó khởi chạy một hoạt động mà cho phép

người dùng lấy một ảnh, nó có thể muốn lấy kết quả của ảnh được chọn. Kết quả được

trả về trong một đối tượng Intent thông qua phương thức onActivityResult().

Một dịch vụ được bắt đầu thông qua một đối tượng Intent là

Context.startService(). Android gọi phương thức onStart() của dịch vụ và thông qua

đối tượng Intent của nó.

Tương tự, một intent có thể thông qua Context.bindService() để thiết lập một kết

nối liên tục giữa các thành phần và dịch vụ đích. Dịch vụ nhận đối tượng Intent qua lời gọi onBind() (nếu dịch vụ chưa được chạy, bindService() có thể chọn bắt đầu nó). Cho ví dụ, một hoạt động có thể thiết lập kết nối với dịch vụ chơi nhạc đề cập ở phần trước

để nó có thể cung cấp cho người dùng giao diện sử dụng để điều khiển chơi lại. Hoạt động sẽ gọi bindService để thiết lập kết nối và sau đó gọi phương thức đã định nghĩa bởi dịch vụ để áp dụng chơi lại ca khúc.

22

Một ứng dụng có thể khởi tạo một quảng bá thông qua đối tượng Intent bằng thức như Context.setBroadcast(), Context.setOrderedBroadcast() và phương

Context.sendStickyBroadcast(). Android chuyển những intent tới tất cả các bộ nhận

quảng bá nào quan tâm bằng việc gọi phương thức onReceive() của nó.

2.4.6 Ngắt một thành phần

Một hoạt động có thể bị ngắt thông qua việc gọi phương thức finish(). Một hoạt động có thể tắt một hoạt động khác (hoạt động đó được khởi động với lời gọi

startActivityForResult()) bằng việc gọi finishActivity().

Để ngắt một dịch vụ chúng ta có thể sử dụng phương thức stopSelf(), hoặc bằng

cách gọi Context.stopService().

Content provider được kích hoạt chỉ khi nó đáp lại yêu cầu từ một

ContentResolver. Bộ nhận quảng bá được kích hoạt chỉ khi nó đáp lại một thông điệp

quảng bá. Chúng ta không cần thiết phải tắt các thành phần này.

2.4.7 Tập tin khai báo (manifest)

Trước khi có thể khởi chạy một ứng dụng thành phần, nó phải xem ứng dụng bao

gồm những thành phần nào. Thêm nữa, các ứng dụng khai báo các thành phần của nó

trong một tập tin khai báo để đóng gói lại vào trong gói Android (tập tin .apk chứa các

mã nguồn, tập tin và tài nguyên).

Tập tin này có cấu trúc của tập tin XML và luôn có tên là AndroidManifest.xml

trong mọi ứng dụng. Nó làm một số thứ như thêm và khai báo các thành phần của ứng

dụng, tên các thư viện ứng dụng cần liên kết tới (ngoài thư viện chuẩn của Android) và

xác định các quyền cho ứng dụng.

Tuy nhiên, nhiệm vụ chính của tập tin khai báo là khai báo các thành phần của

android:icon="@drawable/small_pic.png" android:label="@string/freneticLabel" . . . > . . .

23

ứng dụng. Một hoạt động có thể được khai báo như sau:

Thuộc tính “name” của phần tử là tên các lớp con lớp Activity đã

được cài đặt, thuộc tính “icon” và “label” trỏ đến tập tin tài nguyên chứa biểu tượng và nhãn được hiển thị cho người dùng.

Các thành phần khác được khai báo theo cách tương tự: dịch vụ,

bộ nhận quảng bá và content provider. Các hoạt động, dịch vụ

và content provider có thể cùng được khai báo trong tập tin khai báo hoặc có thể được tạo tự động trong mã (như đối tượng BroadcastReceiver) và được đăng ký với hệ

thống bằng cách gọi Context.registerReceiver().

2.4.8 Bộ lọc Intent

Một đối tượng Intent có thể có tên rõ ràng trong thành phần đích. Nếu có,

Android sẽ tìm thành phần đó (dựa trên khai báo trong tập tin khai báo) và kích hoạt

nó. Nhưng nếu đích có tên không rõ ràng, Android phải xác định thành phần nào thích hợp nhất để đáp lại intent. Nó thực hiện so sánh đối tượng Intent với bộ lọc intent trong các đích có khả năng. Một thành phần của bộ lọc intent cho Android biết loại

intent thành phần nào cần xử lý. Giống các thông tin cơ bản, chúng được khai trong

"com.example.project.FreneticActivity"

"android.intent.action.MAIN" />

"android.intent.category.LAUNCHER" />

"com.example.project.BOUNCE" />

"android.intent.category.DEFAULT" />

android:icon="@drawable/small_pic.png" android:label="@string/freneticLabel" . . . > . . .

24

tập tin khai báo. Đây là một ví dụ để thêm hai bộ lọc intent cho một hoạt động.

Bộ lọc đầu tiên – là sự kết hợp của hành động “android.intent.action.Main” và danh mục “android.intent.category.LAUNCHER” – là một ví dụ phổ biến. Nó đánh

dấu lại một Intent và mô tả lại cho bộ khởi chạy ứng dụng, đặt vào trong danh mục các

ứng dụng trên điện thoại. Nói theo cách khác, hoạt động làm lối vào cho ứng dụng sẽ

được khởi chạy, người dùng sẽ thấy khi chọn khởi chạy ứng dụng.

Bộ lọc thứ hai được khai báo để hoạt động có thể thực thi trên một kiểu dữ liệu

đặc biệt.

Một thành phần có thể có bao nhiêu số bộ lọc intent tùy thích, mỗi một cái lại

được khai báo khác nhau cho các khả năng. Nếu nó không có một bộ lọc nào, nó có thể được được kích hoạt bởi các intent khác gọi đến.

Để tạo và đăng ký một bộ nhận quảng bá trong mã nguồn, bộ lọc intent tạo thẳng

một đối tượng giống đối tượng IntentFilter. Tất cả các bộ lọc khác đều được cài đặt

trong tập tin khai báo.

2.5 Công cụ hỗ trợ lập trình Android

Bộ công cụ phát triển phần mềm Android SDK gồm nhiều công cụ trợ giúp cho

việc phát triển ứng dụng di động trên nền tảng Android. Thành phần quan trọng nhất

của bộ công cụ này là trình giả lập Android và bộ plug-in phát triển ứng dụng Android

trên Eclipse ADT, bên cạnh đó bộ SDK cũng bao gồm các công cụ khác cho việc gỡ

rối, đóng gói và cài đặt ứng dụng trên trình giả lập và trên thiết bị.

Trình giả lập Android: Thực chất đây là một chương trình mô phỏng một thiết

bị di động ảo trên máy tính. Chúng ta có thể sử dụng bộ giả lập này để thiết kế gỡ rối

và kiểm tra ứng dụng của mình như trên thiết bị trước khi đưa chương trình vào thiết

bị thật.

Android Development Tools Plugin (cho Eclipse) viết tắt là ADT, Plugin này hỗ trợ cho việc tạo và gỡ rối các ứng dụng và sử dụng môi trường phát triển tích hợp Eclipse trở nên dễ dàng hơn.

Trình gỡ rối Dalvik Debug Monitor Service (DDMS): giúp quản lý các tiến trình trong bộ giả lập hoặc thiết bị và trợ giúp việc gỡ rối ứng dụng. Có thể sử dụng công cụ này để hủy các tiến trình, chọn một tiến trình cụ thể để gỡ rối, sinh các dữ liệu

truy vết, xem bộ nhớ heap và thông tin về các luồng, chụp ảnh màn hình của trình giả

25

lập.

Android Debug Bridge (adb): Công cụ này cho phép cài đặt các tập tin .apk

trên bộ giả lập hoặc thiết bị, đồng thời hỗ trợ truy cập hai đối tượng này từ cửa sổ dòng lệnh.

Android Asset Packaging Tool (aapt): Công cụ để tạo tập tin .apk chứa các mã

nhị phân và tài nguyên của một ứng dụng Android.

sqlite3: Đây là công cụ để truy cập các tập tin dữ liệu SQLite được tạo ra và sử

dụng bởi một ứng dụng Android.

dx: Đây là công cụ biên dịch các tập tin .class thành mã bytecode chạy trên máy

ảo Dalvik (lưu trữ dưới dạng tập tin .dex).

mksdcard: Giúp tạo một tập tin ảnh lưu trữ dữ liệu mà ta có thể sử dụng trên bộ

giả lập, để mô phỏng sự có mặt của một thẻ nhớ ngoài (như thẻ SD).

Android Virtual Devices (AVD): Cho phép chúng ta có thể tạo cấu hình thiết bị

ảo, mô phỏng các đặc điểm của bộ giả lập Android. Với mỗi cấu hình, ta có thể xác

định nền tảng cho nó chạy, tùy chỉnh phần cứng hay giao diện sử dụng. Mỗi tùy chỉnh

26

của AVD sẽ như một thiết bị độc lập với dữ liệu lưu trữ của nó, thẻ nhớ SD, v.v…

Chương 3: Mã vạch, mã QR và thư viện Zxing

Trong nội dụng của chương này, khóa luận sẽ đi trình bày khái niệm về mã vạch,

các ứng dụng của mã vạch ngày nay, tiếp đến là giới thiệu một mã vạch hai chiều rất

mạnh, đấy chính là mã vạch QR, gọi tắt là mã QR. Chương này cũng giới thiệu về thư viện mã nguồn mở Zxing có thể đọc nhiều định dạng mã vạch.

3.1 Mã vạch 3.1.1 Khái niệm

Mã vạch [10] là sự thể hiện thông tin trong các dạng nhìn thấy trên các bề mặt

mà máy móc có thể đọc được. Nguyên thủy thì mã vạch lưu trữ dữ liệu theo bề rộng của các vạch được in song song cũng như của khoảng trống giữa chúng, nhưng ngày

nay chúng còn được in theo các mẫu của các điểm, theo các vòng tròn đồng tâm hay

chúng ẩn trong các hình ảnh. Mã vạch có thể được đọc bởi các thiết bị quét quang học

gọi là máy đọc mã vạch hay được quét từ hình ảnh bằng các phần mềm chuyên biệt.

Nội dung của mã vạch là thông tin về sản phẩm như: Nước sản xuất, tên doanh

nghiệp, lô, tiêu chuẩn chất lượng đăng ký, thông tin về kích thước sản phẩm, nơi kiểm

tra...

3.1.2 Ứng dụng

Mã vạch (và các thẻ khác mà máy có thể đọc được như RFID) được sử dụng ở

những nơi mà các đồ vật cần phải đánh số với các thông tin liên quan để các máy tính

có thể xử lý. Thay vì việc phải đánh một chuỗi dữ liệu vào phần nhập liệu của máy

tính thì người thao tác chỉ cần quét mã vạch cho thiết bị đọc mã vạch. Chúng cũng làm

việc tốt trong điều kiện tự động hóa hoàn toàn, chẳng hạn như trong luân chuyển hành lý ở các sân bay.

Các dữ liệu chứa trong mã vạch thay đổi tùy theo ứng dụng. Trong trường hợp đơn giản nhất là một chuỗi số định danh được sử dụng như là chỉ mục trong cơ sở dữ liệu trong đó toàn bộ các thông tin khác được lưu trữ. Các mã EAN-13 và UPC tìm thấy phổ biến trên hàng bán lẻ làm việc theo phương thức này.

Trong các trường hợp khác, mã vạch chứa toàn bộ thông tin về sản phẩm, mà không cần cơ sở dữ liệu ngoài. Điều này dẫn tới việc phát triển mã vạch tượng trưng mà có khả năng biểu diễn nhiều hơn là chỉ các số thập phân, có thể là bổ sung thêm

27

các ký tự hoa và thường của bảng chữ cái cho đến toàn bộ bảng mã ký tự ASCII và

nhiều hơn thế. Việc lưu trữ nhiều thông tin hơn đã dẫn đến việc phát triển của các ma

trận mã (một dạng của mã vạch 2D), trong đó không chứa các vạch mà là một lưới các ô vuông. Các mã vạch cụm là trung gian giữa mã vạch 2D thực thụ và mã vạch tuyến

tính và chúng được tạo ra bằng cách đặt các mã vạch tuyến tính truyền thống trên các

loại giấy hay các vật liệu có thể in ấn mà cho phép có nhiều hàng.

3.2 Mã QR 3.2.1 Khái niệm

Mã QR [11] là một mã ma trận (hay mã vạch hai chiều) được phát triển bởi công ty Denso Wave (Nhật Bản) vào năm 1994. Chữ "QR" xuất phát từ "Quick Response",

trong tiếng Anh có nghĩa là đáp ứng nhanh, vì người tạo ra nó có ý định cho phép mã

được giải mã ở tốc độ cao. Các mã QR được sử dụng phổ biến nhất ở Nhật Bản và

hiện là loại mã hai chiều thông dụng nhất ở Nhật Bản.

Hoa văn định vị

Vùng dữ liệu

Mô-đun

Hình 8: Một ảnh mã QR

Mặc dù lúc đầu mã QR được dùng để theo dõi các bộ phận trong sản xuất xe hơi,

hiện nay nó được dùng trong quản lý kiểm kê ở nhiều ngành khác nhau. Gần đây hơn,

phần mềm đọc mã QR đã được cài vào điện thoại di dộng có gắn camera (camera phone) ở Nhật. Điều này đưa đến các ứng dụng mới và đa dạng hướng về người tiêu dùng, nhằm làm đơn giản việc nhập dữ liệu vào điện thoại di động, vốn không mấy hấp dẫn. Mã QR cũng được thêm vào danh thiếp, làm đơn giản đi rất nhiều việc nhập dữ kiện cá nhân của người mới quen vào sổ địa chỉ trên điện thoại di động.

Người dùng có chương trình thu tín hiệu (capture program) và máy tính có giao

28

diện RS-232C có thể dùng máy quét ảnh (scanner) để thu dữ liệu.

Tiêu chuẩn Nhật Bản cho các mã QR, JIS X 0510, được công bố vào tháng giêng

năm 1999 và Tiêu chuẩn Quốc tế ISO tương ứng, ISO/IEC18004, được chấp thuận vào tháng sáu năm 2000.

3.2.2 Khả năng lưu trữ

Khả năng lưu trữ dữ liệu mã QR

Số đơn thuần Tối đa 7.089 kí tự

Số và chữ cái in Tối đa 4.296 kí tự

Số nhị phân (8 bit) Kanji/Kana Tối đa 2.953 byte Tối đa 1.817 kí tự

Khả năng sửa chữa lỗi

Mức L 7% số từ mã (codeword) có thể được phục hồi.

Mức M 15% số từ mã có thể được phục hồi. Mức Q 25% số từ mã có thể được phục hồi. Mức H 30% số từ mã có thể được phục hồi.

3.3 Thư viện Zxing 3.3.1 Khái niệm

Zxing [12] (viết tắt của “zebra crossing”) là một thư viện mã nguồn mở, xử lý

nhiều định dạng mã vạch 1 chiều và 2 chiều, được cài đặt bằng Java. Mục đích của thư

viện này là sử dụng máy ảnh trên điện thoại di động để chụp và giải mã các mã vạch

trên thiết bị, không cần phải kết nối với máy chủ. Hiện tại thư viện hỗ trợ các định

dạng mã vạch sau:

 UPC-A và UPC-E

 EAN-8 và EAN-13

 Code 39

 Code 128

 QR Code

 Data Matrix

 ITF

Thư viện này được chia làm nhiều phần, các phần sau vẫn đang được hỗ trợ và

phát triển thường xuyên:

+ core: là phần lõi thư viện giải mã và là phần chính của toàn bộ dự án.

29

+ javase: ứng dụng khách cho J2SE.

+ android: ứng dụng khách cho Android.

+ androidtest: chương trình demo trên Android.

+ android-integration: thư viện hỗ trợ tích hợp Barcode Scanner (bộ quét mã vạch) thông qua Intent cho Android.

+ zxingorg: mã nguồn của trang http://zxing.org/w.

nguồn của trang web tạo mã vạch

+ zxing.appspot.com: mã http://zxing.appspot.com/.

Các mô đun sau được đóng góp và phát triển không thường xuyên:

+ javame: ứng dụng khách cho JavaME.

+ csharp: thư viện cho C#.

+ cpp: thư viện cho C++.

+ rim: ứng dụng khách cho RIM/Blackberry.

+ iphone: ứng dụng khách cho iPhone (chỉ hỗ trợ mã QR).

+ bug: ứng dụng khách cho BugLabs's BUG.

+ symbian: thư viện cho Symbian.

3.3.2 Cách sử dụng

3.3.2.1 Giải mã

Việc sử dụng thư viện Zxing khá dễ dàng [13]. Đầu tiên, phải khởi tạo một đối

tượng thuộc lớp com.google.zxing.Reader. Chúng ta có thể sử dụng đối tượng thuộc

Reader reader = new MultiFormatReader();

lớp MultiFormatReader để đọc tất cả các định dạng mã vạch mà thư viện hỗ trợ.

Nếu muốn đọc mã QR, ta có thể cài đặt để đọc theo mã QR. Ta có thể khởi tạo

Reader reader = new QRCodeReader();

như sau:

Tiếp đến ta cần xác định ảnh để giải mã. Reader sẽ đọc từ một đối tượng được cài đặt từ lớp com.google.zxing.MonchromeBitmapSource, đây là một lớp trừu tượng

cho các lớp mô tả hình ảnh.

BufferedImage myImage = ...; MonochromeBitmapSource source = new BufferedImageMonochromeBitmapSource(myImage);

30

Trong Java SE thư viện có sẵn lớp java.awt.BufferedImage, ta cài đặt như sau:

Bitmap bmp = BitmapFactory.decodeResource( getResources(),

R.drawable.barcode);

Trong thư viện Android không có lớp java.awt.BufferedImage, ta cài đặt như sau:

MonochromeBitmapSource source = newRGBMonochromeBitmapSource(bmp);

Nếu ảnh là một resource (tài nguyên), R.drawable.barcode là đối tượng xác định

tài nguyên đó.

Bitmap bmp = BitmapFactory.decodeFile("file_path"); MonochromeBitmapSource source = new RGBMonochromeBitmapSource(bmp);

Hoặc ta có thể dùng như sau:

Nếu ảnh là một tập tin ngoài, file_path là đường dẫn tới tập tin đó.

Result result = reader.decode(source);

Giải mã

Trong đó:

result: là đối tượng thuộc lớp com.google.zxing.Result. Lớp Result này cung cấp

các phương thức để lấy giá trị byte hoặc chuỗi được mã hóa trong mã vạch nếu có.

Ví dụ:

String text = result.getText(); byte[] rawBytes = result.getRawBytes(); BarcodeFormat format = result.getBarcodeFormat(); ResultPoint[] points = result.getResultPoints();

Trong đó:

result: là đối tượng thuộc lớp com.google.zxing.MonochromeBitmapSource.

Hashtable hints = new Hashtable(); hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); Result result = reader.decode(source, hints);

31

Cuối cùng, bộ giải mã hỗ trợ một hệ thống “gợi ý” giúp chúng ta giải mã hiệu quả hơn, hoặc giảm độ chính xác để tăng tốc độ. Ví dụ, gợi ý “TRY_HARDER” sẽ yêu cầu bộ giải mã tăng nhiều thời gian hơn cho việc nhận dạng mã vạch:

3.3.2.2 Mã hóa một chuỗi ra ảnh mã QR

Tự gọi: để mã hóa một chuỗi ra ảnh mã QR, ta chỉ việc tạo một Intent xác định hành

động mã hóa, xác định loại và dữ liệu mã hóa sau đó gọi phương thức startActivity().

Intent intent = new

Intent("com.google.zxing.client.android.ENCODE"); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra("ENCODE_TYPE", "TEXT_TYPE"); intent.putExtra("ENCODE_DATA","HELLO WORLD");

startActivity(intent);

Ví dụ:

Sử dụng lớp IntentIntegrator

Lớp IntentIntegrator cung cấp một phương thức đơn đơn giản là

IntentIntegrator.shareText(activity, text);

IntentIntegrator.shareText() để mã hóa một chuỗi ra mã QR.

3.3.2.3 Quét mã vạch từ một chương trình khác thông qua Intent

Tự gọi: nếu Barcode Scanner (bộ quét mã vạch) đã được cài đặt trên điện thoại

Android, ta có thể cho nó quét và trả lại kết quả, chỉ việc thông qua một Intent. Ví dụ:

public Button.OnClickListener mScan = new Button.OnClickListener() {

public void onClick(View v) { Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(intent, 0); }

};

Đoạn mã trên bắt sự kiện của một nút và gọi tới Intent của Barcode Scanner để

32

quét mã QR.

if (resultCode == RESULT_OK) {

public void onActivityResult(int requestCode, int resultCode, Intent intent) {

if (requestCode == 0) { String contents =

intent.getStringExtra("SCAN_RESULT");

String format =

intent.getStringExtra("SCAN_RESULT_FORMAT");

{

// Handle cancel

}

// Handle successful scan } else if(resultCode==RESULT_CANCELED) } }

}

Đoạn mã trên bắt sự kiện trả về kết quả khi Barcode Scanner quét xong. Nếu quét

thành công mã resultCode sẽ là RESULT_OK, nếu Intent bị hủy thì mã resultCode sẽ

là RESULT_CANCELED.

Sử dụng lớp IntentIntegrator

IntentIntegrator.initiateScan(Activity);

Lớp IntentIntegrator gọi Barcode Scanner rất đơn giản thông qua hàm sau:

Để lấy giá trị trả về, lớp IntentIntegrator có hàm parseActivityResult

protected void onActivityResult (int requestCode, int resultCode, Intent data) { switch(requestCode) {

case IntentIntegrator.REQUEST_CODE: if (resultCode == RESULT_OK) { IntentResult scanResult = IntentIntegrator.parseActivityResult( requestCode,resultCode, data);

if (scanResult != null) {

String strContent=scanResult.getContents(); //do here

}

}

}

33

Chương 4: Xây dựng ứng dụng lưu trữ thông tin bằng chuỗi mã vạch

Nội dung của chương này sẽ đi xây dựng ứng dụng lưu trữ thông tin bằng chuỗi

mã vạch, một ứng dụng dựa trên nền tảng Android, sử dụng thư viện Zxing cùng mã

vạch QR.

4.1 Đặt vấn đề

Đặt cho chúng ta một tình huống muốn truyền dữ liệu giữa hai thiết bị di động

thông minh nhưng lại không có bất kỳ một kết nối nào liên kết chúng lại với nhau (do

thiết bị một thiết bị có thể bị hỏng các chức năng Bluetooth, Wi-Fi, thẻ nhớ…). Khi ấy

chúng không có một giải pháp truyền tin nào giữa 2 thiết bị này.

Hoặc đặt trong tình huống thứ hai, đó là khi chúng ta muốn tạo một dịch vụ giá

trị gia tăng phục vụ nhu cầu giải trí như tải nhạc chuông (ringtone), chúng ta có thể tạo

một đoạn nhạc chuông nghe thử, giới thiệu cho bản nhạc chuông chính thức, có dung

lượng rất nhẹ, khoảng vài kB.

Chúng ta sẽ xây dựng một chương trình có khả năng truyền dữ liệu giữ hai điện

thoại sử dụng nền tảng Android (G1 HTC Mobile) dựa trên các ảnh mã QR.

4.2 Giải pháp

Một điện thoại sẽ mã hóa một tập tin muốn truyền sang cho điện thoại kia sang

các ảnh mã QR và hiển thị ra màn hình. Sau đó, điện thoại kia sẽ chụp lại từng ảnh

theo thứ tự để giải mã các bức ảnh đó thành tập tin ban đầu trước khi bên điện thoại

kia thực hiện mã hóa.

4.3 Phân tích 4.3.1 Các chức năng của hệ thống

 Encode (mã hóa)

Mã hóa một tập tin

 Decode (giải mã)

Giải mã từ các ảnh

Giải mã từ các tập tin

34

 Help (trợ giúp)

Hiển thị thông tin chương trình và cách sử dụng hệ thống

4.3.2 Xác định tác nhân và ca sử dụng

Hệ thống của chúng ta rất đơn giản, chỉ có chỉ có duy nhất một tác nhân. Đó

chính là người sử dụng. Tác nhân tham gia hệ thống để thực hiện mã hóa một tập tin, giải mã các ảnh mã QR và xem trợ giúp.

4.3.3 Mối quan hệ giữa tác nhân và các ca sử dụng

Xác định các chức năng của hệ thống, ta có bảng mối quan hệ giữa tác nhân và

các ca sử dụng sau:

Bảng 2: Mối quan hệ giữa tác nhân và các ca sử dụng

Tác nhân Ca sử dụng

 Encode: quản lý chức năng mã hóa

User  Decode: quản lý chức năng giải mã

Người sử dụng  Help: trợ giúp về thông tin chương trình và

cách sử dụng của hệ thống

Từ đó ta có được biểu đồ ca sử dụng của hệ thống.

Hình 9: Biểu đồ ca sử dụng hệ thống

4.3.3.1 Ca sử dụng Encode

Mục đích: Hiển thị cửa sổ chức năng mã hóa, cho phép người dùng nhập đường

dẫn tới tập tin cần mã hóa và thực hiện kiểm tra đường dẫn và mã hóa tập tin đó.

Tác nhân: Người sử dụng.

35

Luồng sự kiện:

Bảng 3: Bảng hành động của tác nhân và phản ứng của hệ thống với ca sử dụng Encode

Hành động của tác nhân Phản ứng của hệ thống

1. Chọn chức năng Encode 2. Hiển thị cửa sổ của chức năng mã hóa

3. Nhập đường dẫn của tập tin cần mã 4. Kiểm tra đường dẫn của tập tin. Thực

hóa. Nhấn nút Encode hiện mã hóa, hiển thị các ảnh đã được mã

hóa ra màn hình

Ngoại lệ: Nếu người dùng nhập tập tin không tồn tại hoặc tập tin quá lớn thì hệ

thống sẽ thông báo cho chúng ta và không thực hiện xử lý tiếp đến khi chúng ta nhập

tập tin thỏa mãn.

Thông tin đầu vào: là đường dẫn tập tin cần mã hóa.

Thông tin đầu ra: các ảnh QR đã được mã hóa.

4.3.3.2 Ca sử dụng Decode

Mục đích: Hiển thị cửa sổ chức năng giải mã. Cho phép người dùng có thể chọn

một trong hai chức năng con của chương trình đó là giải mã theo ảnh hoặc giải mã

theo tập tin.

Tác nhân: người sử dụng.

Luồng sự kiện:

Bảng 4: Bảng hành động của tác nhân và phản ứng của hệ thống với ca sử dụng Decode

Hành động của tác nhân Phản ứng của hệ thống

1. Chọn chức năng Decode 2. Hiển thị cửa sổ của chức năng giải mã

3. Nếu giải mã theo tập tin, nhập đường dẫn của tập tin đầu tiên cần cần giải mã. Chọn chức năng Decode Files 4. Kiểm tra đường dẫn của tập tin. Thực hiện giải mã các tập tin mã hóa và thông báo kết quả giải mã.

5. Nếu giải mã theo ảnh, chọn chức năng Decode Images 6. Thực hiện quét các ảnh mã QR. Thông báo kết quả giải mã.

36

Ngoại lệ:

Trong trường hợp giải mã theo tập tin. Nếu người sử dụng nhập tập tin không tồn

tại, hoặc trong quá trình giải mã xảy ra lỗi, hệ thống sẽ thông báo và không tiếp tục thực hiện giải mã.

Trong trường hợp giải mã theo ảnh. Nếu trong quá trình quét mã QR bị lỗi, nó sẽ

thoát ra khỏi chế độ quét mã QR.

Thông tin đầu vào: là đường dẫn tập tin ảnh QR đầu tiên hoặc các ảnh mã QR

được quét.

Thông tin đầu ra: tập tin gốc ban đầu

4.3.3.3 Ca sử dụng Help

Mục đích: hiển thị các thông tin về chương trình và cách sử dụng của hệ thống.

Tác nhân: người sử dụng.

Luồng sự kiện:

Bảng 5: Bảng hành động của tác nhân và phản ứng của hệ thống với ca sử dụng Help

Hành động của tác nhân Phản ứng của hệ thống

1. Chọn chức năng Help 2. Hiển thị cửa hộp thoại thông tin

chương trình và cách sử dụng của hệ

thống

4.3.4 Biểu đồ tuần tự

Từ bảng các phân tích trên chúng ta xây dựng được các biểu đồ tuần tự thực thi

37

các ca sử dụng tương ứng.

4.3.4.1 Biểu đồ tuần tự của hệ thống

Hình 10: Biểu đồ tuần tự của hệ thống

4.3.4.2 Ca sử dụng Encode

Từ đặc tả chi tiết ca sử dụng Encode ta có biểu đồ tuần tự biểu diễn các hành

động xảy ra thứ tự theo thời gian giữa tác nhân người sử dụng và hệ thống khi người

dùng sử dụng chức năng Encode một tập tin.

 Tác nhân: người sử dụng

 Lớp demo: là lớp giao diện hiển thị giao diện màn hình chính.

 Lớp encode: là lớp chính của ca sử dụng này, có chức năng tạo giao diện,

điều khiển và gọi đến các lớp có liên quan.

 Lớp Base64: là lớp có chức năng mã hóa một mảng byte ra một xâu và ngược

lại

38

 Lớp Thread: lớp này tạo một luồng chạy trong chương trình.

Hình 11: Biểu đồ tuần tự ca sử dụng Encode

4.3.4.3 Ca sử dụng Decode

 Tác nhân: người sử dụng.

 Lớp demo: là lớp giao diện hiển thị giao diện màn hình chính.

 Lớp decode: là lớp chính của ca sử dụng này, có chức năng tạo giao diện,

điều khiển và gọi đến các lớp có liên quan.

 Lớp Base64: là lớp có chức năng mã hóa một mảng byte ra một xâu và ngược

lại.

 Lớp Thread: lớp này tạo một luồng chạy trong chương trình.

Decode files

39

Từ đặc tả chi tiết ca sử dụng Decode files ta suy ra biểu đồ tuần tự biểu diễn các hành động xảy ra thứ tự theo thời gian giữa tác nhân người sử dụng và hệ thống khi người sử dụng chức năng Decode files.

Bảng 6: Biểu đồ tuần tự ca sử dụng Decode files

Decode images

Từ đặc tả chi tiết ca sử dụng Decode images ta có biểu đồ tuần tự biểu diễn các

hành động xảy ra thứ tự theo thời gian giữa tác nhân người sử dụng và hệ thống khi

40

người sửu dụng sử dụng chức năng Decode images.

Hình 12: Biểu đồ tuần tự ca sử dụng Decode Images

Biểu đồ hoạt động

Biểu đồ hoạt động cho thấy rõ dòng hoạt động của hệ thống, gồm các trạng thái

hoạt động, trong đó mỗi trạng thái sẽ chuyển sang một trạng thái khác khi một hoạt

41

động tương ứng được thực hiện.

42

Hình 13: Biểu đồ hoạt động của hệ thống

4.4 Thiết kế 4.4.1 Thiết kế lớp

Dựa trên các phân tích trên từng ca sử dụng phần trên, ta có có thể thiết kế các

lớp của hệ thống như sau:

Các lớp demo, encode, decode và help là lớp dẫn xuất của lớp cơ sở Activity.

Lớp demo: tạo giao diện chính của chương trình liên kết với các chức năng khác

của ứng dụng như Encode, Decode, Help.

Phương thức:

 onCreate() là phương thức Overide của lớp Activity, được gọi khi lớp

này khởi tạo.

 onClick() là phương thức Overide của lớp Activity, được gọi khi có sự

kiện nhấn nút xảy ra.

Lớp encode: tạo giao diện cho ca sử dụng Encode, nhưng chức năng chính của

lớp này là mã hóa một tập tin thành các ảnh mã QR.

 onCreate(): phương thức Overide của lớp Activity, được gọi khi lớp này

khởi tạo.

 myProcess(): phương thức thực hiện gọi tới các phương thức

doEncode() và updateResult().

 doEncode(): phương thức thực hiện việc mã hóa một tập tin thành các

ảnh mã QR.

 updateResult(): được gọi khi phương thức doEncode() thực hiện xong.

 onClick(): phương thức Overide của lớp Activity, được gọi khi có sự

kiện nhấn nút xảy ra.

 showDialog(): phương thức hiển thị một hộp thoại thông báo cho người

dùng các thông tin.

 checkFilePath(): phương thức kiểm tra tập tin có tồn tại hay không.

 fillRect(): phương thức tô màu cho ảnh.

43

 generateQRCodeImage(): phương thức tạo ảnh mã QR.

Lớp decode: tạo giao diện cho ca sử dụng Decode, chức năng chính của lớp này

là giải mã các tập tin ảnh và quét các ảnh QR để khôi phục lại tập tin ban đầu.

Phương thức:

 onCreate(): phương thức Overide của lớp Activity, được gọi khi lớp này

được khởi tạo.

 myProcess(): phương thức thực hiện việc gọi các phương thức

doDecode() và updateResult().

 doDecode(): phương thức thực hiện giải mã các tập tin ảnh QR về tập

tin gốc ban đầu.

 updateResult(): phương thức này được gọi khi thực hiện xong phương

thức doDecode().

 onClick(): phương thức Overide của lớp Activity, được gọi khi có sự

kiện nhấn nút xảy ra (ở đây là nút Decode).

 onActivityResult(): phương thức này là phương thức Overide của lớp cơ sở Activity được gọi sau khi kết thúc một Intent gọi đến Barcode

Scanner (quét mã vạch).

 showDialog(): phương thức hiển thị một hộp thoại thông báo cho người

dùng các thông tin.

 checkFilePath(): phương thức kiểm tra xem tập tin có tồn tại không.

 Lớp help: lớp này có nhiệm vụ hiển thị thông tin chương trình và hướng

dẫn sử dụng các chức năng.

Lớp Base64: lớp này có nhiệm vụ chuyển một mảng byte thành một xâu ký tự và

ngược lại.

Phương thức:

 encode(): mã hóa mảng byte thành xâu.

 decode(): giải mã xâu thành mảng byte.

44

Lớp Thread: được gọi đến để tạo luồng chạy khi mã hóa hoặc giải mã.

45

Hình 14: Biểu đồ lớp của hệ thống

4.5 Thiết kế giao diện

Với những phân tích ở trên ta có thể thiết kế giao diện các ca sử dụng như sau:

Giao diện chính của chương trình Giao diện Encode

Giao diện chính Decode Giao diện Help

Hình 15: Thiết kế giao diện chương trình

4.6 Kiểm thử chương trình 4.6.1 Kiểm thử ca sử dụng

Ta có ba ca sử dụng chính tương ứng với ba ca kiểm thử sau:

4.6.1.1 Ca kiểm thử sử dụng mã hóa tập tin

46

 Chức năng: mã hóa một tập tin thành các ảnh mã QR.

 Đầu vào: đường dẫn của một tập tin.

 Đầu ra mong muốn: các tập tin ảnh mã QR.

Bảng 7: Bảng ca kiểm thử mã hóa tập tin

Tình huống Kết quả

ID

Tồn tại Kết quả mong muốn Kiểu tập tin Kết quả đạt được Kích thước tập tin (byte)

E1 Tồn tại ≤ 4096 Mã hóa thành các tập tin ảnh mã QR Thành công

E2 Tồn tại ≤ 4096 Mã hóa thành các tập tin ảnh mã QR Thành công Văn bản (txt) Nhị phân (PNG, MID…)

E3 Tồn tại Bất kỳ Mã hóa thành 1 tập tin ảnh mã QR duy nhất Thành công

E4 Tồn tại Bất kỳ ≤184 - độ dài tên tập tin gốc >184 - độ dài tập gốc Mã hóa thành nhiều tập tin ảnh mã QR

E5 Tồn tại Bất kỳ > 4096 Thông báo lỗi

E6 - - Thông báo lỗi Không tồn tại Thành công Thành công Thành công

4.6.1.2 Ca kiểm thử sử dụng giải mã tập tin

 Chức năng: giải mã các tập tin ảnh mã QR thành tập tin gốc ban đầu.

 Đầu vào: đường dẫn của tập tin ảnh mã QR đầu tiên được tạo ra.

47

 Đầu ra mong muốn: tập tin gốc ban đầu.

Bảng 8: Bảng ca kiểm thử giải mã tập tin

Tình huống Kết quả ID Kết quả mong muốn Tập tin tồn tại Số lượng tập tin ảnh

DF1 Tồn tại Bất kỳ Giả hóa thành tập tin ảnh văn bản ban đầu Kết quả đạt được Thành công

DF2 Tồn tại Bất kỳ Giải hóa thành tập tin ảnh nhị phân ban đầu Thành công Kiểu tập tin gốc Văn bản (txt) Nhị phân (PNG, MID…)

DF3 Tồn tại Bất kỳ 1

DF4 Tồn tại Bất kỳ >1 Giải mã thành tập tin ban đầu Giải mã thành tập tin ban đầu Thành công Thành công

DF5 Bất kỳ Bất kỳ Thông báo lỗi Thành công

Có tập tin ảnh nào đó bị lỗi hoặc không tồn tại

4.6.1.3 Ca kiểm thử sử dụng giải mã ảnh

 Chức năng: giải mã các ảnh mã QR được quét nhờ Barcode Scanner

(bộ quét mã vạch) thành tập tin gốc ban đầu.

 Đầu vào: các ảnh mã QR được quét qua bộ quét mã vạch.

48

 Đầu ra mong muốn: tập tin gốc ban đầu.

Bảng 9: Bảng ca kiểm thử giải mã ảnh

Tình huống Kết quả ID Kết quả mong muốn Số lượng ảnh

DI1 1

DI2 >1 Quét ảnh Thành công Thành công Giả hóa thành tập tin ảnh văn bản ban đầu Giải hóa thành tập tin ảnh nhị phân ban đầu Kết quả đạt được Thành công Thành công

DI3 >1 Thông báo lỗi Thành công Thành công

DI4 >1 Thành công Giải mã thành tập tin ban đầu Thành công

Thứ tự quét ảnh Theo thứ tự Theo thứ tự Không theo thứ tự bất kỳ Không theo thứ tự trừ các ảnh đầu tiên và cuối cùng

DI5 Lỗi Bất kỳ Bất kỳ Thông báo lỗi Thành công

4.6.2 Kết quả thực nghiệm

Mã hóa

Chương trình có thể mã hóa một tập tin có định dạng bất kỳ, từ dạng thuần văn

bản đến dạng nhị phân thành các tập tin ảnh PNG. Ví dụ mã hóa tập tin ringtone.mid

2.2 kB.

49

Hình 16: Mã hóa tập tin ringtone.mid

Dưới đây là các ảnh của tập tin ringtone.mid đã được mã hóa ra các ảnh mã QR.

ringtone.mid_1.png ringtone.mid_2.png

50

ringtone.mid_3.png ringtone.mid_4.png

ringtone.mid_5.png ringtone.mid_6.png

51

ringtone.mid_7.png ringtone.mid_8.png

ringtone.mid_9.png ringtone.mid_10.png

ringtone.mid_11.png ringtone.mid_12.png

Hình 17: Các ảnh mã QR được chương trình tạo ra từ tập tin MID ringtone.mid

Giải mã

Chương trình đã giải mã thành công các tập tin ảnh mã QR hoặc quét các ảnh

52

này để tạo lại tập tin ban đầu trước khi mã hóa.

Nhập đường dẫn Màn hình chờ giải mã

Giải mã thành công Mở lại tập tin đã giải mã

Hình 18: Một số hình ảnh về giải mã các tập tin ảnh

Ứng dụng

Chương trình đã thực hiện thành công vào việc truyền nhận tập tin giữa máy tính

và điện thoại Android và giữa hai điện thoại Android với nhau…

53

Hiện tại thực nghiệm vẫn đang tiến hành để hoàn thiện chương trình và có thể chuyển hướng phát triển sang hướng tiếp theo đó là truyền dữ liệu giữa hai thiết bị di

động sử dụng hai nền tảng khác nhau (có thể là BlackBerry, Android, iPhone, Window

54

Mobile, Symbian…) với nhau.

Kết luận

Khóa luận đã giới thiệu một số nghiên cứu trong thời gian qua về nền tảng

Android và mã vạch của em, xây dựng thành công “Ứng dụng lưu trữ thông tin bằng

chuỗi mã vạch” trên nền tảng Android phiên bản 1.1.

Về lý thuyết, khóa luận này đã trình bày một số nghiên cứu về các nền tảng di

động, đặc biệt là nền tảng Android, so sánh thấy được những điểm mạnh điểm yếu của

nền tảng này so với các nền tảng di động khác cũng như tương lai của nền tảng

Android. Khóa luận cũng đã giới thiệu về mã vạch, các ứng dụng của mã vạch hiện nay, bộ thư viện mã nguồn mở Zxing và cách sử dụng bộ thư viện này như thế nào.

So với các khóa luận trước về di động, khóa luận này đi nghiên cứu sâu hơn về

tìm hiểu các nền tảng di động hiện nay, so sánh, đánh giá được tiềm năng của mỗi nền

tảng. Về nền tảng Android, cách đây một năm Android vẫn chưa có loại sản phẩm nào chạy nền tảng này, do đó khóa luận lần trước mới chỉ dừng ở thực nghiệm trên trình

giả lập, sau một năm nền tảng Android đã có những thay đổi đáng kể (do Android vẫn

đang trong quá trình hoàn thiện để cạnh tranh được với đối thủ iPhone), khóa luận lần

này tiếp tục nghiên cứu sự thay đổi của nền tảng Android, thiên về kiến trúc là chủ

yếu. Khóa luận cũng đưa ra được đánh giá và sự so sánh với các nền tảng khác như

iPhone và các nền tảng khác…

Về thực nghiệm, khóa luận đã ứng dụng công nghệ mã vạch QR và sử dụng bộ

thư viện Zxing vào xây dựng thành công “Ứng dụng lưu trữ thông tin bằng chuỗi mã

vạch” trên nền tảng Android, triển khai tốt trên điện thoại G1 HTC Mobile. Ứng dụng

có khả năng lưu trữ và truyền thông tin giữa hai điện thoại G1 với nhau và giữa G1 với

máy tính hay các vật hiển thị ảnh khác.

Hướng phát triển tiếp theo sẽ là khảo sát ý kiến, hoàn thiện, tối ưu các chức năng

55

của chương trình. Điểm mạnh nhất của mã vạch trong lưu trữ thông tin là sử dụng ảnh, do đó nó không ảnh hưởng khi truyền thông tin bởi các nền tảng khác nhau. Tiếp tục phát triển ứng dụng trên các nền tảng di động khác (như iPhone, Palm OS, Brew, J2ME, Windows Mobile hay Symbian…) và trên máy bàn. Nhờ ứng dụng của mã vạch, chúng ta sẽ không còn bị phụ thuộc vào các nền tảng mà mình sử dụng.

Phụ lục 1

Hướng dẫn sử dụng chương trình

Khởi động chương trình

Để khởi động chương trình ta chọn chương trình trong danh sách ứng dụng.

Hình 19: Màn hình danh sách các ứng dụng

Chương trình hiển thị một menu các chức năng chính: Encode, Decode, Help.

Hình 20: Màn hình chính của chương trình

Mã hóa

Để vào chức năng mã hóa ta chọn [Encode] trong cửa sổ màn hình chính. Tiếp

đó, ta thực hiện nhập đường dẫn tập tin muốn mã hóa và nhấn nút [Encode].

Hình 21: Cửa sổ chức năng mã hóa

Giải mã ảnh

Để vào chức năng giải mã ảnh, ta chọn [Decode] >> [Images]. Tiếp đó là ta thực

hiện quét lần lượt các ảnh mã QR của tập tin cần giải mã (các ảnh có thể không theo

thứ tự trừ ảnh và ảnh cuối).

Hình 22: Cửa sổ giải mã

Giải mã tập tin ảnh

Để vào chức năng giải mã tập tin ảnh, ta chọn [Decode] từ màn hình chính của

chương trình. Tiếp đến, ta thực hiện nhập đường dẫn tập tin ảnh đầu tiên cần giải mã,

nhấn nút [Files].

Hình 23: Nhập đường dẫn tập tin ảnh đầu tiên được mã hóa

Phụ lục 2

Một số thuật ngữ cơ bản của nền tảng Android

Phụ lục này giải thích một số thuật ngữ về Android, dựa trên [14].

Tập tin .apk

Là tập tin ứng dụng đóng gói Android. Mỗi ứng dụng Android được biên dịch và

đóng gói lại trong một tập tin đơn. Nó bao gồm tất cả mã của ứng dụng (tập tin .dex), các tài nguyên (resources), (tài sản) assets và tập tin khai báo (manifest). Tập tin ứng

dụng đóng gói có thể có tên bất kỳ nhưng nhất thiết phải có phần mở rộng là .apk. Ví

dụ ten_tap_tin.apk. Để cho tiện, một tập tin ứng dụng đóng gói.

Tập tin .dex

Là tập tin đã được biên dịch từ mã chương trình ứng dụng Android. các chương

trình được biên dịch ra các tập tin .dex (Dalvik Executable), sau đó được nén lại vào 1

tập tin .apk duy nhất trên thiết bị. Các tập tin .dex có thể được tạo ra nhờ ứng dụng

biên dịch dịch tự động được viết trên ngôn ngữ lập trình Java.

Action

Là mô tả của một thứ mà một cái gửi Intent muốn hoàn thành. Một hành động là

một giá trị kiểu xâu được gán cho một Intent. Các xâu có thể được định nghĩa bởi

Android hoặc bởi một người phát triển thứ 3. Ví dụ, android.intent.action.VIEW cho

một địa chỉ Web, hoặc com.example.rumbler.SHAKE_PHONE cho một ứng dụng tùy

chỉnh để rung điện thoại.

Activity

Là một màn hình đơn trong một ứng dụng, hỗ trợ của mã JAVA và kế thừa từ

lớp Activity. Thông thường, một activity được biểu diễn tự nhiên bằng một cửa sổ đầy màn hình mà có thể nhận và xử lý các sự kiện UI và thực thi các tác vụ phức tạp, bởi vì Window nó sử dụng để vẽ lại các cửa sổ của nó. Mặc dù một Activity thường là đầy màn hình, nó cũng có thể nổi hay trong suốt.

Adb

Viết tắt của Android Debug Bridge, một ứng dụng gỡ rối dòng lệnh đi kèm trong

SDK. Nó cung cấp các công cụ để duyệt thiết bị, công cụ sao chép trên thiết bị và

chuyển tiếp các cổng cho việc gỡ rối. Nếu triển trên Eclipse sử dụng ADT Plugin, adb

được tích hợp sẵn trong môi trường phát triển.

Application

Xét về khía cạnh thành phần, một ứng dụng Android bao gồm một hay nhiều

activity, services, listeners và intent receiver. Xét về khía cạnh tập tin nguồn, một ứng

dụng Android bao gồm mã nguồn, các tài nguyên, các tài sản và một tập tin khai báo. Trong quá trình biên dịch, những tập tin này được đóng gói lại trong một tập tin đơn

được gọi là tập tin ứng dụng đóng gói.

Canvas

Là một mặt vẽ xử lý phức hợp các bít hiện thời dựa theo Bitmap hay đối tượng Surface. Canvas là cách đơn giản nhất, dễ dàng nhất để vẽ các đối tượng 2D trên màn

hình. Tuy nhiên, nó không hỗ trợ cảm nhận gia tốc phần cứng như OpenGL ES làm.

Lớp cơ sở của nó là Canvas.

Content Provider

Là một lớp dữ liệu trừu tượng mà ta có thể sử dụng để giao tiếp dữ liệu ứng dụng

của ta với các ứng dụng khác một cách an toàn. Một content provider được xây dựng

trên lớp ContentProvider, lớp này xử lý nội dung xâu truy vấn của một dạng cụ thể để trả về dữ liệu theo một dạng cụ thể.

Dalvik

Là máy ảo của nền tảng Android. Máy ảo Dalvik là một máy ảo thông dịch mà

chạy các tập tin định dạng tập tin thực thi Dalvik (.dex), một định dạng được tối ưu

hóa hiệu quả lưu trữ và thực thi lập bản đồ bộ nhớ. Máy ảo là máy ảo dựa trên thanh

ghi và có thể thực thi các lớp đã biên dịch bằng bộ biên dịch ngôn ngữ Java và được

chuyển đổi sang định dạng .dx bằng cách sử dụng công cụ “dx”.

DDMS

Dịch vụ theo dõi gỡ rối Dalvik, là ứng dụng gỡ rối đi kèm với SDK. Nó cung cấp

chụp màn hình, ghi lại sụp đổ và xử lý kiểm tra khả năng. Nếu phát triển trên Eclipse sử dụng ADT Plugin, DDMS được tích hợp vào môi trường phát triển.

Dialog

Là một cửa sổ nổi, thực hiện hành động ít quan trọng. Một dialog có thể chỉ có các nút và được chỉ định để thực hiện một hành động đơn giản (như là lựa chọn nút) và

có thể trả về một giá trị. Android cung cấp một dialog mặc định, đơn giản cho ta với

các nút chức năng, mặc dù ta cũng có thể tự định nghĩa bố trí dialog. Lớp cơ sở của các dialog là Dialog.

Drawable

Là một tài nguyên trực quan được biên dịch mà có thể sử dụng như hình nền, tiêu

đề, hay phần khác của màn hình. Drawable thường được tải vào trong thành phần giao diện khác, ví dụ như một ảnh nền. Drawable không có khả năng nhận các sự kiện,

nhưng lại gán các thuộc tính khác như là “trạng thái”, để kích hoạt các lớp con như các

đối tượng hoạt họa hay các thư viện hình ảnh. Nhiều các đối tượng drawable được tải

từ các tập tin tài nguyên − xml hay các tập tin ảnh nhị phân. Các tài nguyên drawable được biên dịch vào các lớp con của lớp android.graphics.Drawable.

Intent

Là một đối tượng thông điệp cho phép ta có thể khởi chạy hay giao tiếp không

đồng bộ với các ứng dụng khác/các activity khác. Một đối tượng Intent là một trường

hợp cụ thể trong lớp Intent. Nó bao gồm vài trường mà ta có thể cung cấp, để xác định

ứng dụng/activity nhận Intent và làm gì khi xử lý Intent. Một ứng dụng có thể gửi

Intent tới một ứng dụng đích hoặc gửi quảng bá và có thể được xử lý tuần tự bởi nhiều ứng dụng.

Intent Filter

Là một đối tượng mà một ứng dụng khai báo trong tập tin manifest của nó, cho

hệ thống biết những loại Intent nào được chấp nhận. Thông qua intent, một ứng dụng

có thể cho biết quan tâm những loại dữ liệu nào.

Broadcast Receiver

Là một lớp ứng dụng lắng nghe các Intent quảng bá, mà không phải được gửi đến

một application/activity đích nào. Hệ thống cung cấp một Intent quảng bá cho tất cả các bộ nhận quảng bá được quan tâm, mà xử lý Intent theo tuần tự.

Layout Resource

Là một tập tin XML mô tả bố cục của một màn hình Activity.

Tập tin Manifest

Là một tập tin khai báo mà mỗi ứng dụng đều phải định nghĩa, để mô tả tên gói

ứng dụng, phiên bản, các thành phần (các activity, intent filter, service), các thư viện được sử dụng và mô tả các activity khác nhau, v.v…

OpenGL ES

Adroid cung cấp bộ thư viện OpenGL ES để ta có thể sử dụng cho các ảnh 3D

phức tạp 1 cách nhanh chóng. Nó khó sử dụng hơn đối tượng Canvas, nhưng lại tốt hơn cho cá đối tượng 3D.

Resources

Là các thành phần của ứng dụng không phải lập trình ngoài mã ứng dụng được

biên dịch, nhưng lại có thể tải từ mã ứng dụng bằng cách sử dụng định dạng tham chiếu phổ biến. Android hỗ trợ nhiều loại resource, nhưng resource đặc trưng của

chương trình bao gồm các xâu, các thành phần bố cục, đồ họa và các tập tin truyền

thông, v.v…Resource của một ứng dụng luôn được lưu trong thư mục con res/* của dự

án.

Service

Là một đối tượng của lớp Service chạy dưới nền (không có sự xuất hiện của giao

diện người sử dụng) để thực hiện các hành động liên tục, như là chơi nhạc hay theo dõi hoạt động mạng.

Surface

Một đối tượng kiểu Surface miêu tả một khối bộ nhớ để lấy ra ngoài màn hình.

Một Surface có một đối tượng Canvas để vẽ và cung cấp các phương thức trợ giúp

khác nhau để vẽ các lớp và thay đổi kích thước của surface. Ta không nên dùng lớp

này trực tiếp; sử dụng SurfaceView để thay thế.

SurfaceView

Một đối tượng View mà chứa một Surface để vẽ và các phương thức trình bày để xác định cỡ của nó và định dạng một cách tự động. Một SurfaceView cung cấp một

cách để vẽ độc lập với luồng UI cho các hoạt động cần nhiều tài nguyên (như là các trò chơi hay xem trước của máy ảnh), nhưng nó sử dụng thêm bộ nhớ là điều tất yếu. SurfaceView hỗ trợ cả đồ họa Canvas và OpenGL ES. Lớp cơ sở là SurfaceView.

Theme

Đặt thuộc tính (cỡ chữ, màu nền, v.v…) gói lại cùng để định nghĩa các thiết lập

hiển thị mặc định khác nhau. Android cung cấp vài theme chuẩn, được liệt kê ở R.style (bắt đầu bằng “Theme_”).

URI trong Android

Android sử dụng chuỗi URI như là cơ sở cho việc yêu cầu dữ liệu trong một

content provider (chẳng hạn như lấy danh sách địa chỉ liên lạc) và các hành động yêu cầu trong một Intent (như mở một trang Web trong trình duyệt). Định dạng địa chỉ

URI đặc trưng theo loại hình sử dụng, một ứng dụng có thể xử lý các địa chỉ URI xác

định và các xâu theo cách nào nó muốn. Vài địa chỉ URI được dành riêng cho các

thành phần của hệ thống. Ví dụ, yêu cầu về dữ liệu từ một content provider phải sử dụng “content://”. Trong một Intent, một URI sử dụng một “http://” sẽ được trình

duyệt xử lý.

View

Là một đối tượng vẽ vào một vùng hình chữ nhật trên màn hình và xử lý chạm,

nhấn phím và các sự kiện tương tác khác. Một View là lớp cơ sở cho phần lớn các

thành phần bố cục của một màn hình Activity hay Dialog (các textbox, các cửa sổ,

v.v…). Nó nhận lời gọi từ đối tượng cha của nó (xem Viewgroup phía dưới) để tự vẽ chính mình và cho đối tượng cha biết về vị trí và độ lớn của nó.

Viewgroup

Là một đối tượng chứa nhóm một tập hợp các View con. Viewgroup chịu trách

nhiệm quyết định vị trí của các view con ở đâu và độ lớn của chúng là bao nhiêu, cũng

như gọi đến từng cái để vẽ lại chính nó khi thích hợp. Vài viewgroup không nhìn thấy

và chỉ là cho bố cục, trong khi các cái khác có UI bên trong. Các viewgroup đều nằm

trong gói widget và là mở rộng của lớp trừu tượng ViewGroup.

Widget

Một tập hợp đầy đủ các lớp con đã cài đặt mà vẽ lại các mẫu phần tử và các

thành phần UI, như là một textbox hay menu popup. Bởi vì một widget đã cài đặt đầy đủ, nó xử lý đo lường và tự vẽ lại chính nó và đáp ứng với các sự kiện màn hình. Các widget đều ở trong gói android.widget.

Window

Là một ứng dụng Android, một đối tượng thừa kế từ lớp trừu tượng Window mà xác định các phần tử của một cửa sổ chung, chẳng hạn như giao diện (chữ của thanh

tiêu đề, vị trí và nội dung của các menu, v.v…). Dialog và Activity sử dụng một cài

đặt của class này để vẽ lại cửa sổ. Chúng ta không cần phải cài đặt lớp này hay sử dụng các cửa sổ trong ứng dụng của mình.

Tài liệu tham khảo

[1] Smartphone. (n.d.). Được lấy từ trang Wikipedia, the free encyclopedia: http://en.wikipedia.org/wiki/Smartphone

[2] Mobile Development mindmap. (n.d.). Được lấy từ trang Mobile Development:

http://mobilephonedevelopment.com/archives/600

[3] Binary Runtime Environment for Wireless. (n.d.). Được lấy từ trang Wikipedia,

the free encyclopedia: http://en.wikipedia.org/wiki/Binary_Runtime_Environment_for_Wireless

[4] What is BREW? (n.d.). Được lấy từ trang Tech-FAQ.com: http://www.tech- faq.com/brew.shtml

[5] Symbian OS. (n.d.). Được lấy từ trang Answers.com:

http://www.answers.com/topic/symbian-os

[6] Blackberry. (n.d.). Được lấy từ trang Wikipedia, the free encyclopedia: http://en.wikipedia.org/wiki/Blackberry

[7]

iPhone. (n.d.). Được lấy từ trang Wikipedia, the free encyclopedia: http://en.wikipedia.org/wiki/IPhone

[8] What is Android? (n.d.). Được lấy từ trang Android Offical Website: http://www.android.com/about/

[9] Application Fundamentals (n.d.). Được lấy từ trang Android Offical Website: http://developer.android.com/guide/topics/fundamentals.html

[10] Mã vạch. (n.d.). Được lấy từ trang Wikipedia, the free encyclopedia: http://vi.wikipedia.org/wiki/Mã_vạch

[11] Mã QR. (n.d.). Được lấy từ trang Wikipedia, the free encyclopedia: http://vi.wikipedia.org/wiki/Mã_QR

[12] zxing - Google Code. (n.d.). Được lấy từ trang Google Code:

http://code.google.com/p/zxing/

[13] Calling ZXing in a program. (n.d.). Được lấy từ trang Google Code: http://code.google.com/p/zxing/wiki/DeveloperNotes

[14] Glossary. (n.d.). Được lấy từ trang Android Developers:

http://developer.android.com/guide/appendix/glossary.html

[15] How to scan a barcode from another Android application via Intents. (n.d.).

Được lấy từ trang Google Code: http://code.google.com/p/zxing/wiki/ScanningViaIntent

[16] Burnette Ed. Hello, Android: Introducing Google's Mobile Development Platform. Nhà xuất bản Pragmatic Bookshelf, 2008.

[17] DiMarzio Jerome. Android a Programmer’s Guide. Nhà xuất bản McGraw-Hill

Osborne Media, 2008.

[18] Haseman Chris. Android Essentials. Nhà xuất bản Apress, 2009.

[19] Mark L. Murphy. The Busy Coder's Guide to Android Development. Nhà xuất

bản CommonsWare, LLC, 2008.

[20] Meier Reto. Professional Android™ Application Development. Nhà xuất bản Wrox, 2008.