Tải bản đầy đủ (.doc) (112 trang)

Xây dựng ứng dụng đa phương tiện cho Mobile sử dụng 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.76 MB, 112 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ý, ghi rõ họ và tên )
NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN


























Ngày Tháng Năm
Giảng Viên Phản Biện
( Ký, ghi rõ họ và tên )
LỜI CẢM ƠN
Chúng em xin chân thành cảm ơn khoa Công Nghệ Thông Tin trường Đại Học
Sư Phạm Kỹ Thuật Tp.HCM đã tạo điều kiện cho chúng em thực hiện đề tài này.

Chúng em xin chân thành cảm ơn Thầy Nguyễn Trần Thi Văn đã tận tình hướng
dẫn, chỉ bảo chúng em trong suốt quá trình thực hiện đề tài.
Chúng em xin chân thành cám ơn quý Thầy Cô trong Khoa đã tận tình
giảng dạy, trang bị cho chúng em những kiến thức quý báu trong những năm học vừa
qua.
Chúng con xin nói lên lòng biết ơn sâu sắc đối với Ông Bà, Cha Mẹ đã chăm
sóc, nuôi dạy chúng con thành người.
Xin chân thành cám ơn các anh chị và bạn bè đã ủng hộ, giúp đỡ và động viên
chúng em trong thời gian học tập và nghiên cứu.
Trong phạm vi khả năng cho phép, chúng 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. Chúng 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
Châu Duy Thiện
Vũ Thùy Linh
Lê Quốc Tiến
06/ 2010
MỤC LỤC
Chương 1: Tổng quan về Android và Android SDK
MỞ ĐẦU
Từ trước tới nay, mỗi khi nhắc tới các công nghệ di động, hay các thiết bị điện tử,
thì đa phần mọi người đều nghĩ tới những ứng dụng nhúng, tức là ứng dụng được viết
sẵn và chỉ chạy trên nền thiết bị đó mà thôi. Nhưng những năm gần đây, khi các thiết
bị điện tử, đặc biệt là các thiết bị cá nhân di động như: điện thoại, máy trợ giúp cá
nhân kỹ thuật số, …ngày càng trở nên phổ biến và càng ngày càng trở nên cá nhân hóa
trong mục đích sử dụng. Điều này, làm nảy sinh nhiều vấn đề, trong đó, có một yêu
cầu bức thiết đó là việc có thể thêm vào các thiết bị này những phần mềm ứng dụng
mới, bởi vì những ứng dụng được thiết kế sẵn theo máy đã không còn đáp ứng được
nhu cầu ngày càng đa dạng của người sử dụng.

Chính vì điều này, mà hàng loạt những công nghệ đã ra đời nhắm đáp ứng những
nhu cầu trên, như:
Công nghệ JAVA được tích hợp trên các thiết bị cầm tay, công nghệ này cho
phép người dùng cài thêm những ứng dụng mới, những tiện ích mới cho thiết bị cá
nhân của họ. Tuy nhiên, công nghệ JAVA nhúng này, lại gặp một nhược điểm đó là
quá phụ thuộc vào nền tảng phần cứng và phần cứng phải hỗ trợ thì mới thực hiện
được, tức là rất hạn chế việc sử dụng phần cứng của máy, mà hầu như là không sử
dụng được, trong việc viết chương trình. Thí dụ: một máy điện thoại hỗ trợ công nghệ
JAVA nhưng chỉ cho phép sử dụng tài nguyên hạn chế, như: cho phép truy xuất dữ
liệu thể bộ nhớ nhưng không cho phép chặn cuộc gọi hay truy cập vào danh bạ của
máy.
Đối với những máy có sử dụng hệ điều hành như Window Mobile, Symbian…
Các hệ điều hành này 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 hoàn toàn 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óm nghiên cứu nhận thấy, đây chính là nền tảng ứng dụng có thể phát triển
trong tương lai, hoàn toàn có thể là đối trọng nặng ký của các nền tảng hệ điều hành đã
Page 1
Chương 1: Tổng quan về Android và Android SDK
có trước đây, như Window Mobile, Symbian … Chính vì thế, nhóm đã chọn đề tài:

Tìm hiểu và viết ứng dụng trên nền hệ điều hành mobile Android. Với hy vọng sẽ
bước đầu tìm hiểu, nắm bắt và làm chủ được công nghệ mới cho tương lai của các thiết
bị di động.
Nhưng vì thời gian, cũng như năng lực của nhóm có hạn, cho nên chỉ giới hạn ở
việc tìm hiểu cách thức hoạt động, nghiên cứu cơ bản các chức năng và sử dụng bộ
công cụ Android SDK để thiết kế một ứng dụng mục đích nghiệm thu quá trình nghiên
cứu, đó là chương trình chỉnh sửa ảnh trên điện thoại có cài hệ điều hành Android.
Đề tài bao gồm 3 phần:
Phần A: Hệ điều hành android
Chương 1: Tổng quan Android và SDK
Chương 2: Applications and Activities
Chương 3: User Interfaces
Chương 4: Intents
Chương 5: Data Storage
Chương 6: Working in the Background
Phần B: Chương trình minh họa - Chương trình chỉnh sửa ảnh
Chương 7: Thiết kế chương trình
Phần C: Kết luận
Phụ lục: Hướng dẫn cài đặt, sử dụng.
Page 2
Chương 1: Tổng quan về Android và Android SDK
NỘI DUNG
Phần A: Hệ điều hành android
CHƯƠNG 1: TỔNG QUAN VỀ ANDROID VÀ ANDROID SDK
1.1 Giới thiệu
1.1.1 Giới thiệu về Android
Hiện nay có rất nhiều hệ điều hành trên các thiết bị di động. Nổi tiếng phải kể đến
là Window Mobile và Symbian. Cả hai hệ điều hành này 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, 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
nếu lựa chọn C/C++ là ngôn ngữ lập trình trên Symbian thì đúng là một thách thức.
Trước tình hình đó thì Google đã có một tham vọng, họ muốn việc lập trình trên chiếc
điện thoại di động là dễ dàng với một ngôn ngữ nổi tiếng là JAVA, một hệ điều hành
có khả năng chạy trên nhiều dòng điện thoại. Với ý định này thì vào ngày 11/11/2007,
phiên bản hệ điều hành đầu tiên có tên gọi là Android của Google và chủ yếu dựa trên
nhân Linux phiên bản 2.6 đã ra đời.
Android đượ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. Android hoàn toàn
là một hệ điều hành mở. 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 … Các nhà phát
triển có thể làm bất 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”. Với Android, các nhà phát triển còn
có khả năng chia sẻ thông tin cá nhân lên trang Web ví dụ như thông tin liên lạc, vị trí
địa lí, lịch biểu…
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… Google còn dự định tích hợp các dịch
vụ sẵn có của hãng lên Android, trong đó phải kể đến Google Maps, dịch vụ bản đồ
trực tuyến từ lâu đã rất quen thuộc với chúng ta, người dùng sẽ thực sự bị thuyết
phục bởi các ứng dụng độc đáo này. 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.
Page 3
Chương 1: Tổng quan về Android và Android SDK
Để có thể phát triển các ứng dụng thì không thể không nói đến máy ảo. Máy ảo
của Android có tên là Dalvik, chiếc máy ảo dựa trên việc đăng kí (register-based) và
được thiết kế bởi Dan Bornstein và một vài kĩ sư của Google. Thuật ngữ “register-
based” đã nói lên sự khác biệt giữa máy ảo Android với máy ảo JAVA thông thường.
Tương tự như máy ảo JAVA, đây cũng chỉ là một máy ảo thông dịch, nhưng thông

dịch các file có định dạng .dex (Dalvik Execute) – một định dạng giúp tối ưu bộ nhớ
và khả năng lưu trữ của máy ảo – Các máy ảo JAVA ngày nay chủ yếu dựa trên ngăn
xếp (Stack-based), còn máy ảo Android thì khác dựa trên việc đăng kí (Register-
based), với tính chất này cho phép rút ngắn thời gian thực thi chương trình.
Android cũng cung cấp một tập các giao diện dòng lệnh để ta có thể kiểm soát
máy ảo mà không cần đến giao diện đồ họa. Ta có thể kết nối, chuyển cổng, cấu hình
mạng, gọi điện, gửi tin nhắn, tạo thẻ nhớ, dò lỗi… tất cả chỉ thông qua dòng lệnh mà
không cần cài đặt thêm bất cứ một IDE nào khác. Điều bất tiện ở đây là ta phải nhớ tất
cả các cú pháp cho từng nhu cầu cụ thể.
Có thể nói rằng Android đã cung cấp cho chúng ta khá đầy đủ các công cụ cơ
bản, giúp các nhà phát triển có thể tự xây dựng các ứng dụng cho riêng mình một cách
dễ dàng. Trong tương lai có thể nói Android là một đối thủ khá nặng kí đối với
Symbian và Window Mobile, vốn đã là các hệ điều hành nổi tiếng.
Cấu trúc của Android
1.1.2 Giới thiệu về Android SDK
Song song với việc giới thiệu nền tảng hệ điều hành mới Android, Google cũng
đã giới thiệu cho người dùng bộ công cụ phát triển ứng dụng Android SDK cho hệ
điều hành này. Đây là công cụ giả lập thiết bị ảo trên máy tính để phát triển ứng dụng
Page 4
Chương 1: Tổng quan về Android và Android SDK
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.
Android SDK cung cấp đầy đủ mọi thứ cần thiết dùng để lập trình, kiểm tra và gỡ
lỗi các chương trình ứng dụng Android, như:
• Android APIs: phần nhân của SDK là thư viện Android API, trong đó chứa thư
viện mà các nhà phát triển dùng để tạo ra các ứng dụng Android Native (tức là các ứng
dụng đã được thiết kế sẵn đóng gói cùng với hệ điều hành).
• Bộ công cụ phát triển: để chuyển mã nguồn thành các ứng dụng chạy theo
chuẩn của Android. Nó cũng cung cấp các công cụ để biên dịch và gỡ lỗi cho chương
trình.

• Bộ giả lập Android: bộ giả lập này có đầy đủ các chức năng y như là mô hình
thật và nó làm việc như một thiết bị Android thực sự. Vì thế, bộ giả lập này là công cụ
môi trường Android tuyệt vời, dùng để thử nghiệm các ứng dụng của Android mà
không phụ thuộc vào phần cứng.
• Documentation: trong bộ Android SDK cung cấp sẵn một hệ thống hướng dẫn,
trong đó giải thích về cách sử dụng và làm việc của tất cả các đối tượng được hỗ trợ
như: các lớp chức năng, các phương thức trong các lớp đó … (với tính năng gần tương
tự như bộ MSDN của Microsoft).
• Sample code: đây là các đoạn mã mẫu và một vài ứng dụng được thiết kế hoàn
chỉnh dùng để hướng dẫn về cách sử dụng của một vài và giúp các nhà phát triển ứng
dụng mới tiếp cận với Android dễ dàng làm việc và tìm hiểu cách thức lập trình ứng
dụng trên Android thông qua bộ SDK.
Như đã nói ở trên, hệ điều hành Android là một hệ điều hành mở, nó cho phép
nhà phát triển ứng dụng can thiệp vào tất cả các chức năng của hệ điều hành, thông
qua bộ công cụ SDK. Sau đây sẽ trình bày một số thư viện chuẩn của Android SDK
cung cấp để hỗ trợ cho việc thực hiện được chức năng mong muốn theo ý của nhà phát
triển:
• Gói android.os: gói này cho phép truy xuất đến các dịch vụ cơ bản của Android
như tin nhắn, interprocess communication, đồng hồ …
• Gói com.google.android.maps: chứa các hàm API cấp cao để truy xuất đến ứng
dụng map (bản đồ) đã được nhúng sẵn trong hệ điều hành Android. Nó bao gồm
MapView control, Overlay và MapController dùng để đánh dấu và điều khiển bản đồ.
• Ngoài ra, còn các gói khác như .app, .widget, .view, .os, … mà nhóm sẽ trình
bày như là một phần nội dung của đề tài này.
1.1.3 Cài đặt
Chuẩn bị:
• Phần mềm Eclipse (phiên bản 3.2 trở lên) có thể tải trực tiếp từ trang web
.
Page 5
Chương 1: Tổng quan về Android và Android SDK

• Bộ công cụ Android SDK phiên bản mới nhất, tới thời điểm này (4/2009) là
phiên bản 1.5_r1, có thể tải từ trang web .
Ở đây nhóm thực hiện sẽ sử dụng hệ điều hành Microsoft Windows, phần mềm
Eclipse và Android SDK để triển khai ứng dụng Android.
Bắt đầu việc cài đặt:
• Đầu tiên, bung nén chương trình eclipse vào một thư mục nào đó (thí dụ:
C:\eclipse\)
• Sau đó, bung nén bộ Android SDK vào một thư mục bất kỳ (thí dụ:
D:\Android_SDK_1.5_r1\)
• Bây giờ chạy chương trình eclipse.
• Vào menu Help – Software Updates …
• Chọn tab Available Software
• Chọn Add Site, nhập vào đường dẫn sau:

• Chọn OK.
• Chờ cho chương trình được cài đặt.
• Sau khi cài xong, tiếp tục vào menu Window – Preferences
• Chọn tab Android, chỉ đường dẫn đến thư mục đã bung nén Android SDK ở
trên (ở đây là D:\Android_SDK_1.5_r1\).
• Hoàn tất.
Lưu ý:
• Cách cài đặt ở trên đòi hỏi máy tính phải được nối mạng Internet thì mới cài đặt
được.
Page 6
Chương 2: Cơ bản về việc tạo ứng dụng trên Android
CHƯƠNG 2: CƠ BẢN VỀ VIỆC TẠO ỨNG DỤNG TRÊN ANDROID
2.1 Các thành phần tạo nên một ứng dụng Android
Có 6 thành phần được cung cấp để tạo nên các ứng dụng Android:
• Activities: Mỗi một màn hình là một mở rộng của lớp Activity. Activity dùng
Views để tạo nên giao diện đồ họa người dùng, để hiển thị thông tin và đáp lại các

hành động của người dùng. Activity trong Android cũng tương tự như một Form trong
các ứng dụng desktop truyền thống.
• Services: Các service làm việc ẩn dưới ứng dụng, được sử dụng để thực hiện
các xử lý thông thường khi cần và thậm chí ngay cả lúc các Activity không hoạt động
hoặc ẩn đi.
• Content Providers: được sử dụng để quản lý và chia sẽ cơ sở dữ liệu cho ứng
dụng. Chúng 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.
• Intent: Một framework chuyển đổi message đơn giản. Có thể sử dụng Intent để
gửi tin nhắn đến toàn bộ hệ thống hoặc một Activity (Service) cụ thể. Hệ thống sau đó
sẽ xác định Activity đích để thực hiện các tác vụ tương ứng
• Broadcast Receivers: Bằng cách tạo và đăng ký một Broadcast Receiver, ứng
dụng Android có thể lắng nghe toàn bộ các Intent theo một chuẩn cụ thể được chỉ
định. Các Broadcast Receiver sẽ chạy ứng dụng một cách tự động để đáp ứng một
Intent gửi đến.
• Notification: Chúng gửi các tín hiệu đến người dùng mà không lấy đi focus
hoặc ngắt đi các ứng dụng hiện hành của họ. Chúng là một kỹ thuật được ưa chuộng
để tạo một chú ý người dùng từ bên trong một Service hoặc một Broadcast Receiver.
Ví dụ khi người dùng đang nhận một tin nhắn hoặc đang nhận cuộc gọi, chúng sẽ gửi
đến họ một tín hiệu bằng đèn, tạo một âm thanh hoặc hiển thị một biểu tượng nào đó.
Việc tách rời sự phụ thuộc giữa các thành phần ứng dụng giúp việc chia sẽ cũng
như trao đổi giữa các ứng dụng khác dễ dàng hơn, thậm chí đối với các ứng dụng third
party.
2.2 Giới thiệu Android Manifest
Mỗi một project có một file AndroidManifest.xml, nó định nghĩa cấu trúc và siêu
dữ liệu (metadata) cho ứng dụng.
Trong file AndroidManifest.xml chứa các nút cho mỗi thành phần (Activities,
Services, Content Providers và Broadcast Receivers) tạo nên ứng dụng Android và xác
Page 7
Chương 2: Cơ bản về việc tạo ứng dụng trên Android

định sự tương tác của chúng với nhau và với các ứng dụng khác thông qua Intent
Filters và Permissions.
AndroidManifest cũng đưa ra các thuộc tính để chỉ định siêu dữ liệu của ứng
dụng (icon hoặc theme), và thêm vào các nút cấp cao khác để thiết lập bảo mật và
kiểm tra các thành phần ở trên.
Manifest có một thẻ gốc <manifest> với một thuộc tính package được gán giá trị
là package của project. Thường thì nó bao gồm một thuộc tính xmlns:android cung cấp
một vài thuộc tính hệ thống sử dụng trong file. Một node manifest cụ thể như sau:
<manifest xmlns:android= /> package=”com.my_domain.my_app”>
[ manifest nodes ]
</manifest>
Thẻ manifest bao gồm các node định nghĩa các thành phần của ứng dụng, các
thiết lập bảo mật, các lớp kiểm tra tạo nên một ứng dụng. Danh sách sau đây là một vài
node manifest thường được dùng:
- application: một manifest có thể chứa chỉ một node application. Nó dùng các
thuộc tính để chỉ định các metadata cho ứng dụng (tiêu đề, icon, và theme). Nó cũng
chứa các thẻ Activity, Service, Content Provider, và Broadcast Receiver.
<application android:icon=”@drawable/icon”
android:theme=”@style/my_theme”>
[ application nodes ]
</application>
- activity: Mỗi một activity được hiển thị trong chương trình thì bắt buộc phải có
một thẻ activity, dùng android:name để chỉ định tên lớp. Việc thử khởi động một
Activity không được định nghĩa trong manifest sẽ làm phát sinh ngoại lệ khi chạy
chương trình. Mỗi một thẻ activity hỗ trợ thẻ con intent-filter để chỉ định Intent nào
được chạy.
<activity android:name=”.MyActivity” android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />

</intent-filter>
</activity>
- service: cũng như một thẻ activity, phải tạo một thẻ service mới cho mỗi lớp
Service được dùng trong ứng dụng.
<service android:enabled=”true” android:name=”.MyService”></service>
Page 8
Chương 2: Cơ bản về việc tạo ứng dụng trên Android
- provider: thẻ provider được dùng cho mỗi Content Provider trong ứng dụng.
Content Provider được dùng cho việc quản lý và chia sẽ truy xuất dữ liệu bên trong và
giữa các ứng dụng với nhau.
<provider android:permission=”com.paad.MY_PERMISSION”
android:name=”.MyContentProvider”
android:enabled=”true”
android:authorities=”com.paad.myapp.MyContentProvider”>
</provider>
- uses-permission: một phần trong bảo mật, thẻ uses-permission khai báo quyền
hạn mà ứng dụng có thể cần để hoạt động. Các quyền được đưa ra sẽ được áp dụng
cho người dùng, để chấp nhận hoặc từ chối, trong suốt quá trình cài đặt. Việc phân
quyền được yêu cầu trong nhiều dịch vụ native Android, đặc biệt là liên quan đến chi
phí và bảo mật ( dialing, nhận SMS, hoặc sử dụng các dịch vụ định vị). Trong một ứng
dụng third-party dưới đây, có thể chỉ định quyền trước khi cung cấp khả năng chia sẽ
các thành phần ứng dụng.
<uses-permission android:name=”android.permission.ACCESS_LOCATION”>
</uses-permission>
- permission: trước khi bạn có thể hạn chế việc truy xuất đến các thành phần ứng
dụng, cần định nghĩa một quyền bên trong manifest. Sử dụng thẻ permission để định
nghĩa các quyền. Các thành phần ứng dụng có thể sử dụng các quyền này bằng cách
thêm vào thuộc tính android:permission.Các ứng dụng khác sau đó sẽ cần thêm một
thẻ uses-permission trong file manifest của chúng trước khi sử dụng các thành phần
được bảo vệ này.

Bên trong thẻ permission có thể chỉ định cấp độ truy xuất được cho phép
(normal, dangerous, signature, signatureOrSystem),
<permission android:name=”com.paad.DETONATE_DEVICE”
android:protectionLevel=”dangerous”
android:label=”Self Destruct”
android:description=”@string/detonate_description”>
</permission>
- instrumentation: các lớp Instrumentation cung cấp một framework cho việc
chạy kiểm tra trên các Activity và Service lúc thực thi chương trình. Chúng cung cấp
các móc nối đến màn hình ứng dụng và tương tác với tài nguyên hệ thống.
<instrumentation android:label=”My Test”
android:name=”.MyTestClass”
android:targetPackage=”com.paad.aPackage”>
Page 9
Chương 2: Cơ bản về việc tạo ứng dụng trên Android
</instrumentation>
Tham khảo tại để có
thêm chi tiết về AndroidManifest
2.3 Sử dụng Manifest Editor
ADT plug-in bao gồm một Manifest Editor trực quan để quản lý manifest, tiện lợi
hơn khi thao tác trực tiếp trên file XML
Để dùng Manifest Editor trong Eclipse, right-click vào file AndroidManifest.xml
trong project của bạn và chọn Open With  Android Manifest Editor. Nó đưa ra
một khung nhìn tiện lợi cho cấu trúc ứng dụng và cung cấp các shortcut link đến
Application, Permissions, Instrumentation, và file XML thô.
2.4 Vòng đời của ứng dụng Android
Không giống như hầu hết các môi trường truyền thống, các ứng dụng Android
không có một điều khiển đến vòng đời của chúng. Thay vào đó, các thành phần ứng
dụng phải lắng nghe cho việc thay đổi trạng thái bên trong của ứng dụng đó và tác
động trở lại một cách hợp lý.

Page 10
Chương 2: Cơ bản về việc tạo ứng dụng trên Android
Như đã đề cập trước đó, mỗi một ứng dụng Android ở trong chính tiến trình của
nó, đang chạy một thể hiện riêng biệt của Dalvik. Việc quản lý bộ nhớ và tiến trình của
mỗi ứng dụng Android được điều khiển một cách riêng trong lúc run time.
Android quản lý tài nguyên một cách chặt chẽ, nó sẽ làm bất cứ việc gì để đảm
bảo cho thiết bị duy trì đáp ứng. Điều này có nghĩa là các tiến trình sẽ bị hủy đi mà
không có một cảnh báo nào nếu cần thiết để giải phóng tài nguyên cho các ứng dụng
có độ ưu tiên cao.
2.5 Tài nguyên mở rộng
Android hỗ trợ các nguồn tài nguyên bên ngoài từ các dữ liệu đơn giản như một
chuỗi, màu sắc đến các kiểu tài nguyên phức tạp hơn như ảnh, hoạt hình, và themes.
Với các tài nguyên bên ngoài này thì việc quản lý, duy trì và cập nhật là dễ dàng
hơn. Điều này cũng giúp dễ dàng khai báo các tài nguyên có thể thay đổi nhằm hỗ trợ
phần cứng khác nhau và sự quốc tế hóa.
2.5.1 Tạo tài nguyên
Tài nguyên của chương trình được lưu bên trong thư mục res/. Trong thư mục
này, mỗi một kiểu tài nguyên có một thư mục con chứa nó.
Nếu tạo một project bằng ADT wizard, nó sẽ tạo ra một folder res chứa các thư
mục: values (chứa các chuỗi), drawable (chứa icon của ứng dụng), layout ( chứa bố
cục mặc định của ứng dụng).
Có vài loại tài nguyên khác nhau, vì thế sẽ có một số folder khác nhau được tạo
ra: simple values, drawables, layouts, animations, XML, styles, và tài nguyên thô. Khi
ứng dụng được biên dịch, các tài nguyên này sẽ được đưa vào trong gói ứng dụng.
Một lớp R cũng được tạo để tham chiếu đến các tài nguyên trong ứng dụng bằng
code.
Các phần sau sẽ mô tả chi tiết hơn về các loại tài nguyên cụ thể và làm thế nào để
tạo ra các tài nguyên đó trong ứng dụng Android.
Page 11
Chương 2: Cơ bản về việc tạo ứng dụng trên Android

2.5.1.1 Simple Values
Các giá trị đơn giản bao gồm: string, color, dimesion và string array hoặc integer
array. Tất cả các giá trị này đều được lưu vào các file xml trong thư mục res/values:
Trong mỗi file xml, cần chỉ định kiểu giá trị cần lưu, sử dụng các thẻ trong ví dụ
dưới đây:
<?xml version=”1.0” encoding=”utf-8”?>
<resources>
<string name=”app_name”>To Do List</string>
<color name=”app_background”>#FF0000FF</color>
<dimen name=”default_border”>5px</dimen>
<array name=”string_array”>
<item>Item 1</item>
<item>Item 2</item>
<item>Item 3</item>
</array>
<array name=”integer_array”>
<item>3</item>
<item>2</item>
<item>1</item>
</array>
</resources>
Ví dụ này có tất cả các kiểu dữ liệu đơn giản? Thường thì các tài nguyên được
chia ra từng file xml riêng lẽ cho mỗi kiểu dữ liệu, ví dụ res/values/strings.xml chỉ
chứa các resource kiểu string.
Các phần sau sẽ khảo sát chi tiết hơn về các kiểu dữ liệu này
2.5.1.1.1 Strings
Các chuỗi sẽ giúp duy trì tính đồng bộ cho ứng dụng và dễ dàng hơn để tạo các
phiên bản riêng lẽ.
Dùng tag<string> để chỉ định tạo một string resource:
<string name=”stop_message”>Stop.</string>

Android hỗ trợ các định dạng text đơn giản như <b>,<i>, và <u>
<string name=”stop_message”><b>Stop.</b></string>
Có thể dùng string resources như các tham số đầu vào cho phương thức
String.format. Tuy nhiên phương thưc này không hỗ trợ định dạng văn bản như trên,
để có thể định dạng được văn bản như trên cần khai báo như sau:
<string name=”stop_message”>&lt;b>Stop&lt;/b>. %1$s</string>
Page 12
Chương 2: Cơ bản về việc tạo ứng dụng trên Android
Trong phần code, dùng phương thức Html.fromHtml để chuyển một chuỗi ký tự:
String rString = getString(R.string.stop_message);
String fString = String.format(rString, “Collaborate and listen.”);
CharSequence styledString = Html.fromHtml(fString);
2.5.1.1.2 Colors
Dùng tag color để khai báo các màu. Để chỉ định giá trị màu dùng ký tự # trước
giá trị màu RGB (1 hoặc 2 chữ số hex).
<color name=”opaque_blue”>#00F</color>
<color name=”transparent_green”>#7700FF00</color>
2.5.1.1.3 Dimensions
Để chỉ định dimension resource, dùng thẻ dimen với các đơn vị sau:
 px pixel
 in inch
 pt point
 mm millimet
 dp Density
 sp Scale
Ví dụ sau đây mô tả làm thế nào để chỉ định các giá trị dimension:
<dimen name=”standard_border”>5px</dimen>
<dimen name=”large_font_size”>16sp</dimen>
2.5.1.2 Styles and Themes
Style giúp cho ứng dụng có một giao diện hợp lý bằng cách chỉ định các giá trị

của thuộc tính của View. Hầu hết các style và theme dùng để lưu các giá trị màu và
font chữ cho chương trình.
Có thể thay đổi giao diện một cách khá đơn giản bằng cách chỉ định một style
khác.
Khai báo một thẻ style với một thuộc tính name và chứa 1 hoặc nhiều item. Mỗi
item sẽ có một tên được gán cho thuộc tính name.
<?xml version=”1.0” encoding=”utf-8”?>
<resources>
<style name=”StyleName”>
<item name=”attributeName”>value</item>
</style>
</resources>
Page 13
Chương 2: Cơ bản về việc tạo ứng dụng trên Android
Style hỗ trợ cơ chế thừa kế, chỉ cần cung cấp giá trị cho thuộc tính parent trong
thẻ style.
<?xml version=”1.0” encoding=”utf-8”?>
<resources>
<style name=”BaseText”>
<item name=”android:textSize”>14sp</item>
<item name=”android:textColor”>#111</item>
</style>
<style name=”SmallText” parent=”BaseText”>
<item name=”android:textSize”>8sp</item>
</style>
</resources>
2.5.1.3 Layouts
Layout resource giúp người phát triển thiết kế giao diện người dùng trong file
XML tiện lơi hơn là thiết kế trong code.
Hầu hết các layout được dùng để thiết kế giao diện cho một Activity. Một khi đã

định nghĩa trong file xml, layout sẽ được dùng trong Activity thông qua phương thức
setContentView trong phương thức onCreate.
Có thể tham chiếu một layout từ một layout resource khác. Mỗi layout được lưu
trong một file xml riêng, chúng được lưu trong thư mục res/layout.
<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout xmlns:android=” /> android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”>
<TextView
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”Hello World!”
/>
</LinearLayout>
2.5.2 Sử dụng tài nguyên
Cũng giống như các resource được tạo ra, Android cũng cung cấp một vài tài
nguyên hệ thống có thể sử dụng. Các resource có thể được sử dụng trực tiếp từ phần
code của ứng dụng và cũng có thể được tham chiếu từ một nguồn resource khác.
Page 14
Chương 2: Cơ bản về việc tạo ứng dụng trên Android
Phần này sẽ mô tả cách định nghĩa một resource có thể thay đổi theo ngôn ngữ,
vùng, và phần cứng khác nhau. Android sẽ tự động chọn giá trị thích hợp nhất cho một
resource dựa trên phần cứng và cài đặt thiết bị hiện tại.
2.5.2.1 Sử dụng tài nguyên trong code
Truy xuất resource trong code thông qua lớp static R. R là một lớp dựa trên các
resource mở rộng và được tạo khi project được biên dịch. Lớp R chứa các lớp con
static cho mỗi kiểu resource được định nghĩa. Một project mặc định bao gồm 2 lớp
R.string và R.drawable.
Có thể dùng recource như một tham số truyền vào cho một constructor hay một
phương thức:

// Inflate a layout resource.
setContentView(R.layout.main);
// Display a transient dialog box that displays the
// error message string resource.
Toast.makeText(this, R.string.app_error,Toast.LENGTH_LONG).show();
Khi muốn có một thể hiện (instance) của resource, cần dùng đến các phương thức
hỗ trợ để rút trích từ bảng resource. Bởi vì các phương thức này tìm kiếm trong bảng
resource của ứng dụng, nên các phương thức hỗ trợ này không thể là static. Dùng
phương thức getResource để truy xuất Resource:
Resources myResources = getResources();
Lớp Resources bao gồm các phương thức để lấy các kiểu dữ liệu và gán chúng
cho một biến.
Resources myResources = getResources();
CharSequence styledText = myResources.getText(R.string.stop_message);
Drawable icon = myResources.getDrawable(R.drawable.app_icon);
int opaqueBlue = myResources.getColor(R.color.opaque_blue);
float borderWidth = myResources.getDimension(R.dimen.standard_border);
Animation tranOut;
tranOut = AnimationUtils.loadAnimation(this, R.anim.spin_shrink_fade);
String[] stringArray;
stringArray = myResources.getStringArray(R.array.string_array);
int[] intArray = myResources.getIntArray(R.array.integer_array);
2.5.2.2 Tham chiếu tài nguyên này trong một tài liệu XML khác
Có thể tham chiếu đến resource trong một file XML khác. Điều này đặc biệt hữu
dụng cho layout và style, như vậy sẽ tạo được những sự thay đổi trên themes, các biến
Page 15
Chương 2: Cơ bản về việc tạo ứng dụng trên Android
string cục bồ và đồ họa. Điều này đảm bảo tính ổn định cho bố cục hiển thị đối với
các màn hình có kích thước và độ phân giải khác nhau.
Để tham chiếu đến một resource trong một file XML khác, dùng ký hiệu @ :

attribute=”@[packagename:]resourcetype/resourceidentifier”
Mặc định, Android sẽ hiểu rằng đang sử dụng một resource trong cùng package,
vì thế nếu bạn dùng một resource từ một package khác bạn cần cung cấp tên đầy đủ
của package đó.
Ví dụ sau đây tạo một layout sử dụng color, dimension, và string resource:
<?xml version=”1.0” encoding=”utf-8”?>
<LinearLayout
xmlns:android=” /> android:orientation=”vertical”
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:padding=”@dimen/standard_border”>
<EditText
android:id=”@+id/myEditText”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/stop_message”
android:textColor=”@color/opaque_blue”
/>
</LinearLayout>
2.5.2.3 Sử dụng tài nguyên hệ thống
Các ứng dụng native của Android có nhiều resource được cung cấp (string,
image, animation và layout) để dùng cho việc tạo các ứng dụng.
Việc truy xuất resource của hệ thống trong phần code cũng tương tự như khi làm
việc với chính những resource do người dùng tạo ra. Điểm khác nhau ở đây là việc
dùng lớp android.R chứ không phải chỉ dùng lớp R như những phần trước.
CharSequence httpError = getString(android.R.string.httpErrorBadUrl);
Để truy xuất tài nguyên hệ thống trong XML, cần chỉ định tên package là
android:
<EditText
android:id=”@+id/myEditText”

android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@android:string/httpErrorBadUrl”
Page 16
Chương 2: Cơ bản về việc tạo ứng dụng trên Android
android:textColor=”@android:color/darker_gray”
/>
2.5.2.4 Tham chiếu đến các style trong Theme hiện hành
Theme là một cách tuyệt vời đảm bảo các ứng dụng có một giao diện nhất quán.
Điều này sẽ tiện lợi hơn là phải định nghĩa cho mỗi style, Android cung cấp một
shortcut để bạn sử dụng các style từ theme hiện hành
Để làm điều này, dùng ?android: trước resource muốn dùng:
<EditText
android:id=”@+id/myEditText”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/stop_message”
android:textColor=”?android:textColor”
/>
2.6 Tổng quan về Android Activity
Để tạo một giao diện cho ứng dụng, cần thực hiện một lớp thừa kế lớp Activity,
sử dụng các View để cung cấp các tương tác với người dùng.
Mỗi một Activity đại diện cho một màn hình (tương tự như khái niệm Form trong
các ứng dụng Destop). 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, 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;
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);
}
Page 17
Chương 2: Cơ bản về việc tạo ứng dụng trên Android
}
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ị. Một
Activity rỗng thì thực sự không có ích, 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. Android cung cấp một số
View giúp tạo một giao diện hấp dẫn.
Để 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);
}
Để 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,…). Một Activity mà không được khai báo một thẻ activity
tương ứng sẽ không được khởi chạy.
Ví dụ sau mô tả cách làm thế nào để khai báo Activity đã được tạo ở phần trên:
<activity android:label=”@string/app_name”
android:name=”.MyActivity”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
Page 18
Chương 3: Giao diện người dùng
CHƯƠNG 3: GIAO DIỆN NGƯỜI DÙNG
3.1 Cơ bản về thiết kế giao diện sử dụng trong Android
Android đưa ra một vài thuật ngữ mới cho việc thiết kế giao diện:
• Views: Views là lớp UI cơ bản cho các control giao diện. Tất cả các control giao
diện người dùng, các lớp layout đều được dẫn xuất từ lớp Views.
• ViewGroups: ViewGroups được mở rộng từ lớp View và có thể chứa nhiều
Views. Bạn có thể tạo các control kết hợp chứa các View có mối quan hệ với nhau.
ViewGroups cũng được kế thừa để cung cấp các lớp quản lý bố cục như LinearLayout.

• Activity: Activity tương tự như khái niệm về một cửa sồ hoặc một form trong các
ứng dụng truyền thống. Nó dùng để hiển thị giao diện người dùng.
3.2 Giới thiệu về các loại View
Như đã đề cập ở trên, tất cả các thành phần trực quan trong Android đều được thừa
kế từ lớp View. Lớp ViewGroup là một thiết kể mở rộng của View có thể chứa nhiều
thành phần View. ViewGroup được dùng để xây dựng nên các component có thể dùng lại
(widget) hoặc để quản lý bố cục cho các control.
Hình sau mô tả mối quan hệ giữa các thành phần trên:
3.2.1 Tạo giao diện Activity với các View
Một Activity khởi động với một màn hình rỗng. Để thiết lập giao diện cho màn hình
rỗng này cần gọi phường thức setContentView với tham số là một thể hiện của lớp View.
Cần phải sử dụng phương thức trên để gán một UI cho ứng dụng khi định nghĩa đè lại
phương thức onCreate.
Phương thức setContentView có thể nhận một tham số là resource ID hoặc một thể
hiện của View. Điều này có nghĩa là bạn có thể định nghĩa giao diện ứng dụng bằng code
hoặc tham chiếu đến resource (layout).
Page 19
Chương 3: Giao diện người dùng
Việc dùng layout resource sẽ tách riêng việc thiết kế giao diện và phần code xữ lý,
cung cấp một khả năng thay đổi linh hoạt giao diện mà không thay đổi code bên trong.
Điều này tạo sự tùy biến phù hợp với các thiết bị phần cứng khác nhau dựa trên layout,
thậm chí có thể thay đổi ngay cả lúc run-time trên cơ sở thay đổi của phần cứng.
Đoạn code sau mô tả cách thiết lập một UI sử dụng resource layout. Sử dụng
phương thức findViewById để tham chiếu đến các View được định nghĩa trong một
resource. Ví dụ này tham chiếu đến layout main.xml nằm trong thư mục res/layout của
project:
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);

setContentView(R.layout.main);
TextView myTextView = (TextView)findViewById(R.id.myTextView);
}
Hoặc có thể định nghĩa UI bằng code:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
TextView myTextView = new TextView(this);
setContentView(myTextView);
myTextView.setText(“Hello, Android”);
}
3.2.2 Android Widget Toolbox
Android cung cấp một bộ công cụ các View chuẩn để tạo các giao diện người dùng
đơn giản. Bạn có thể đơn giản hóa việc phát triển và cung cấp sự đồng nhất giữa các ứng
dụng bằng cách sử dụng các control trong toolbox này.
Các control thông dụng:
• TextView: là một label chỉ có tác dụng hiển thị văn bản, nó hỗ trợ hiển thị nhiều
dòng, định dạng chuỗi.
• EditText: Một hộp nhập văn bản có thể chỉnh sửa, hỗ trợ nhập nhiều dòng.
• ListView: Tạo và quản lý một nhóm các View để hiển thị một danh sách các phần
tử. Một ListView chuẩn dùng để hiển thị chuỗi giá trị của một mảng các TextView
• Spinner: Một control kết hợp, hiển thị một TextView và một ListView kết hợp
dùng để chọn một item từ danh sách. Nó được tạo thành từ một TextView chứa giá trị
hiện tại đang được chọn kết hợp với một nút mà khi nhấn vào sẽ đưa ra một danh sách
lựa chọn.
• Button: Nút nhấn chuẩn
Page 20
Chương 3: Giao diện người dùng
• CheckBox: Gồm 2 trạng thái: checked hoặc unchecked
• RadioButton: Khi đặt các radiobutton trong cùng một nhóm, chỉ có một trong các

nút đó được chọn tại một thời điểm cụ thể.
Andoid cũng hỗ trợ nhiều View cao cấp hơn như: date-time picker, auto-complete
input box, map, gallery, và tab sheet.
Tham khảo để biết chi
tiết.
3.3 Giới thiệu về các kiểu Layout
Layout Manager (thường được gọi là layout) là mở rộng của lớp ViewGroup, được
thiết kế để điều chỉnh vị trí của các control trên màn hình ứng dụng. Layout có thể lồng
nhau để tạo nên các giao diện phức tạp.
Android có một số các layout đơn giản giúp xây dựng UI. Việc kết hợp các layout
để tạo nên một bố cục hợp lý thì tùy thuộc vào người thiết kế.
Các lớp layout cơ bản:
• FrameLayout: đơn giản nhất trong Layout Manager, FrameLayout đặt mỗi View
con vào góc trái trên của màn hình. Việc thêm nhiều control sẽ chồng một cái mới lên
trên cái trước đó.
• LinearLayout: Một LinearLayout thêm mỗi View theo một đường thẳng, theo
chiều dọc hoặc ngang. Một layout theo chiều dọc sẽ có một control trên một dòng, trong
khi layout theo chiều ngang chỉ có một dòng cho nhiều View. Nó cho phép bạn chỉ định
giá trị “weight” cho mỗi View con để điều chỉnh kích thước bên trong không gian cho
phép.
• RelativeLayout: Sử dụng RelativLayout bạn có thể định vị trí cho các View cân
xứng với các control khác cũng như với đường biên của màn hình.
• TableLayout: giúp bố trí các View theo một lưới có các dòng và các cột. Các cột
có thể được thiết lập để co lại hoặc giản ra.
• AbsoluteLayout: Trong một AbsoluteLayout, vị trí mỗi View sẽ là tọa độ tuyệt
đối. Sử dụng lớp này sẽ đảm bảo bố cục chính xác cho các thành phần. Khi dùng
AbsoluteLayout không thể có được sự linh hoạt đối với các màn hình có kích thước khác
nhau.
Để có chi tiết đầy đủ về các layout trên, tham khảo tại:
/>Sử dụng Layout

Page 21

×