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

ĐIỆN TOÁN DI ĐỘNG VÀ NỀN TẢNG LẬP TRÌ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 (617.84 KB, 51 trang )

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

.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................


.............................................................................................................................................................................................
.............................................................................................................................................................................................
.............................................................................................................................................................................................
............

Ngày ...... Tháng ....... Năm .......
Giảng Viên Hướng Dẫn

(Ký và ghi rõ họ tên)

1


LỜI CẢM ƠN
Em xin chân thành cảm ơn các thầy cô trong bộ môn Mạng và truyền thông cùng
toàn thể các thầy cô trường Đại Học Công Nghệ Thông Tin và Truyền Thông –
Đại học Thái Nguyên đã truyền đạt cho chúng em những kiến thức quý giá trong
thời gian qua.
Em xin chân thành cảm ơn Thầy Nguyễn Anh Chuyên đã tận tình hướng dẫn, chỉ
bảo em trong suốt quá trình thực hiện đề tài.
Cuối cùng tôi xin cảm ơn các bạn trong khoa Công Nghệ Thông Tin, những
người đã giúp đỡ, chia sẽ kiến thức, tài liệu ... trong suốt quá trình thực hiện
nghiên cứu đề tài.
Trong phạm vi khả năng cho phép, em đã rất cố gắng để hoàn thành đề tài một
cách tốt nhất. Song, chắc chắn sẽ không tránh khỏi những thiếu sót. Em kính
mong nhận được sự cảm thông và những ý kiến đóng góp của quý thầy cô và các
bạn.

Nhóm sinh viên thực hiện
Phạm Xuân Quân.

Thái nguyên, tháng 6 năm 2012

2


MỤC LỤC

3


MỞ ĐẦU
Hiện nay ngành công nghiệp phần mềm đang rất phát triển và ngành công nghiệp
phần mềm trên điện thoại di động cũng không nằm ngoài xu thế đó. Tuy còn
nhiều hạn chế trong phần cứng của điện thoại di động nhưng nó đã thể hiện được
sức mạnh của mình trong rất nhiều các lĩnh vực khác nhau như giải trí, các tiện
ích, thanh toán điện tử .v.v..
Các hệ điều hành như Window Mobile, Symbian… phần nào cũng gây ít nhiều
khó khăn cho những ai có ý định xây dựng các ứng dụng trên nó. Đối với
Window Mobile là một công nghệ của Microsoft và hoàn toàn đóng đối với
người dùng, nhà phát triển ứng dụng chỉ dựa hoàn toàn vào công nghệ mà
Microsoft cung cấp, còn Symbian thì việc cấu hình để có thể lập trình trên nó
cũng vô vàn khó khăn, đặc biệt là nó sử dụng ngôn ngữ C/C++ để làm nền tảng
lập trình rõ ràng là không thuận tiện trong việc phát triển ứng dụng.
Xuất phát từ nhu cầu thực tế đó, Google đã mạnh dạn nghiên cứu và đưa ra một
nền tảng hệ điều hành mới, đó chính là Android. Một nền tảng hệ điều hành mã
nguồn mở hoàn toàn và dựa vào một ngôn ngữ lập trình rất mạnh là Java để phát
triển ứng dụng. Chính vì Android hỗ trợ Java ngay từ trong nền tảng của nó, nên
việc viết ứng dụng, ngay cả sử dụng các chức năng của phần cứng là hoàn toàn
dễ dàng thông qua việc sử dụng bộ công cụ hỗ trợ lập trình được cung cấp hoàn
toàn miễn phí, là Android SDK.

Nhận thấy nhu cầu của con người trong lĩnh vực giải trí trên di động ngày càng
cao và Android chính là nền tảng ứng dụng có thể phát triển trong tương lai.
Chính vì vậy em chọn đề tài “Tìm hiểu lập trình Android và xây dựng ứng dụng
quản lý Contacts Demo” nhằm hiểu rõ về các kĩ thuật lập trình trên thiết bị động
Android.

4


CHƯƠNG 1 : TỔNG QUAN VỀ ĐIỆN TOÁN DI ĐỘNG VÀ NỀN
TẢNG LẬP TRÌNH ANDROID
Tổng quan về điện toán di động
Theo một báo cáo của hãng Morgan Stanley, đến năm 2015 việc sử dụng và truy
cập Internet di động sẽ lớn hơn rất nhiều so với sử dụng Internet trên máy tính
PC.( Morgan Stanley là một ngân hàng đầu tư, công ty chứng khoán có trụ sở
chính tại Hoa Kỳ. Đây là một trong những thể chế tài chính lớn nhất của thể
giới.)
Theo báo cáo của Công ty IDC, tại Việt Nam, tổng doanh thu bán hàng của máy
tính để bàn quý III-2011 tăng 5%, máy tính xách tay nhỏ gọn tăng 83% so với
cùng kỳ năm trước. Xu thế hiện nay là sử dụng nhiều thiết bị di động như các
dòng điện thoại thông minh, máy tính bảng tablet dựa trên nền tảng web, hệ
thống GPS, game video và thiết bị ứng dụng không dây trong gia đình…
Với sự phát triển và cải tiến liên tục thiết bị di động, chúng ta có căn cứ để tin
rằng, trong tương lai gần, máy tính truyền thống PC sẽ bị mất ưu thế so với thiết
bị cá nhân di động nhỏ gọn, tiện ích và tích hợp đầy đủ chức năng của một chiếc
máy tính. Chúng ta hoàn toàn có thể nhận định: “Điện toán di động đang là xu
thế của thời đại”.
Điện toán di động
Điện toán di động là gì ?


Nói một cách tổng quan thì điện toán di động là việc sử dụng những thiết bị
cầm tay nhỏ gọn để phục vụ những mục đích của con người như làm việc,
vui chơi,giải trí,học tập ..v.v. Đó là việc sử dụng ngày càng nhiều thiết bị di
động như các dòng điện thoại thông minh, máy tính bảng tablet dựa trên
nền tảng web, hệ thống GPS, game video và thiết bị ứng dụng không dây
trong mọi sinh hoạt của con người.
Điện toán di động đang phát triển như thế nào ?

5


Sự phát triển bùng nổ các giải pháp công nghệ dành cho thiết bị di động
cũng là một trong những nhân tố góp phần tạo ra các thiết bị cầm tay nhỏ
gọn, đáp ứng mọi nhu cầu tiêu dùng thông tin và ứng dụng của người sử
dụng.
Những người kinh doanh, những người quản lý, những người tiêu dùng
bình thường hay cả những người lớn tuổi. Chúng ta đều trở lên di động và
khao khát được di động nhiều hơn. Di chuyển khắp thế giới để kinh doanh,
hội họp với các đối tác hoặc một môi trường làm việc “di động” đã gần như
trở thành một điều rất bình thường trong cuộc sống. Chúng ta có thể làm
việc mà không cần rời khỏi nhà, hoặc làm việc trong khi vẫn còn đang ngồi
nhâm nhi tách cà phê trong một quán cà phê. Những kỳ nghỉ đơn thuần chỉ
là di chuyển từ nước này sang nước khác.
Điện toán di động phát triển một cách mạnh mẽ một phần lớn dựa trên nền
tảng công nghệ của internet, công nghệ mạng di động 2G, 3G và 4G và đặc
biệt là công nghệ điện toán đám mây. Người sử dụng, sử dụng những thiết
bị cầm tay (máy tính sách tay, tablet, smartphone…) để kết nối vào internet
chia sẻ và cập nhật thông tin. Sự phát triển mạnh mẽ của điện toán di động
được thể hiện rõ ở những con số sau: Tính đến hết quý 1/2012 doanh số
bán dòng điện thoại thông minh (smartphone) tăng lên đáng kể, đạt 144,4

triệu chiếc, tăng 44,7% so với quý 1/2011 và máy tính xách tay nhỏ gọn tăng
83% so với cùng kỳ năm trước. Trong năm 2012, theo IDC dự đoán doanh số

bán máy tính bảng đạt khoảng 53,5 triệu máy.
Tiềm năng phát triển của lập trình di động
Với sự phát triển như vũ báo của điện toán di động trong thời kì hiện nay, đã kéo
theo sự phát triển mạnh mẽ của ngành công nghiệp phần mềm ứng dụng cho thiết
bị di động. Trước thực tế đó, rất nhiều công ty, tổ chức đã xây dựng và phát triển
các kho ứng dụng của họ cho thiết bị di động.

6


Tháng 7/2008, Apple ra mắt kho ứng dụng di động trực tuyến đầu tiên
với 500 ứng dụng cho các sản phẩm iPhone, iPod. Khi đó, thị trường ứng dụng
mobile hầu như chưa hề tồn tại. Đến nay, App Store đã có hơn 400,000 ứng dụng
với 10 tỷ lượt tải về, dẫn đầu ngành về dịch vụ ứng dụng cho di động. Sau thành
công của Apple, các hãng di động nhận thấy tiềm năng của thị trường Mobile
Apps đã liên tiếp cho ra mắt kho ứng dụng của mình. Tiêu biểu là Ovi Store của
Nokia (55,000 ứng dụng, 760 triệu download), Android Market của Google
(200,000 ứng dụng,4,5 tỉ download), App World của Blackberry (30,000 ứng
dụng, 3 triệu download/ngày), và mới đây là Huawei Technology - dành cho các
nhà mạng di động trên toàn cầu với hơn 80.000 ứng dụng di động/nhạc, phim, ebook cho HĐH Android, Symbian và Windows Mobile... Góp vào tổng doanh
thu hàng năm ngành lên tới 7 tỷ USD, dự báo sẽ đạt 30 tỷ USD trong 3 năm tới.
Tại Việt Nam, một số doanh nghiệp đã xây dựng kho ứng dụng di động riêng như
F-Store của FPT, mStore của Tổng công ty Viễn thông Quân đội Viettel, LG
Application Mobile của LG hay Nokia Ovi với phiên bản dành cho thị trường
Việt Nam. VTC Mobile, một trong các đơn vị dẫn đầu thị phần dịch vụ giá trị gia
tăng trên di động giai đoạn 2006-2010 tại Việt nam cũng đã hợp tác với Q-mobile
để xây dựng Q-Store, cung cấp các ứng dụng do Việt Nam xây dựng tới hàng

triệu người sử dụng Q Mobile. Việt Nam hiện có tới 50 triệu thuê bao di động
hoạt động thường xuyên và nền tảng 3G đã được các nhà mạng triển khai rộng
khắp với 69% người sử dụng ở độ tuổi trung bình 15 – 24 tạo nên một thị trường
có tốc độ phát triển nhanh chóng và mạnh mẽ.
Như vậy, lập trình di động hiện đang có tiềm năng rất lớn, đây ngành, lĩnh vực
cực kì sôi động và phát triền trong thời đại hiên nay.
Nền tảng Android
1.2.1 Lược sử về Android
Android được phát hành phiên bản đầu tiên 11/11/2007, là một môi trường hệ
điều hành hoàn chỉnh dựa trên hệ điều hành nhân Linux V2.6. Lúc đầu, đích triển
khai đối với Android là lĩnh vực điện thoại di động, gồm các loại điện thoại

7


thông minh và các loại thiết bị điện thoại kiểu gập chi phí thấp. Tuy nhiên, phạm
vi đầy đủ các dịch vụ điện toán của Android và sự hỗ trợ chức năng phong phú
của nó có tiềm năng mở rộng ra ngoài thị trường điện thoại di động. Android còn
có thể hữu ích đối với các nền tảng và ứng dụng khác.
Nền Android là sản phẩm của Open Handset Alliance (Liên minh thiết bị cầm tay
mở), một tập đoàn các tổ chức cùng hợp tác với nhau để xây dựng nên một loại
điện thoại di động tốt hơn. Tập đoàn do Google đứng đầu này gồm các nhà vận
hành (điện thoại) di động, các nhà sản xuất thiết bị cầm tay, sản xuất linh kiện,
các nhà cung cấp nền và giải pháp phần mềm và các công ty tiếp thị. Từ một
quan điểm phát triển phần mềm, Android trở thành trung tâm của thế giới mã
nguồn mở và rất có tiềm năng phát triển.
Thiết bị cầm tay có khả năng Android đầu tiên trên thị trường là thiết bị G1 do
HTC sản xuất và được bán trên T-Mobile. Nó trở nên sẵn có sau gần một năm
đồn đại, khi mà các công cụ phát triển phần mềm sẵn có duy nhất chỉ là một số
bản phát hành Bộ công cụ phát triển phần mềm (SDK) được cải tiến dần từng

bước. Khi ngày phát hành G1 gần đến, nhóm Android đã phát hành SDK V1.0 và
các ứng dụng bắt đầu vượt lên nhằm hướng tới nền tảng mới này.
Để kích thích đổi mới và phát triển các ứng dụng của Android, Google đã tài trợ
hai vòng cuộc thi “Các thách thức nhà phát triển Android”, và hàng triệu đô la đã
được đổ vào các ứng dụng dự thi hàng đầu. Vài tháng sau G1, Android Market
được phát hành, cho phép người sử dụng duyệt và tải về các ứng dụng trực tiếp
vào điện thoại của họ. Trong vòng 18 tháng, một nền di động mới đã chính thức
có mặt trên thị trường và sẽ là đối thủ cạnh tranh nặng ký của các nền di động
phổ biến trước đó như Symbian hay Window Mobile.
Android cung cấp khá đầy đủ các công cụ cơ bản và được thiết kế sao cho các
nhà phát triển có thể tận dụng tối đa lợi thế của thiết bị cầm tay để xây dựng nên
các ứng dụng thực sự thuyết phục. Họ có thể tạo một ứng dụng có thể gọi thực
hiện các chức năng lõi trong điện thoại như thực hiện cuộc gọi, gửi tin nhắn
SMS, dùng camera … Hay chia sẻ thông tin cá nhân lên trang web chẳn hạn như
thông tin liên lạc, vị trí địa lí, lịch biểu… Các nhà phát triển còn có thể làm bất

8


cứ việc gì trên thiết bị Android bởi vì hệ thống Android giao tiếp thông qua các
Intents – nó đơn giản là một chuỗi mô tả một hành động nào đó – ví dụ:
“android.provider.Telephony.SMS_RECEIVED”. Android còn cung cấp sẵn các
dịch vụ định vị (và đây là một thế mạnh của Google) cùng với một tập các ứng
dụng về “Map” với các tính năng rất ấn tượng như dò đường, tính khoảng cách
địa điểm, tìm bạn… Ngoài ra còn có một số tính năng nổi bật khác như

Animation và đồng thời cũng hỗ trợ media-playback.
Sự phát triển của hệ điều hành Android nổi bật qua các phiên bản chính
dành cho điện thoại di động (Android 2.3), dành cho tablet (Android 3.0)
… Phiên bản mới nhất hiện nay là Android 4.0.x (Ice Cream Sandwich) là

phiên bản dành cho cả smatphone và tablet.
1.2.2 Kiến trúc nền tảng Android
Với khả năng rộng rãi của Android, sẽ rất dễ dàng nhầm lẫn nó với một hệ điều
hành máy tính để bàn. Android là một môi trường phân tầng, xây dựng trên nền
của hệ điều hành nhân Linux, và nó bao hàm nhiều chức năng phong phú. Hệ
thống giao diện người sử dụng gồm có:
Cửa sổ
Khung hình
Các tiểu trình để hiển thị các phần tử phổ biến như các hộp biên soạn, danh sách,
danh sách thả xuống.
Android gồm một trình duyệt có thể nhúng vào được, được xây dựng dựa trên
WebKit, chính là máy (engine) trình duyệt mã nguồn mở cũng đang là động cơ
của trình duyệt Safari của iPhone.
Android khoe ra một mảng dồi dào nhiều tùy chọn kết nối, gồm WiFi, Bluetooth
và dữ liệu không dây qua một kết nối di động (như GPRS, EDGE và 3G).Một kỹ
thuật phổ biến trong các ứng dụng Android là liên kết tới Google Maps để hiển
thị một địa chỉ trực tiếp trong một ứng dụng. Việc hỗ trợ cho các dịch vụ dựa trên
địa điểm (chẳng hạn như GPS) và các dụng cụ đo gia tốc cũng có sẵn trong gói

9


phần mềm Android, mặc dù không phải tất cả các thiết bị Android được trang bị
với các phần cứng cần thiết. Ngoài ra còn có cả hỗ trợ máy ảnh nữa (camera).
Về mặt lịch sử, có hai lĩnh vực mà các ứng dụng di động đã gắng sức theo kịp
các đối tác máy tính để bàn là đồ họa/đa phương tiện và phương thức lưu trữ dữ
liệu. Android giải quyết thách thức về đồ họa bằng sự hỗ trợ dựng sẵn cho đồ họa
2D và 3D, gồm cả thư viện OpenGL. Gánh nặng lưu trữ dữ liệu được giảm nhẹ
vì nền Android có gồm cả cơ sở dữ liệu SQLite mã nguồn mở phổ biến. Hình 1
cho thấy một khung hình đơn giản hóa về các tầng phần mềm Android.


Hình 1 – Cấu trúc Android

Tầng kernel Linux
Nhân của Android được phát triển dựa vào Kernel Linux 2.6. Theo đó, nó
cung cấp các trình điều khiển các thiết bị phần cứng (driver), quản lý tiến
trình, quản lý tài nguyên, bảo mật … như sau:
Security system
Memory management
Process mamagement
10


Network stack
Driver model
Tầng Libraries và Android runtime
Libraries (thư viện).
Android bao gồm một bộ thư viện C/C++, được sử dụng bởi các thành
phần khác nhau của hệ thống Android. Những khả năng tiếp xúc với các
nhà phát triển thông qua các khuôn khổ ứng dụng Android. Dưới đây là
một số các thư viện lõi của Android:
System C library - một BSD-có nguồn gốc thực hiện các hệ thống thư viện
chuẩn C (LIBC), điều chỉnh cho nhúng dựa trên Linux các thiết bị.
Media Libraries - dựa trên OpenCORE PacketVideo's; sự hỗ trợ các thư
viện phát lại và ghi âm của âm thanh và phổ biến nhiều định dạng video,
cũng như các tập tin hình ảnh tĩnh, bao gồm MPEG4, H.264, MP3, AAC,
AMR, JPG, và PNG.
Surface Manager - quản lý quyền truy cập vào hệ thống con hiển thị và
hoàn toàn phù hợp chất 2D và 3D lớp từ nhiều ứng dụng đồ họa.
LibWebCore - một trình duyệt web hiện đại, động cơ có quyền hạn cả hai

trình duyệt web của Android và một xem nhúng.
SGL - các công cụ đồ họa 2D.
OpenGLJES – Thư viện đồ họa 2D và 3D
3D libraries - một việc thực hiện dựa trên OpenGL ES 1,0 API; các thư
viện, hoặc sử dụng phần cứng tăng tốc 3D (nếu có) hoặc bao gồm, cao tối
ưu rasterizer phần mềm 3D.
SQLite - một mạnh mẽ và nhẹ quan hệ cơ sở dữ liệu có sẵn cho tất cả các
ứng dụng.
Android Runtime (Thời gian chạy Android).
Android bao gồm một tập các thư viện lõi mà 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.

11


Mỗi ứng dụng Android chạy trong tiến trình riêng của mình, với trường
hợp riêng của các máy ảo Dalvik. Dalvik đã được viết nên một thiết bị có
thể chạy nhiều máy ảo hiệu quả. VM Dalvik thực hiện tác phẩm trong các
Executable Dalvik (dex). Định dạng được tối ưu hóa cho bộ nhớ tối thiểu.
VM là đăng ký trên, và chạy các lớp học biên soạn bởi một trình biên dịch
ngôn ngữ Java đã được chuyển thành các định dạng dex. Do dx "bao gồm"
công cụ. VM Dalvik dựa vào hạt nhân Linux cho các chức năng tiềm ẩn
như luồng và cấp quản lý bộ nhớ thấp.
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 vô cùng phong phú và
sáng tạo. Các nhà phát triển được miễn phí để tận dụng lợi thế của các thiết
bị phần cứng, thông tin địa điểm truy cập, 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 đến các thanh trạng thái, và nhiều,
nhiều hơn nữa.

Các 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. Kiến trúc ứng dụng được thiết kế để đơn
giản hóa việc tái sử dụng các thành phần. Cơ chế này cũng cho phép các
thành phần được thay thế bởi người sử dụng.
Nằm bên dưới tất cả các ứng dụng là một tập hợp các dịch vụ và hệ thống,
bao gồm:
Một tập phong phú và mở rộng của xem có thể được sử dụng để xây dựng
một ứng dụng, bao gồm các danh sách, lưới, hộp văn bản, các nút, và thậm
chí một trình duyệt web nhúng.
Nhà cung cấp nội dung cho phép các ứng dụng để truy cập dữ liệu từ các
ứng dụng khác (như Contacts), hoặc chia sẻ dữ liệu của riêng mình.
Một quản lý tài nguyên, cung cấp quyền truy cập vào tài nguyên phi mã
như dây bản địa hoá, đồ họa, và bố trí tập tin.

12


Một Notification Manager cho phép tất cả các ứng dụng tùy chỉnh để hiển
thị cảnh báo trong thanh trạng thái.
Một Activity Manager quản lý vòng đời của các ứng dụng và cung cấp một
backstack phổ biến chuyển hướng.
Tầng ứng dụng.
Android sẽ ship với một bộ các ứng dụng lõi bao gồm một ứng dụng email,
lịch chương trình tin nhắn SMS,, bản đồ, trình duyệt, liên lạc, và những
người khác. Tất cả các ứng dụng được viết bằng cách sử dụng ngôn ngữ lập
trình Java.
1.2.3 Các công cụ để tạo một ứng dụng Android
Để bắt đầu phát triển các ứng dụng Android, chúng ta cần có Bộ công cụ phát
triển phần mềm Android (SDK) và môi trường phát triền tích hợp Eclipse
(Eclipse IDE). Việc phát triển Android có thể diễn ra trên Microsoft Window,

Mac OS X hoặc Linux. Trong tiểu luận này, em thực hiện sẽ phát triển ứng dụng
Android bằng Microsoft Window.
Eclipse IDE:
Các ứng dụng Android được viết bằng ngôn ngữ Java, nhưng biên dịch và thi
hành bằng máy ảo Dalvik.Viết mã bằng ngôn ngữ Java trong Eclipse là rất trực
quan. Eclipse cung cấp một môi trường Java phong phú, gồm cả việc trợ giúp
theo ngữ cảnh và các mách nước gợi ý về mã. Khi bộ mã Java được biên dịch
thành công, Android Developer Tools sẽ đảm bảo rằng ứng dụng đó được đóng
gói một cách đúng đắn, gồm cả tập tin AndroidManifest.xml.
Android SDK:
Bộ công cụ phát triển ứng dụng Android SDK là công cụ giả lập thiết bị ảo trên
máy tính để phát triển ứng dụng với các hàm API hỗ trợ cho những lập trình viên
lập trình trên các thiết bị di động sử dụng nền tảng Android thông qua ngôn ngữ
lập trình Java. SDK gồm có:
android.jar : tập tin lưu trữ Java chứa toàn bộ các lớp SDK Android cần thiết để
xây dựng ứng dụng.
13


documention.html và thư mục docs: tài liệu SDK được cung cấp tại chỗ và trên
web, chủ yếu nó ở dạng JavaDocs, tạo điều kiện dễ dàng cho việc hướng dẫn
trong nhiều gói SDK. Tài liệu cũng gồm cả hướng dẫn phát triển mức cao và các
liên kết đến cộng đồng Android rộng rãi.
Thư mục sample (các ví dụ mẫu): thư mục con samples chứa bộ mã nguồn đầy
đủ dùng cho một loạt các ứng dụng, gồm cả ApiDemo, nó sử dụng nhiềuAPI.
Ứng dụng mẫu là một nơi khám phá tuyệt vời khi bắt đầu phát triển ứng dụng
Android.
Thư mục tools (các công cụ): chứa toàn bộ các công cụ dòng lệnh để xây dựng
nên các ứng dụng Android. Công cụ được dùng phổ biến và hữu ích nhất là tiện
ích adb (Android Debug Bridge).

Usb_driver: thư mục chứa các trình điều khiển cần thiết để kết nối môi trường
phát triển với một thiết bị có khả năng chạy Android, chẳng hạn như G1 hay điện
thoại đã được phát triển Android Dev 1. Các tập tin này là đòi hỏi duy nhất đối
với các nhà phát triển đang sử dụng nền Windows.
1.2.4 Xây dựng các thành phần ứng dụng Android

1.2.4.1 Hoạt động(Activity)
Mỗi một Activity đại diện cho một màn hình. Các ứng dụng phức tạp có thể có
nhiều hơn một Activity. Cần tạo một Activity cho mỗi màn hình cần hiển thị. Cụ
thể là ít nhất một màn hình chính điều khiển các chức năng của ứng dụng, các
activity khác nhằm mục đích nhập thông tin, cung cấp các khung nhìn khác nhau
trên dữ liệu hoặc hỗ trợ các chức năng khác.
Hầu hết các Activity được thiết kế để chiếm giữ toàn bộ màn hình, tuy nhiên có
thể tạo các Activity có một nữa độ trong suốt, các Activity nổi, hoặc các dialog.
Tạo một Activity:
Để tạo một Activity mới, cần thừa kế từ lớp Activity, sử dụng các View để cung
cấp các tương tác với người dùng, khai báo các thành phần giao diện và thực thi
các chức năng của ứng dụng.
package com.paad.myapplication;
import android.app.Activity;
14


import android.os.Bundle;
public class MyActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
}

}
Một lớp Activity cơ bản đưa ra một màn hình rỗng chứa cửa sổ hiển thị. Vì vậy
việc cần thực hiện đầu tiên là khai báo bố cục cho nó bằng cách sử dụng các
View và layout.Activity UI được tạo thành bởi các View. View là các điều khiển
giao diện người dùng, hiển thị dữ liệu và cung cấp tương tác đến người dùng.
Để gắn một giao diện cho một Activity, sử dụng phương thức setContentView
trong lớp Activity được kế thừa.
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
MyView myView = new MyView(this);
setContentView(myView);
}
Có 2 cách để thiết lập giao diện cho Activity: bằng code hoặc thông qua file định
nghĩa layout . Ở trên là cách tạo giao diện bằng code, sau đây là cách tạo giao
diện người thông qua layout, truyền tham số vào cho phương thức
setContentView là một resource ID
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
}

15


Để dùng một Activity cần khai báo bên trong file manifest. Thêm vào một thẻ
activity mới bên trong nút application. Thẻ activity này bao gồm các thuộc tính
cho siêu dữ liệu (label, icon,…).
Vòng đời của Activity:


Hình 2 – Vòng đời của Activity
Khởi động một Activity
Để khởi động một Activity, chúng ta dùng Intent:
Khai báo tường minh: cung cấp chính xác thông tin của activity cần gọi (nếu
cùng ứng dụng chỉ cần cung cấp tên class, nếu ứng dụng khác nhau thì cung cấp
tên package, tên class).
Intent intent = new Intent(getApplicationContext(),TargetActivity.class);
startActivity(intent);

16


Khai báo không tường minh: cung cấp thao tác cần làm gì, với loại dữ liệu nào,
thao tác thuộc nhóm nào… hệ thống sẽ tìm activity tương ứng để khởi động.
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivity(intent);
Với cách khởi động activity không tường minh, chúng ta cần phải biết một chút
về Intent-filter. Intent-filter sẽ giúp một activity đăng ký với hệ thống mình có
thể làm được thao tác gì, trong nhóm nào, với loại dữ liệu nào. Như vậy khi
intent và intent-filter khớp nhau, activity sẽ được hệ thống khởi động.
Liên lạc giữa 2 activity:
Có thể khởi động một activity với một yêu cầu nào đó và activity kia khi làm
xong công việc sẽ trả lại kết quả cho activity trước. Ví dụ activity A yêu cầu một
activity làm giúp việc chụp ảnh, activity B đáp ứng được việc này, sau khi user
chụp ảnh xong sẽ trả lại file ảnh cho activity A. Để liên lạc 2 activity chúng ta
làm nhu sau:
Khi khởi động một activity, ta có thể gửi kèm dữ liệu trong intent như ví dụ sau:
intent.putExtra("value1", new String("Hello"));

intent.putExtra(“value2", new Long(100));
Bên phía activity được khởi động, có thể lấy dữ liệu được gửi như sau:
getIntent().getExtras().getString("value1");
getIntent().getExtras().getLong("value2");
Trình thu phát (BroadcastReceiver)
BroadcastReceiver là một trong bốn loại thành phần trong ứng dụng
Android.Chức năng của nó là dùng để nhận các sự kiện mà các ứng dụng hoặc hệ
thống phát đi.
Có 2 cách phát-nhận đó là:
Không có thứ tự: receiver nào đủ điều kiện thì nhận hết, không phân biệt và
chúng tách rời nhau.

17


Có thứ tự: receiver nào đăng ký ưu tiên hơn thì nhận trước, và có thể truyền thêm
thông tin xử lý cho các receiver sau.
Chu kỳ sống
BroadcastReceiver chỉ có duy nhất một phương thức onReceive().
Khi có sự kiện mà BroadcastReceiver đã đăng ký nhận được phát đi, thì phương
thức onReceive() của BroadcastReceiver đó sẽ được gọi.
Sau khi thực thi xong phương thức này, vòng đời của BroadcastReceiver kết
thúc.
Một số broadcast thông dụng
Báo hệ thống khởi động xong.
Báo pin có sự thay đổi.
Báo có package mới cài vào hoặc xóa đi.
Báo tắt máy.
Báo cắm sạc, rút sạc.
Thông báo tin nhắn tới.

Thông báo cắm, rút thẻ nhớ.
Thông báo có cuộc gọi đi.
Broadcast do người phát triển ứng dụng tự định nghĩa (giúp liên lạc hoặc thông
báo một sự kiện giữa các ứng dụng).
Hàm onReceive()
Phương thức này được gọi khi có sự kiện tương ứng được phát đi.Ở trong
phương thức này, ta truyền vào context (ngữ cảnh) và intent (nơi nhận).
context: vì lớp Receiver không kế thừa từ lớp Context nên cần truyền context mà
receiver này đang chạy vào. Thứ nhất là để có thể xử lý các phương thức yêu cầu
truyền thêm Context, thứ hai là để sử dụng các phương thức của lớp Context.
intent: intent được truyền vào sẽ có đầy đủ thông tin như sự kiện nào mà receiver
này đăng ký đã xảy ra dẫn đến onReceive() được gọi,có gửi kèm thông tin gì
hoặc dữ liệu gì hay không. Xem các api:
Intent.getAction();

18


Intent.get…Extra(String dataName);
Dịch vụ (Service)
Service là một trong 4 loại thành phần của một ứng dụng Android. Service chạy
nền và không tương tác trực tiếp với người dùng. Sử dụng Service để:
Dùng trong các ứng dụng nghe nhạc.
Dùng để xử lý các thao tác mất thời gian và không nhất thiết phải hiển thị lên
activity (download, upload…).
Đôi khi cần một ứng dụng vận hành liên tục để xử lý những việc mong muốn mà
không làm phiền người dùng.
Làm những thao tác tính toán, xử lý đều đặn nào đó và kết quả khi nào người
dùng cần thì mới xem.
Tạo ra một Service

Để tạo ra một Service, ta tạo ra một class mới kế thừa lớp Service và override các
phương thức onStart(),onCreate() và onBind().
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {
@Override
public void onStart(Intent intent, int startId) {
// TODO: Actions to perform when service is started.
}
@Override
public void onCreate() {
// TODO: Actions to perform when service is created.
}
@Override

19


public IBinder onBind(Intent intent) {
// TODO: Replace with service binding implementation.
return null;
}
}
Để bắt đầu một Service, sử dụng phương thức startService.Nếu Service
yêu cầu quyền truy cập không tồn tại trong ứng dụng thì một ngoại lệ
SecurityException sẽ được đưa ra. Có 2 cách để bắt đầu một Service mới.
Cách 1: khởi động ngầm. Ví dụ:
startService(new Intent(MyService.MY_ACTION));
Cách 2: khởi động tường minh. Ví dụ:

startService(new Intent(this, MyService.class));
Để dừng một Serivce, sử dùng phương thức stopService, truyền vào Intent
xác định Service cần ngưng hoạt động. Ví dụ:
ComponentName service = startService(new Intent(this, BaseballWatch.class));
// ngừng dịch vụ bằng cách xác định tên dịch vụ
stopService(new Intent(this, service.getClass()));
// ngừng dịch vụ bằng cách tường minh
try {
Class serviceClass = Class.forName(service.getClassName());
stopService(new Intent(this, serviceClass));
} catch (ClassNotFoundException e) {}
Vòng đời của Services
Hình 3 – Vòng đời của service

20


Khi có một context nào đó gọi startService() để khởi động một dịch vụ mong
muốn. Nếu dịch vụ đó chưa được tạo thì sẽ gọi onCreate() rồi gọi tiếp onStart()
và khi đó dịch vụ chạy nền bên dưới.
Nếu sau đó lại có một context muốn khởi độngdịch vụ này mà dịch vụ đã đang
chạy thì chỉ có phương thức onStart() của dịch vụ được gọi.
Dù dịch vụ có được gọi khởi động bao nhiêu lần thì cũng chỉ có thể hiện của dịch
vụ và chỉ cần gọi stopService() một lần để kết thúc dịch vụ.
Kết nối dịch vụ
Khi một Activity được kết nối tới một Service, nó duy trì một tham chiếu
đến một thực thể Service. Để kết nối đến thực thể này, thực thi phương thức
onBind như sau:
private final IBinder binder = new MyBinder();
@Override

public IBinder onBind(Intent intent) {
return binder;
}
public class MyBinder extends Binder {
MyService getService() {
return MyService.this;
}
}
Sự kết nối giữa Service và Acitvity được thể hiện qua một ServiceConnection.
Điều cần làm là thực thi một ServiceConnection mới, override phương thức
onServiceConnected và onServiceDisconnected.
// tham chiếu đến dịch vụ
private MyService serviceBinder;
// xử lý kết nồi giữa service và activity
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder

21


service) {
// được gọi khi liên kết được thực hiện
serviceBinder = ((MyService.MyBinder)service).getService();
}
public void onServiceDisconnected(ComponentName className) {
// nhận khi dịch vụ ngắt kết nối một cách bất ngờ
serviceBinder = null;
}
Để thực hiện việc kết nối, gọi phương thức bindService:
@Override

public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// kết nối dịch vụ
Intent bindIntent = new Intent(MyActivity.this, MyService.class);
bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE);
}
Hoạt động của bindService(): kết nối dịch vụ
Hình 4 – Hoạt động kết nối dịch vụ
Thông thường, vòng đời của dịch vụ khi có client kết nối từ đầu như sau:
Cũng bắt đầu bằng onCreate() rồi đến onBind() và dịch vụ chạy dưới nền.
Khi không còn client kết nối tới thì dịch vụ gọi onUnbind() rồi onDestroy().
Có một số trường hợp không thông thường, ví dụ như:

22


Có một context khởi động một dịch vụ, sau đó có một số client kết nối (bind) tới
service.
Có nhiều client cùng lúc kết nối tới dịch vụ.
Một activity vừa gọi startService() vừa gọi bindService().
Trình cung cấp nội dung (Content Providers)
Có thể coi trình cung cấp nội dung như là một máy chủ cơ sở dữ liệu. Công việc
của nó là quản lý truy cập và chia sẻ dữ liệu đang tồn tại, chẳng hạn như một cơ
sở dữ liệu SQLite.Nó có thể được cấu hình để cho phép các ứng dụng khác truy
xuất và ngược lại.Nếu ứng dụng rất đơn giản thì không nhất thiết phải tạo ra một
trình cung cấp nội dung.
Content Provider giúp tách biệt tầng ứng dụng ra khỏi tầng dữ liệu. Nó có đầy đủ
các quyền điều khiển và được truy xuất thông qua mô hình URI đơn giảnnhư là
có thể thêm, xóa, cập nhật dữ liệu của các ứng dụng.
Tạo một Content Provider mới

Tạo Content Provider:
Để tạo một Content Provider cần thừa kế lại từ lớp trừu tượng ContentProvide,
override lại phương thức onCreate.
import android.content.*;
import android.database.Cursor;
import android.net.Uri;
import android.database.SQLException;
public class MyProvider extends ContentProvider {
@Override
public boolean onCreate() {
// TODO: Construct the underlying database.
return true;
}
}

23


Nên cung cấp một biến static CONTENT_URI trả về một URI của provider này.
Content URI phải là duy nhất giữa các provider, vì thế nên dựa vào tên package
để xác định URI, hình thức chung cho việc định nghĩa một Content Provider URI
là:
content://com.<CompanyName>.provider.<ApplicationName>/<DataPath>
Các đơn giản nhất để làm việc này là sử dụng URIMatcher. Cấu hình
UriMatcher để phân tích hình thức của nó khi provider đang được truy xuất đến
thông qua một Content Resolver.
Đưa ra truy xuất Data Source:
Có thể cung cấp các truy vấn và thực thi với Content Provdier bằng cách thực
hiện các phương thức delete, insert, update và query.Các phương thức này hoạt
động như các giao tiếp chung đến nguồn dữ liệu bên dưới, chúng cho phép các

ứng Android chia sẽ dữ liệu với nhau mà không phải tạo một giao tiếp riêng cho
mỗi ứng dụng.
Bước cuối cùng trong quá trình tạo một Content Provider là định nghĩa kiểu
MIME làkiểu dữ liệu mà Provider trả về, override phương thức getType để trả về
một kiểu String mô tả cho kiểu dữ liệu. Kiểu trả về bao gồm cả 2 hình thức:
trường đơn và tất cả dữ liệu.
Trường đơn
vnd.<companyname>.cursor.item/s<contenttype>
Tất cả
vnd.<companyName>.cursor.dir/<contenttype>
Đăng ký Provider:
Thêm Content Provider vừa tạo vào trong manifest.xml. Sử dụng thẻ authorities
để chỉ định địa chỉ của nó:

24


android:authorities=”com.paad.provider.myapp”/>
Truy vấn, thêm, cập nhật và xóa nội dung trong Content Provide
Content Provider được truy xuất thông qua lớp Content Resolver.Mỗi một
Context của ứng dụng có một đối tượng ContentResolver, có thể được truy xuất
thông qua phương thức getContentResolver.
ContentResolver cr = getContentResolver();
Content Resolver bao gồm một vài phương thức để thực thi và truy vấn đến
Content Providers. Một URI dùng để chỉ định Content Provider nào được cung
cấp bởi các quyền được định nghĩa trong manifest của ứng dụng. URI là một
chuỗi tùy ý, vì thế hầu hết các provider đều đưa ra thuộc tính
CONTENT_URI.Content Provider thường đưa ra 2 hình thức URI, một là đựa tất
cả các dữ liệu được yêu cầu trên cùng một dòng đơn lẻ, hoặc là thêm vào

/<rowID> vào phía sau CONTENT_URI.
Truy vấn:
Việc truy vấn trên Content Provider có hình thức tương tự như khi truy vấn trong
database, dùng phương thức query của đối tượng ContentResolver với các tham
số truyền vào gồm:
Một URI của Content Provider muốn truy vấn.
Một ánh xạ đại diện cho các cột muốn chứa trong tập kết quả.
Một mệnh đề where chỉ định các dòng nào được trả về. Có thể đưa vào ký tự đại
diện và sẽ được thay thế bởi các giá trị được lưu bên trong các tham số được
chọn.
Một mảng các đối số kiểu String thay thế cho các ký tự đại diện ? trong mệnh đề
where
Một chuỗi mô tả thứ tự các dòng trả về.

25


×