Tải bản đầy đủ (.docx) (86 trang)

Xây dựng ứng dụng nghe nhạc trên nền hệ điều hành android

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.32 MB, 86 trang )

NHIỆM VỤ CỦA ĐỒ ÁN
Đề tài tập trung nghiên cứu về hệ điều hành Android với một số nội dung
chính như sau:







Giới thiệu tổng quan về hệ điều hành Android.
Nghiên cứu về kiến trúc của hệ điều hành Android.
Nghiên cứu về các khối chính tạo nên ứng dụng Android.
Tìm hiểu về eclipse và Android Project trong eclipse.
Nghiên cứu về các thành phần tạo nên giao diện của ứng dụng.
Tìm hiểu về các gói của Android đặc biệt tập trung vào gói android.
media và lớp MediaPlayer.

 Xây dựng demo ứng dụng MusicPlayer.

LỜI CẢM ƠN

1


Để có được thời gian viết đồ án và làm việc hiệu quả đầu tiên cho em xin
gửi lời cảm ơn chân thành đến Trường Đại Học Công Nghệ và Truyền Thông –
Bộ môn Hệ Thống Thông Tin đã tạo điều kiện tốt nhất cho em có thể hoàn thành
tốt đợt báo cáo đồ án tốt nghiệp của mình.
Bên cạnh đó, em xin cảm ơn sự hướng dẫn tận tình của cô Nguyễn Thị
Tính đã giúp đỡ em hoàn thành tốt đợt báo cáo đồ án tốt nghiệp này. Thiếu sự


giúp đỡ của cô em không thể có được kết quả như ngày hôm nay.
Trong quá trình làm đồ án, cũng như trong quá trình viết báo cáo, em khó
tránh khỏi sai sót. Rất mong các thầy, cô trong bộ môn và cô giáo Nguyễn Thị
Tính bỏ qua và chỉ dẫn thêm cho em.
Em xin chân thành cảm ơn!

Thái Nguyên, tháng 6 năm 2012
Sinh viên
Bùi Văn Cương

LỜI CAM ĐOAN
Em xin cam đoan toàn bộ nội dung của báo cáo này là do em tự tìm hiểu
nghiên cứu dưới sự định hướng của cô giáo hướng dẫn. Nội dung báo cáo này
không sao chép và vi phạm bản quyền từ bất kỳ công trình nghiên cứu nào.

2


Nếu những lời cam đoan trên không đúng, em xin chịu hoàn toàn trách
nhiệm trước pháp luật.
Thái Nguyên, tháng 6 năm 2012
Sinh viên
Bùi Văn Cương

MỤC LỤC

3


LỜI NÓI ĐẦU

Trong những năm gần đây, nền tảng công nghệ thông tin phát triển mạnh
mẽ cùng với đó là sự ra đời của các thiết bị di động như máy tính bảng, điện
thoại, smartphone…ngày càng được ưa chuộng và sử dụng nhiều hơn. Các ứng
dụng giờ đây không chỉ chạy được trên máy tính mà còn chạy được trên cả thiết
bị có hệ điều hành nữa. Và việc xây dựng các ứng dụng cho những thiết bị trên
cũng được người ta quan tâm nhiều hơn. Các ứng dụng dựa trên nền tảng là hệ
điều hành cho thiết bị di động ngày càng đa dạng và phong phú hơn, đáp ứng
được ngày càng nhiều các yêu cầu thực tế của người dùng. Mỗi thiết bị như thế
đều chứa trong nó một hệ điều hành có khả năng chạy được ứng dụng như một
máy tính. Có thể nói hệ điều hành là nền tảng còn các ứng dụng sẽ làm phong
phú hơn cho nền tảng đó. Android OS là hệ điều hành trên điện thoại di động
được phát triển bởi Google và dựa trên nền tảng Linux. Việc xây dựng ứng dụng

4


cho điện thoại di động chạy hệ điều hành Android hiện nay đang rất mới và rất
phát triển ở Việt Nam.
Với sự hấp dẫn của các ứng dụng trong Android cùng với bản tính tò mò
thích khám phá cái mới và sự khuyến khích của bạn bè và cô giáo hướng dẫn.
Em đã quyết định thực hiện đồ án “Xây dựng ứng dụng nghe nhạc trên nền hệ
điều hành Android”. Nội dung đồ án của em gồm 4 chương:
Chương 1: Tổng quan về hệ điều hành Android. Chương này trình bày
về lịch sử phát triển, ưu thế và kiến trúc của hệ điều hành Android.
Chương 2: Cơ sở lý thuyết lập trình ứng dụng Android. Chương này
trình bày cấu trúc của một project, các khối chính tạo nên ứng dụng và hệ thống
các thành phần tạo giao diện ứng dụng Android.
Chương 3: Phân tích và thiết kế hệ thống. Chương này trình bày biểu
đồ UseCase và biểu đồ trình tự của ứng dụng nghe nhạc.
Chương 4: Thiết kế ứng dụng. Chương này trình bày chi tiết về quy

trình thiết kế ứng dụng MusicPlayer trong eclipse.

CHƯƠNG 1
TỔNG QUAN VỀ HỆ ĐIỀU HÀNH ANDROID
1. Giới thiệu chung về hệ điều hành Android
Android là một nền tảng mã nguồn mở toàn diện được thiết kế cho các
thiết bị di động. Nó là sự liên minh giữa ông lớn Google và Open Handset
Alliance là các tập đoàn sản xuất thiết bị cầm tay nổi tiếng như Intel, SamSung,
Toshiba….Với mục tiêu là “tăng tốc việc đổi mới trong di động và cung cấp cho
người tiêu dùng nhiều tiện ích phong phú, ít tốn kém.” Và Android chính là công
cụ để làm điều đó.
Có thể nói Android là cuộc cách mạng trong không gian di động. Lần đầu
tiên nó thực sự là một nền tảng mở, tách biệt phần cứng với phần mềm chạy trên
nó. Điều này cho phép số lượng lớn các thiết bị chạy nhiều ứng dụng tương tự

5


nhau và tạo ra một hệ sinh thái phong phú và đa dạng cho các nhà phát triển và
người tiêu dùng.
Android là một nền tảng toàn diện điều này có nghĩa là nó là một tập hợp
các phần mềm hoàn chỉnh cho thiết bị di động. Đối với các nhà phát triển
Android cung cấp các công cụ và các khung cơ bản cho việc phát triển các ứng
dụng một cách nhanh chóng và dễ dàng. Thư viện Android SDK là tất cả những
gì mà cần dùng để bắt đầu phát triển với android; ngay cả khi không có một điện
thoại thật sự. Còn đối với người sử dụng, Android làm việc một cách chính xác
trên bề mặt màn hình của điện thoại. Thêm vào đó người sử dụng cũng có thể tùy
chỉnh điện thoại theo cách riêng của họ. Đối với các nhà sản xuất Android là giải
pháp hoàn chỉnh để chạy trên các thiết bị của họ. Khác với một số trình điều
khiển phần cứng cụ thể, Android cung cấp mọi thứ để thiết bị của họ làm việc.

Android là một nền tảng mã nguồn mở, toàn bộ ngăn xếp từ các module
cấp thấp của Linux đến tất cả các thư viện gốc và từ các ứng dụng khung cho đến
các ứng dụng hoàn chỉnh là hoàn toàn mở. Hơn thế nữa Android còn được chứng
nhận là hệ điều hành thân thiện với người sử dụng. Nó được cấp giấy phép bởi
Apache/MIT(giấy phép chứng nhận mã nguồn mở thân thiện) nó có thể được mở
rộng và phát triển với nhiều mục đích khác nhau mà không cần phải để ý đến bản
quyền hay giấy phép sử dụng. Điều này đồng nghĩa với việc bạn có thể xem toàn
bộ mã nguồn của nền tảng, có thể thêm bất kỳ những thiết kế bí mật của bạn và
không đưa lại cộng đồng nếu không muốn.
Android được thiết kế với mục đích xây dựng nền tảng cho thiết bị di
động. Khi thiết kế Android, nhóm phát triển đã xem xét để lường trước được các
khả năng mà không thay đổi được đối với một thiết bị. Chẳng hạn như công suất
của thiết bị là không thể thay đổi, cùng với hạn chế về bộ nhớ và tốc độ xử lý đó
là những ràng buộc trong việc thiết kế nền tảng di động đã được đề cập đến trong
suốt thời gian thiết kế Android. Android được thiết kế để chạy trên tất cả các loại
thiết bị cầm tay, Android không thực hiện bất kỳ giả định nào về kích thước của
màn hình cũng như độ phân giải hay chipset của thiết bị.

6


Trong lịch sử phát triển, ban đầu Android thuộc sở hữu của công ty
Android Inc. Được Google mua lại vào năm 2005 và bắt đầu xây dựng Android
Platform. Cuối năm 2007 liên minh Open Handset Alliance được thành lập bao
gồm các tập đoàn lớn và nổi bật như SamSung, LG, Toshiba… được công bố.
Android chính thức trở thành mã nguồn mở. Phiên bản SDK đầu tiên được phát
hành vào tháng 11 năm 2007, hãng T-Mobile cũng công bố chiếc điện thoại
Android đầu tiên đó là chiếc T-Mobile G1, chiếc smartphone đầu tiên dựa trên
nền tảng Android. Một vài ngày sau đó, Google tiếp tục công bố sự ra mắt phiên
bản Android SDK release Candidate 1.0. Trong tháng 10 năm 2008 Google được

cấp giấy phép mã nguồn mở cho Android Platform. Vào cuối năm 2008, Google
cho phát hành một thiết bị cầm tay được gọi là Android Dev Phone 1 có thể chạy
được các ứng dụng Android mà không bị ràng buộc vào các nhà cung cấp mạng
điện thoại di động. Mục tiêu của thiết bị này là cho phép các nhà phát triển thực
hiện các cuộc thí nghiệm trên một thiết bị thực có thể chạy hệ điều hành Android
mà không phải ký một bản hợp đồng nào. Năm 2009 các thiết bị chạy trên nền
tảng Android tăng lên. Phiên bản mới của hệ điều hành được phát hành là:
Cupcake (1.5), Donut(1.6), và Eclair(2.0 và 2.1). Lúc này đã có hơn 20 thiết bị
chạy hệ điều hành Android. Trong năm 2010, Android là nền tảng tốt thứ 2 cho
điện thoại Smartphone sau Blackberry. Froyo (Android 2.2) được phát hành. Lúc
này đã có hơn 60 thiết bị chạy nền tảng Android.
Với Google, vì android hoàn toàn miễn phí, Google không thu tiền từ
những hãng sản xuất điện thoại, tuy không trực tiếp hưởng lợi từ android nhưng
bù lại, những dịch vụ của hãng như Google Search, Google Maps,... nhờ có
android mà có thể dễ dàng xâm nhập nhanh vào thị trường di động vì mỗi chiếc
điện thoại được sản xuất ra đều được tích hợp hàng loạt dịch vụ của Google.Từ
đó hãng có thể kiếm bội, chủ yếu là từ các nguồn quảng cáo trên các dịch vụ đó.
Với các nhà phát triển ứng dụng (developers), việc hệ điều hành android
được sử dụng phổ biến đồng nghĩa với việc họ có thể thoải mái phát triển ứng
dụng trên nền android với sự tin tưởng là ứng dụng đó sẻ có thể chạy được ngay
trên nhiều dòng điện thoại của các hãng khác nhau. Họ ít phải quan tâm là đang

7


phát triển cho điện thoại nào, phiên bản bao nhiêu vì nền tảng android là chung
cho nhiều dòng máy, máy ảo Java đã chịu trách nhiệm thực thi những ứng dụng
phù hợp với mỗi dòng điện thoại mà nó đang chạy. Tất cả các chương trình ứng
dụng được viết bằng ngôn ngữ Java kết hợp với XML nên có khả năng khả
chuyển cao.

Một số hãng sản xuất điện thoại có sử dụng hệ điều hành android tiêu biểu
:
-

HTC với các dòng Desire HD, Evo 4G, DROID ERIS, Desire Z,
Hero, Desire, Tattoo, Wildfire, Droid Incredible, Legend, Magic,
Google Nexus One, Dream, Aria, Paradise

-

LG với các dòng GT540 Optimus, Optimus Chic E720, Optimus
One P500, GW620, Optimus Z, Optimus Q, KH5200 Andro-1,
GW880, C710Aloha.

-

MOTOROLA với các dòng MILESTONE 2, BACKFLIP, Droid
XTreme,

-

MT710 ZHILING, MILESTONE, XT720 MOTOROI, A1680,
XT800

-

ZHISHANG, DEFY, CHARM, XT806...

-


SAMSUNG với các dòng máy I9000 Galaxy S, Galaxy Tab, Epic
4G, i5510, I5500 Galaxy 5, I7500 Galaxy, I5800 Galaxy 3,
M110S Galaxy S, I6500U Galaxy, Galaxy Q, I5700 Galaxy Spica,
I8520 Galaxy Beam, I909 Galaxy S

-

SONY : XPERIA X10, XPERIA X10 mini, XPERIA X8

-

ACER với các dòng máy beTouch T500, Liquid E, Stream,
Liquid, beTouch.

-

E110, beTouch E130, beTouch E400, beTouch E120, Liquid Metal

-

Ngoài ra còn nhiều hãng điện thoại vừa và nhỏ khác nữa cũng sử
dụng hệ điều hành android trong sản phẩm của mình....

8


Giống như bất kỳ phần mềm nào. Android được cải thiện theo thời gian,
điều này được phản ánh trong một số phiên bản của nó. Bảng sau đây giải thích
một số phiên bản:


Trong bảng trên những gì quan trọng nhất được thể hiện trong các cấp độ
của APIs(API level). Các phiên bản thay đổi theo thời gian bởi vì các bản vá lỗi
hoặc bản cải tiến hiệu suất. Bảng sau đây thể hiện lịch sử các phiên bản và sự
phân bố của các phiên bản trong năm 2011.

9


Trong bảng phân phối trên, có rất nhiều người sử dụng phiên bản 1.5 và
1.6 nhiều còn phiên bản mới 2.3 lại không được nhiều người sử dụng mặc dù nó
mới nhất và cao nhất, nhưng các phiên bản 2.x đang tăng lên vì các phiên bản 1.x
đã cũ và sẽ không có bản vá lỗi hay cập nhật firmware và thay vào đó các nhà
sản xuất thường nâng cấp các bản mới hơn. Tuy nhiên từ phiên bản 1.6 trở đi các
phiên bản đã ổn định và thích hợp với hầu hết các ứng dụng.
2. Máy ảo Dalvik trong Android
Dalvik là mục đích xây dựng máy ảo được thiết kế đặc biệt cho android,
và phát triển bởi Dan Bornstein và nhóm của ông tại Google.
Máy ảo Java được đã được thiết kế với một kích thước phù hợp và nhóm
Dalvik cảm thấy rằng họ có thể làm công việc này tốt hơn trên các thiết bị di
động. Họ đã nhìn ra các ràng buộc cụ thể trong môi trường di động là ít thay đổi
trong tương lai gần. Chẳng hạn như tuổi thọ của pin với sức mạnh của bộ xử lý.
Và Dalvik đã được xây dựng để giải quyết những ràng buộc đó.
Một tác dụng khác nữa của việc thay thế máy ảo Java bởi máy ảo Dalvik
đó là việc cấp giấy phép sử dụng. Trong khi ngôn ngữ lập trình java, các công cụ
trong java, thư viện của java đều là miễn phí thì máy ảo Java lại không phải như
vậy. Chính vì vấn đề phát sinh này mà vào năm 2005 khi công việc trên Dalvik
đã được bắt đầu. Ngày nay, có nhiều lựa chọn mã nguồn mở thay thế cho máy ảo
Java của SUN như dự án OpenJDK và Apache Harmony. Bằng việc phát triển
một mã nguồn mở đúng đắn và được chứng nhận là máy ảo thân thiện.Android
cung cấp một nền tảng đầy đủ các tính năng, được khuyến khích áp dụng cho

nhiều loại thiết bị mà không cần phải quan tâm về giấy phép sử dụng.
Trong Java tệp tin nguồn Java được biên dịch thành mã Java byte sử dụng
trình biên dịch Java, và sau đó chạy mã byte này trên máy ảo Java. Trong
Android điều này lại khác, ta vẫn phải biên dịch tệp tin nguồn thành mã byte Java
sử dụng trình biên dịch của Java. Nhưng tại cùng thời điểm đó mã byte Java lại
được biên dịch lại một lần nữa bởi trình biên dịch Dalvik để trở thành mã byte
Dalvik. Cuối cùng mã byte Dalvik được thực thi bởi máy ảo Dalvik. Hình dưới
đây minh họa việc so sánh hai trình biên dịch trên:

10


Vấn đề ở đây là tại sao không biên dịch thẳng tệp nguồn Java thành mã
byte Dalvik. Điều này được giải thích vào năm 2005 khi mà công việc trên
Dalvik bắt đầu, ngôn ngữ Java đã luôn thay đổi trong suốt thời gian trước đó
nhưng các mã byte Java là nhiều hơn hoặc ít hơn so trong nhân của nó. Vì vậy
nhóm nghiên cứu android đã chọn Dalvik làm cơ sở trên mã byte Java thay vì
chọn mã nguồn Java. Và như vậy theo lý thuyết thì có thể viết các ứng dụng
Android sử dụng bất kỳ ngôn ngữ nào mà có biên dịch thành mã byte Java.
Chẳng hạn như Python hay Ruby.
Một số lớp không đầy đủ của Java trong Android:
-

Java Standard Edition: sử dụng để phát triển các ứng dụng cơ bản
trên máy tính.

-

Java Enterprise Edition (aka J2EE or JavaEE): sử dụng để phát
triển các ứng dụng cho việc kinh doanh.


-

Java Micro Edition (aka J2ME or JavaME): phát triển các ứng
dụng di động.

11


Thư viện của Java trong Android gần giống như Java Standard Edition. Sự
khác biệt chủ yếu ở đây là Java sử dụng thư viện giao diện (AWT và Swing) đã
được loại bỏ và thay thế bằng các thư viện Android cụ thể. Và như vậy Android’s
Java cũng được thêm một vài tính năng mới trong chuẩn Java trong khi nó hỗ trợ
hầu hết các chức năng chuẩn của Java.
3. Kiến trúc của Android
Mô hình sau thể hiện một cách nhìn tổng quát các thành phần của hệ điều
hành Android. Mỗi một phần được đặc tả một cách chi tiết dưới đây:

Hệ điều hành android có 4 tầng từ dưới lên trên là tầng hạt nhân Linux
(Phiên bản 2.6), tầng Tầng Libraries & Android runtime , Tầng Application
Framework và trên cùng là tầng Application.
3.1. Tầng hạt nhân Linux (Linux Kernel layer)
Hệ điều hành android được phát trển dựa trên hạt nhân linux, cụ thể là hạt
nhân linux phiên bản 2.6, điều đó được thể hiện ở lớp dưới cùng này. Tất cả mọi
hoạt động của điện thoại muốn thi hành được thì đều được thực hiện ở mức cấp
thấp ở lớp này bao gồm quản lý bộ nhớ (memory management), giao tiếp với

12



phần cứng (driver model), thực hiện bảo mật (security), quản lý tiến trình
(process). Kernel Linux hoạt động như một lớp trừu tượng hóa giữa phần cứng
và phần còn lại của ngăn xếp các phần mềm.
Tuy được phát triển dựa vào nhân linux nhưng thực ra nhân linux đã được
nâng cấp và sửa đổi rất nhiều để phù hợp với tính chất của những thiết bị cầm tay
như hạn chế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu cần
kết nối mạng không dây...
Tầng này có các thành phần chủ yếu :
-

Display Driver : Điều khiển việc hiển thị lên màn hình cũng như
thu nhận những điều khiển của người dùng lên màn hình (di
chuyển, cảm ứng...)

-

Camera Driver : Điều kiển hoạt động của camera, nhận luồng dữ
liệu từ camera trả về.

-

Bluetooth Driver : Điều khiển thiết bị phát và thu sóng Bluetooth.

-

USB driver : Quản lý hoạt động của các cổng giao tiếp USB

-

Keypad driver : Điều khiển bàn phím


-

Wifi Driver : Chịu trách nhiệm về việc thu phát sóng wifi

-

Audio Driver : điều khiển các bộ thu phát âm thanh, giải mã các
tính hiệu dạng audio thành tín hiệu số và ngược lại

-

Binder IPC Driver : Chịu trách nhiệm về việc kết nối và liên lạc với
mạng vô tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo những
chức năng truyền thông được thực hiện.

-

M-System Driver : Quản lý việc đọc ghi... lên các thiết bị nhớ như
thẻ SD, flash.

-

Power Madagement : Giám sát việc tiêu thụ điện năng.

3.2. Tầng Library và android runtime
Android bao gồm một tập hợp các thư viện cơ bản mà cung cấp hầu hết
các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java. Tất cả
các ứng dụng Android đều chạy trong tiến trình riêng. Máy ảo Dalvik đã được
viết để cho một thiết bị có thể chạy nhiều máy ảo hiệu quả. Các VM Dalvik thực


13


thi các tập tin thực thi Dalvik (dex). Định dạng được tối ưu hóa cho bộ nhớ tối
thiểu. VM là dựa trên register-based, và chạy các lớp đã được biên dịch bởi một
trình biên dịch Java để chuyển đổi thành các định dạng dex. Các VM Dalvik dựa
vào nhân Linux cho các hức năng cơ bản như luồng và quản lý bộ nhớ thấp.
Tầng này có 2 thành phần là phần Libraríe và Android Runtime:
a. Phần Libraries: phần này có nhiều thư viện được viết bằng C/C++

để các phần mềm có thể sử dụng, các thư viện đó được tập hợp
thành một số nhóm như :
-

Thư viện hệ thống (System C library) : thư viện dựa trên
chuẩn C, được sử dụng chỉ bởi hệ điều hành.

-

Thư viện Media (Media Libraries) : Có nhiều codec để hỗ
trợ việc phát và ghi các loại định dạng âm thanh, hình ảnh,
video thông dụng.

-

Thư viện web (LibWebCore) : Đây là thành phần để xem
nội dung trên web, được sử dụng để xây dựng phần mềm
duyệt web (Android Browse) cũng như để các ứng dụng
khác có thể nhúng vào. Nó cực kỳ mạnh, hỗ trợ được nhiều

công nghệ mạnh mẽ như HTML5, JavaScript, CSS, DOM,
AJAX..

-

Thư viện SQLite : Hệ cơ sở dữ liệu để các ứng dụng có thể
sử dụng.

-

.....

b. Phần Android runtime: phần này chứa các thư viện mà một chương

trình viết bằng ngôn ngữ Java có thể hoạt động. Phần này có 2 bộ
phận tương tự như mô hình chạy Java trên máy tính thường. Thứ
nhất là các thư viện lõi (Core Library) , chứa các lớp như JAVA IO,
Collections, File Access. Thứ hai là một máy ảo java (Dalvik
Virtual Machine). Tại đây các ứng dụng viết bằng Java được chạy
trên máy ảo Dalvik thay thế cho máy ảo Java VM của Sun.

14


3.3. Tầng Application Framework
Bằng cách cung cấp một nền tảng phát triển mở, Android cung cấp cho
các nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng
tạo. Nhà phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm
truy cập, các dịch vụ chạy nền, thiết lập hệ thống báo động, thêm các thông báo
để các thanh trạng thái, và nhiều, nhiều hơn nữa.

Nhà phát triển có thể truy cập vào các API cùng một khuôn khổ được sử
dụng bởi các ứng dụng lõi. Các 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; bất kỳ ứng dụng có thể xuất bản khả năng của
mình và ứng dụng nào khác sau đó có thể sử dụng những khả năng (có thể hạn
chế bảo mật được thực thi bởi khuôn khổ). Cơ chế này cho phép các thành phần
tương tự sẽ được thay thế bởi người sử dụng.
Giới thiệu một số thành phần của tầng này :
-

Activity Manager : Quản lý các chu kỳ sống của một ứng
dụng cũng như cung cấp công cụ điều khiển các Activity.

-

Telephony Manager : Cung cấp công cụ để thực hiện việc
liên lạc như gọi điện thoại

-

XMPP Service : Cung cấp công cụ để liên lạc trong thời
gian thực

-

Location Manager : Cho phép xác định vị trí của điện thoại
thoại dựa vào hệ thống định vị toàn cầu GPS và Google
Maps.

-


Window Manager : Quản lý việc xây dựng và hiển thị các
giao diện người dùng cũng như tổ chức quản lý các giao
diện giữa các ứng dụng.

-

Notification Manager : Quản lý việc hiển thị các thông báo
(như báo có tin nhắn, có e-mail mới..)

-

Resource Manager : Quản lý tài nguyên tĩnh của các ứng
dụng bao gồm các file hình ảnh, âm thanh, layout, string.
(Những thành phần không được viết bởi ngôn ngữ lập trình).

15


-

Một tập hợp rất nhiều các View có khả năng kế thừa lẫn
nhau dùng để thiết kế phần giao diện ứng dụng như:
gridview, tableview, linearlayout,…

-

Một “Content Provider” cho phép các ứng dụng có thể truy
xuất dữ liệu từ các ứng dụng khác (chẳng hạn như Contacts)
hoặc là chia sẻ dữ liệu giữa các ứng dụng đó.


3.4. Tầng ứng dụng(application)
Đây là lớp ứng dụng giao tiếp với người dùng, bao gồm các ứng dụng
như:
-

Các ứng dụng cơ bản, được cài đặt đi liền với hệ điều hành là gọi
điện(phone), quản lý danh bạ(Contacts), duyệt web (Browser),
nhắn tin (SMS), lịch làm việc (Calendar), đọc e-mail (EmailClient), bản đồ (Map), quay phim chụp ảnh (camera)...

-

Các ứng dụng được cài thêm như các phần mềm chứng khoán
(Stock), các trò chơi (Game), từ điển...

Các ứng dụng có các đặc điểm là:
-

Viết bằng Java, phần mở rộng là apk

-

Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual Machine
được dựng lên để phục vụ cho nó. Nó có thể là một Active Program
: Chương trình có giao diện với người sử dụng hoặc là một
background : chương trình chạy nền hay là dịch vụ.

-

Android là hệ điều hành đa nhiệm, điều đó có nghĩa là trong cùng
một thời điểm, có thể có nhiều chương trình cùng chạy một lúc, tuy

nhiên, với mỗi ứng dụng thì có duy nhất một thực thể (instance)
được phép chạy mà thôi. Điều đó có tác dụng hạn chế sự lạm dụng
tài nguyên, giúp hệ thống hoạt động tốt hơn.

-

Các ứng dụng được gán số ID của người sử dụng nhằn phân định
quyền hạn khi sử dụng tài nguyên, cấu hình phần cứng và hệ thống.

-

Android là một hệ điều hành có tính mở, khác với nhiều hệ điều
hành di động khác, android cho phép một ứng dụng của bên thứ ba

16


được phép chạy nền. Các ứng dụng đó chỉ có một hạn chế nhỏ đó
là nó không được phép sử dung quá 5~10% công suất CPU, điều đó
nhằn để tránh độc quyền trong việc sử dụng CPU.
-

Ứng dụng không có điểm vào cố định, không có phương thức main
để bắt đầu.

Với kiến trúc như trên và được kế thừa các tính năng sẵn có của Linux
như: mã nguồn mở, tính di động, bảo mật, tính năng đa dạng và thư viện gốc lấy
từ cộng đồng mã nguồn mở Android đã khẳng định được vị thế của nó trong thị
trường cung cấp nền tảng của các thiết bị di động. Minh chứng cho điều này là
tính đến tháng 10 năm 2011 đã có hơn 400.000 ứng dụng có sẵn cho Android. Và

Android đã được liệt kê là nền tảng của điện thoại thông minh bán chạy nhất thế
giới trong quý 4 năm 2010.

CHƯƠNG 2
CƠ SỞ LÝ THUYẾT LẬP TRÌNH ỨNG DỤNG ANDROID
1. Các thành phần trong Android Project
Khi viết một ứng dụng Android dù đơn giản hay phức tạp thì Eclipse luôn
tạo cho ta một khuôn mẫu được xác định trước bao gồm các thành phần: tệp
nguồn .java, tệp R.java, các tệp tin XML như main.xml, string.xml… và thành
phần AndroidManifest.xml.
Để

tạo

một Android

Project

File→New→Android Project với:

17

trong

giao

diện

Eclipse


chọn


-

Tên project: là tên xây dựng từ Eclipse, nên là một từ, mỗi từ viết hoa chữ
cái đầu và không có khoảng trắng giữa các từ chẳng hạn như HelloWorld.

-

Build Target: lựa chọn phiên bản Android để xây dựng ứng dụng.

-

Tên của ứng dụng: là tên của ứng dụng cần tạo. Nó được viết tùy ý và có
thể gồm cả dấu “,” chẳng hạn: Hello,World !!!.

-

Tên gói được xây dựng theo Java và phải có ít nhất một dấu “.” Chẳng hạn
như: com.example.calculator.

1.1. Thành phần Manifest File
Thực chất là file .XML được sinh ra khi một Android Project tạo ra. Tệp
tin này liên kết mọi thành phần trong ứng dụng với nhau. Nó xác định cấu hình,
định nghĩa quyền truy cập cũng như các chủ đề cho ứng dụng. Đồng thời nó cũng
chứa thông tin về phiên bản SDK cũng như main activity sẽ chạy đầu tiên.
Trong file Manifest bao giờ cũng có 3 thành phần chính đó là: application,
permission và version.
Dưới đây là nội dung của một file AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=" />package="com.marakana"
android:versionCode="1" android:versionName="1.0">
android:icon="@drawable/icon" android:label="@string/app_name">

android:name=".HelloWorld"

android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="8" />

18


</manifest>
Thẻ <application>, bên trong thẻ này chứa các thuộc tính được định nghĩa
cho ứng dụng Android như:
-

android:icon = “drawable resource”  Ở đây đặt đường dẫn đến
file icon của ứng dụng khi cài đặt. VD: android:icon =
“@drawable/icon”.


-

android:name = “string”  thuộc tính này để đặt tên cho ứng
dụng Android. Tên này sẽ được hiển thị lên màn hình sau khi cài
đặt ứng dụng.

-

android:theme = “drawable theme”  thuộc tính này để đặt theme
cho ứng dụng. Các theme là các cách để hiển thị giao diện ứng
dụng.

-

Ngoài ra còn nhiều thuộc tính khác…

Thẻ Bao gồm các thuộc tính chỉ định quyền truy xuất và sử
dụng tài nguyên của ứng dụng. Khi cần sử dụng một loại tài nguyên nào đó thì
trong file manifest của ứng dụng cần phải khai báo các quyền truy xuất như sau:
android.permission.CALL_EMERGENCY_NUMBERS
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWER
Thẻ <uses-sdk/> xác định phiên bản SDK đang sử dụng và được khai báo
như sau: <uses-sdk android:minSdkVersion="15" />
1.2. Thành phần Layout XML Code
Tệp tin trong thư mục res/layout xác định việc bố trí ứng dụng trên màn
hình. Tệp tin mặc định được sinh ra trong thư mục này là main.xml. Có thể tùy
chỉnh tệp tin này bằng hai cách: một là sử dụng giao diện kéo thả Graphicslayout,
hai là sử dụng code XML như dưới đây

<?xml version="1.0" encoding="utf-8"?>
xmlns:android=" />
19


android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
1.3. Thành phần String
Đây là tệp tin .xml nằm trong thư mục res/values. Tệp tin này chứa tất cả
các văn bản mà ứng dụng cần hiển thị lên màn hình. Ví dụ tên của các nút, nhãn,
văn bản mặc định, và các định dạng tương tự của chuỗi sử dụng trong file này.
Đây là cách tốt nhất để tách mối liên quan về chuỗi hiển thị giữa các tệp tin khác
nhau ngay cả khi chúng là những tệp XML. Như vậy Layout XML chịu trách
nhiệm bố trí các công cụ, còn strings XML chịu trách nhiệm về nội dung văn bản
của chúng.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, HelloWorld!</string>
<string name="app_name">Hello, World!!!</string>
</resources>
1.4. Thành phần R.java
File R.java là một file tự động sinh ra ngay khi tạo ứng dụng, file này
được sử dụng để quản lý các thuộc tính được khai báo trong file XML của ứng
dụng và các tài nguyên hình ảnh.
Mã nguồn của file R.java được tự động sinh khi có bất kì một sự kiện nào

xảy xa làm thay đổi các thuộc tính trong ứng dụng. Chẳng hạn như, kéo và thả
một file hình ảnh từ bên ngoài vào project thì ngay lập tức thuộc tính đường dẫn
đến file đó cũng sẽ được hình thành trong file R.java hoặc xoá một file hình ảnh
thì đường dẫn tương ứng đến hình ảnh đó cũng tự động bị xoá.
Có thể nói lớp R.java là mối liên kết giữa ngôn ngữ Java với kho tài
nguyên của nó. Nó được tự động tạo ra và không thể sửa được nó theo cách thủ

20


công được. Trong R.java các tài nguyên được đánh chỉ số và như vậy nó là cách
nhanh nhất để tham chiếu đến các tài nguyên trong project.
1.5. Thành phần Java Source Code
Mã Java điều khiển mọi thứ. Đây là mã cuối cùng được đổi thành mã
Dalvik, thực thi và chạy ứng dụng. Một mã nguồn Hello.java đơn giản như sau:
package com.marakana;
import android.app.Activity;
import android.os.Bundle;
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}

2. Các khối chính cấu thành nên ứng dụng của Android
Các khối chính cần được xây dựng ở đây là các thành phần được sử dụng
để phát triển cũng như xây dựng các ứng dụng. Chúng được đặt cùng với nhau để

tạo thành một tổng thể lớn hơn. Nó là các gợi ý cho việc thiết kế một ứng dụng
về màn hình, các tính năng và sự tương tác giữa chúng.
2.1. Activity
Là một trong bốn thành phần chính của ứng dụng. Hiểu theo cách đơn
giản thì Activity là nền của một ứng dụng. Khi khởi động một ứng dụng Android
nào đó thì bao giờ cũng có một main Activity được gọi, hiển thị màn hình giao
diện của ứng dụng cho phép người dùng tương tác. Như vậy Activity là phần dễ
nhận thấy nhất trong ứng dụng.

21


Có thể nói Actitvity là thành phần quan trọng nhất và đóng vai trò chính
trong xây dựng ứng dụng Android. Hệ điều hành Android quản lý Activity theo
dạng stack: khi một Activity mới được khởi tạo, nó sẽ được xếp lên đầu của stack
và trở thành running activity, các Activity trước đó sẽ bị tạm dừng và chỉ hoạt
động trở lại khi Activity mới được giải phóng.
Chu kỳ sống của một Activity(Activity Life Cycle) bao gồm 5 state được
quản lý bởi Activity Manager. Nó có trách nhiệm tạo, phá hủy, giám sát các
activity. Dưới đây mô hình của một Activity Life Cycle.

Starting state: khi một hoạt động không tồn tại trong bộ nhớ thì lúc đó nó
ở trong trạng thái bắt đầu (starting state). Trong khi bắt đầu nó lướt qua toàn bộ
các phương thức sẽ được gọi trong nó. Cuối cùng, các hoạt động sẽ ở trạng thái
đang chạy(running state). Quá trình chuyển từ trạng thái starting state sang
running state là một trong những tiến trình tốn kém về thời gian để thực thi nhất,
điều này làm ảnh hưởng đến tuổi thọ pin của thiết bị. Đó là lý do tại sao không
phá hủy ngay các hoạt động không còn được hiển thị vì người dùng có thể còn
muốn quay trở lại hoạt động đó. Và hoạt động đó khi không hiển thị nữa thì nó
được giữ trong một khoảng thời gian nhất định nào đó.

Running state: hoạt động được được gọi là trong trạng thái này nếu hoạt
động đó đang được hiển thị và tương tác với người dùng trên màn hình. Các

22


tương tác với người dùng như đánh máy, chạm vào màn hình hay nhấn các nút
đều được hiển thị trên màn hình để xử lý. Như vậy chỉ có một hoạt động đang
chạy tại một thời điểm nhất định.
Các hoạt động đang chạy được ưu tiên, nhận tài nguyên và bộ nhớ cần
thiết để thực thi càng nhanh càng tốt. Điều này đảm bảo cho các activity hoạt
động một cách năng suất và ổn định đáp ứng yêu cầu của người sử dụng.
Paused state: khi một activity không tương tác với người sử dụng nhưng
vẫn còn thấy được trên màn hình, lúc đó hoạt động này đang ở trạng thái tạm
dừng(pause state). Trạng thái dừng vẫn được ưu tiên cao về tài nguyên và bộ nhớ
sử dụng. Bởi vì chúng vẫn được nhìn thấy và không thể di chuyển khỏi màn
hình.
Stopped state: khi một hoạt động không được nhìn thấy nhưng vẫn còn
trong bộ nhớ, activity đó được gọi là trong trạng thái dừng (stopped state). Và
một activity trong trạng thái này có thể được đưa trở lại màn hình thành một hoạt
động đang chạy(running state). Nó có thể bị phá hủy hoặc gỡ bỏ khỏi bộ nhớ sử
dụng.
Hệ thống giữ các hoạt động trong trạng thái stopped bởi vì có khả năng
người dùng vẫn muốn chạy lại các hoạt động đó. Thứ hai nữa là việc khởi động
lại một hoạt động nhanh hơn và tiết kiệm về bộ nhớ và thời gian hơn so với việc
bắt đầu hoạt động lại từ đầu. Các hoạt động ở trạng thái này có thể bị gỡ bỏ bất
cứ lúc nào.
Destroyed state: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến
trình theo nguyên tắc ưu tiên. Một hoạt động trong trạng thái bị phá hủy là nó
không còn trong bộ nhớ nữa. Trình Activity Manager quyết định gỡ bỏ nó khi nó

không còn cần thiết nữa. Trước khi một hoạt động bị phá hủy nó phải lưu lại các
thông tin chưa được lưu. Tuy nhiên không có gì đảm bảo rằng một hoạt động sẽ
dừng lại trước khi nó bị phá hủy. Vì vậy nên lưu lại các dữ liệu trên nó nếu dữ
liệu đó chưa được lưu. Các Activity ở trạng thái stop hoặc paused cũng có thể bị
giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại
hoàn toàn và phục hồi lại trạng thái trước đó.

23


Vòng đời của Activity:
-

Entire lifetime: Từ phương thức onCreate( ) cho tới onDestroy( )

-

Visible liftetime: Từ phương thức onStart( ) cho tới onStop( )

-

Foreground lifetime: Từ phương thức onResume( ) cho tới
onPause( )

Khi xây dựng Actitvity cho ứng dụng cần phải viết lại phương thức
onCreate( ) để thực hiện quá trình khởi tạo. Các phương thức khác có cần viết lại
hay không tùy vào yêu cầu lập trình.
2.2. Intents
Là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện của một
Activity.

Là cầu nối giữa các Activity : ứng dụng Android thường bao gồm nhiều
Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công việc
khác nhau.
Intent chính là người đưa thư, giúp chúng ta triệu gọi cũng như truyền các
dữ liệu cần thiết để thực hiện một Activity từ một Activity khác. Điều này cũng
giống như việc di chuyển qua lại giữa các Forms trong lập trình Windows Form

Trong hình vẽ trên Activity B chỉ trả về kết quả khi cần thiết. VD : giả sử
Activity A nhắc người dùng chọn ảnh profile ; Activity B liệt kê các ảnh trong
sdcard và cho phép người dùng chọn ảnh. Khi đó cặp “code+result” là cần thiết
và có thể là “0:null” tức chọn hủy hoặc “1:ảnh 20” tức chọn ảnh 20.
2.2.1 Dữ liệu trong Intents

24


Intents về cơ bản là một cấu trúc dữ liệu, được mô tả trong lớp
android.content.Intent.
Các thuộc tính của một đối tượng Intent :

Các action định nghĩa sẵn :

Trên đây là những hằng String đã được định nghĩa sẵn trong lớp Intent.
Đi kèm với nó là các Activity hay Application được xây dựng sẵn sẽ được triệu
gọi mỗi khi Intent tương ứng được gửi (tất nhiên khi được cung cấp đúng data).

25



×