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

ĐỒ ÁN TỐT NGHIỆP XÂY DỰNG ỨNG DỤNG NGHE NHẠC CHO ANDROID FULL

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 (2.9 MB, 72 trang )

Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Nhận xét của giáo viên hướng dẫn






















1
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Nhận xét của giáo viên phản biện 1























2
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Nhận xét của giáo viên phản biện 2






















3
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
LỜI CẢM ƠN
4
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
MỤC LỤC
5
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
ĐỒ ÁN TỐT NGHIỆP
TÌM HIỂU VỀ LẬP TRÌNH ANDROID VÀ XÂY DỰNG
ỨNG DỤNG NGHE NHẠC TRÊN ANDROID
PHẦN 1: TÌM HIỂU VỀ LẬP TRÌNH ANDROID

I. Giới thiệu
Android – hệ điều hành cho điện thoại di động được phát triển bởi Google
ngày càng trở nên phổ biến với việc các hãng điện thoại liên tục ra mắt các mẫu
điện thoại sử dụng Android.
Giao diện màn hình khoá(Android 2.3)
Giao diện màn hình chính(Android 2.3)
6
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Android được xây dựng trên nhân Linux và được phân phối miễn phí.
Không giống như Windows Mobile và Apple Iphone, tuy cả hai đều cung cấp
một môi trường phát triển ứng dụng phong phú và dễ tiếp cận nhưng luôn có sự
ưu tiên cho các ứng dụng mặc định có sẵn của hệ điều hành(native application).
Với Android, mọi ứng dụng đều được viết trên cùng một tập API, thế nên không
có sự phân biệt giữa các ứng dụng mặc định và các ứng dụng của bên thứ ba.
Người dùng hoàn toàn có thể thay thế mọi ứng dụng mặc định bằng các ứng
dụng yêu thích của mình, thậm chí ngay cả màn hành thực hiện cuộc gọi và
màn hình nhà (home screen).
Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java. Sự ra
mắt của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của liên
minh thiết bị cầm tay mã nguồn mở., bao gồm 78 công ty phần cứng, phần mềm
và viễn thông nhằm mục đích tạo nên một chuẩn mở cho điện thoại di động
trong tương lai.
Google cung cấp hầu hết các mã nguồn của Android theo bản cấp phép
Apache.
II. Các ứng dụng có sẵn trong Android
Một điện thoại Android thông thường sẽ đi kèm với một vài ứng dụng đã
được cài đặt sắn, bao gồm:
- Một trình email tương thích với Gmail.
- Chương trình quản lý tin nhắn SMS.

- Chương trình quản lý thông tin cá nhân, bao gồm cả lịch làm việc, danh bạ,
và được đồng bộ hoá với dịch vụ của Google.
- Phiên bản thu gọn của Google Map cho điện thoại, bao gồm StreetView, tìm
kiếm địa điểm, chỉ đường, tình trạng giao thông,…
- Trình duyệt web dựa trên nhân WebKit.
- Chương trình tán gẫu (chat).
- Trình đa phương tiện (chơi nhạc, xem ảnh,…).
- Android Marketplace – cho phép người dùng tải về và cài đặt các ứng dụng
mới.
- Tất cả các ứng dụng có sẵn đều được viết bằng ngôn ngữ Java và sử dụng
Android SDK.
7
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
- Các dữ liệu về thông tin người dùng được các ứng dụng có sẵn sử dụng – như
thông tin về danh bạ - vẫn hoàn toàn có thể được sử dụng bởi các ứng dụng
của bên thứ ba.
- Tương tự vậy, ứng dụng của bạn hoàn toàn có thể xử lý các sự kiện như có
cuộc gọi đến, nhận một tin nhắn mới,… thay cho các ứng dụng có sẵn.
III. Truy cập phân cứng
Android bao gồm thư viện các API giúp đơn giản hóa tối đa việc sử dụng phần
cứng của thiết bị. Điều đó đảm bảo rằng bạn không cần phải bận tâm nhiều đến
việc ứng dụng của mình có thể chạy như mong đợi trên nhiều thiết bị khác nhau
hay không, miễn là thiết bị đó có hỗ trợ Android.
Android SDK bao gồm các API cho phần cứng như: GPS, camera, kết nối
mạng, Wi-Fi, Bluetooth, con quay gia tốc, màn hình cảm ứng, quản l{ năng lượng,

IV. Dịch vụ chạy nền
Android hỗ trợ các ứng dụng và dịch vụ được thiết kể để chạy ẩn. Do kích
thước nhỏ của màn hình điện thoại nên tại một thời điểm chỉ có thể thấy được một

ứng dụng. Dịch vụ chạy nền giúp tạo ra các thành phần ứng dụng “vô hình” để
thực hiện tự động một tác vụ nào đó mà không cần phải có sự tương tác của người
dùng. Ví dụ như một dịch vụ chạy nền có chức năng chặn cuộc gọi đến đối với các
số điện thoại có trong “black list” chẳng hạn.
V. SQLite Database
Bởi vì tính chất nhỏ gọn và bị hạn chế về phần cứng của điện thoại di động, cho
nên đòi hỏi việc lưu trữ và truy xuất dữ liệu phải nhanh chóng và hiệu quả.
Android hỗ trợ hệ quản trị dữ liệu nhỏ gọn SQLite, và cung cấp cho ứng dụng các
API để thao tác. Mặc định mỗi ứng dụng đều được chạy trong sandbox - điều này
có nghĩa là nội dung của từng database ứng với từng ứng dụng chỉ có thể được truy
cập bằng chính ứng dụng đó. Tuy nhiên cũng có các cơ chế để ứng dụng có thể
chia sẽ, trao đổi các database với nhau.
8
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
VI. Hệ thống thông báo (Notifications)
Thông báo là cách thức tiêu chuẩn mà ở đó thiết bị báo cho người dùng đã có
một sự kiện nào đó xảy ra. Chẳng hạn như có cuộc gọi tới, máy sắp hết pin,… Sử
dụng các API bạn có thể cho ứng dụng của mình thông báo đến người dùng bằng
âm thanh, rung, hoặc thậm chí là cả đèn LED của thiết bị.
VII. Kiến trúc ứng dụng (Application Architecture)
Ý tưởng của Android đó là khuyến khích việc tái sử dụng lại các thành phần đã
có, cho phép ứng dụng của bạn có thể chia sẻ Activity, Service, Dữ liệu với các
ứng dụng khác trong giới hạn truy cập do bạn đặt ra.
Một ví dụ đơn giản: bạn cần làm một ứng dụng chụp ảnh hàn quốc, về cơ bản
ứng dụng này sẽ làm hai nhiệm vụ: một là chụp ảnh, hai là ghép, chỉnh sửa ảnh.
Thay vì phải tự xây dựng chức năng chụp ảnh, bạn sẽ sử dụng lại chức năng chụp
ảnh có sẵn trong ứng dụng chụp ảnh của Android. Việc này giúp bạn dễ dàng và
mau chóng xây dựng được những ứng dụng nhiều tính năng và sử dụng hiệu quả
tài nguyên máy.

Những dịch vụ dưới đây là nền tảng kiến trúc của mọi ứng dụng Android, đây là
khuôn khổ cho bạn xây dựng ứng dụng của riêng mình:
 Activity Manager
Kiểm soát vòng đời của Activity.

 Views
Xây dựng giao diện người dùng cho các Activity.

 Notification Manager
Cung cấp một cơ chế thống nhất và an toàn để ứng dụng có thể đưa ra
các thông
báo cho người dùng.

 Content Providers
Giúp cho việc trao đổi, chia sẽ dữ liệu giữa các ứng dụng với nhau.

 Resource Manager
9
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Hỗ trợ quản l{ các loại tài nguyên không là code (non-code resources)
như các chuỗi, hình ảnh, hoặc âm thanh,…
VIII. Các thư viện của Android
Android cung cấp các gói API để phát triển ứng dụng. Danh sách các gói core
API dưới đây giúp cho bạn có cái nhìn tổng quát về những gì được hỗ trợ sẵn, tất
cả các thiết bị chạy Android đều phải hỗ trợ được tối thiểu các API này.
 android.util
Gói api lõi, chứa các class cấp thấp như containers, string formatters,
XML parsing.
 android.os

Truy cập tới các chức năng của hệ điều hành chẳng hạn như: gửi nhận
tin nhắn, giao tiếp nội bộ giữa các ứng dụng, thời gian,…
 android.graphics
Cung cấp các lớp liên quan tới xử l{ đồ họa ở mức thấp. Hỗ trợ các
hàm cơ bản như vẽ điểm, vẽ miền, tô màu,… trên một khung canvas.
 android.text
Cung cấp các hàm phân tích và xử lý chuỗi.
 android.database
Cung cấp các lớp cấp thấp cần thiết để làm việc với databases.
 android.content
Dùng để quản lý các tài nguyên, các nội dung, và các gói.
 android.view
Views là lớp cha của mọi lớp giao diện người dùng.
 android.widget
Được kế thừa từ lớp View, bao gồm các lớp để cơ bản để xây dựng
giao diện widget như: lists, buttons, layouts.
 android.maps
Gói API cấp cao, dùng để truy cập đến các chức năng của
GoogleMap.
10
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
 android.app
Gói API cấp cao, bao gồm lớp Activity và Service - hai lớp cơ sở cho
mọi ứng dụng Android.
 android.telephony
Cung cấp cho bạn khả năng tương tác trực tiếp với các chức năng cơ
bản của một chiếc điện thoại như nghe, gọi, tin nhắn.

 android.webkit

Cung cấp một WebView control trên nền webkit để có thể nhúng vào
ứng dụng, cùng với các api điều khiển cơ bản như stop, refresh, cookie
manager,…
IX. Ba ứng dụng trong Android
Hầu hết các ứng dụng trong Android sẽ thuộc vào một trong ba loại sau đây:
 Foreground Activity
Ứng dụng hữu dụng chỉ khi nó được tương tác với người dùng ở mặt
tiền
(foreground), ứng dụng mất tác dụng khi bị ẩn đi. Game, bản đồ, từ điển
là các ví dụ điển hình.

 Background Service
Ứng dụng không đòi hỏi nhiều đến tương tác của người dùng. Trừ khi
được cấu hình, còn phần lớn thời gian là ứng dụng chạy ngầm. Ví dụ
thuộc loại này chẳng hạn như: ứng dụng trả lời tin nhắn tự động.

 Intermittent Activity
Ứng dụng loại này vừa nhận tương tác của người dùng, và vẫn có thể
tiếp tục hoạt động ngầm khi bị ẩn đi. Có thể đưa ra các thông báo cho
người dùng khi cần thiết trong lúc đang bị ẩn. Các ứng dụng loại này có
thể kể đến như: ứng dụng nghe nhạc, ứng dụng tán gẫu (chat),…

Đối với các ứng dụng lớn và phức tạp, khó để có thể cho vào một loại duy
nhất, và thường thì các ứng dụng này bao gồm có khi cả 3 loại trên. Điều quan
trọng là khi bạn xây dựng ứng dụng cho mình hãy chú { đến 3 loại trên để đưa ra
thiết kế phù hợp.
11
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Dưới đây là một số lưu { khi xây dựng ứng dụng thuộc 3 loại trên:

Foreground Activities
Khi xây dựng ứng dụng loại này cần phải xem xét cẩn thận về chu kì sống
của Activity (Activity life cycle) để có thể tạo sự chuyển đổi thông suốt và mượt
mà giữa trạng thái foreground và background. Vì ứng dụng không tự nó kiểm soát
được chu kz sống, nên điều này đồng nghĩa với việc bạn cần phải lưu lại trạng thái
của ứng dụng trước khi nó chuyển từ foreground sang background, và trả lại trạng
thái phù hợp trong trường hợp ngược lại.
Background Services
Với ứng dụng loại này, cần chú { là nó sẽ cần rất ít các tương tác trực của
người dùng, có khi hoàn toàn không cần. Thay vào đó ứng dụng sẽ lắng nghe các
thông điệp, sự kiện phát sinh bởi hệ thống, phần cứng, hoặc từ các ứng dụng khác.
Bạn có thể tạo ra một ứng dụng hoàn toàn “vô hình”, nhưng tốt hơn là nên
cung cấp một giao diện cơ bản để người dùng có thể hiệu chỉnh các thiết lập, dừng
hoặc thoát hoàn toàn ứng dụng. Intermittent Activities
Ứng dụng loại này là sự kết hợp giữa một Foreground Activities và một
Background Service, vậy nên điều cơ bản là ứng dụng cần phải nhận biết được tình
trạng hiện tại của mình (foreground/background) để đưa ra các xử lý phù hợp.
Cũng nên lưu ý đến việc gởi các thông báo (có thể thông qua hệ thống
notification của Android) đến người dùng khi ứng dụng đang chạy ngầm vào
những lúc cần thiết.
X. CÁC THÀNH PHẦN TRONG MỘT ỨNG DỤNG ANDROID
1. Android Project
Android project là một hệ thống thư mục và file chứa toàn bộ source code, tài
nguyên,… mà mục đích cuối cùng là để đóng gói thành một file .apk duy nhất (file
có đuôi .apk là file ứng dụng của Android ).
12
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Trong một thư mục project, có một số thành phần (file, thư mục con) được tạo
ra mặc định, còn lại phần lớn thì sẽ được tạo ra sau nếu cần trong quá trình phát

triển ứng dụng. Dưới đây liệt kê cấu trúc đầy đủ của một thư mục project:
 src/
Chứa toàn bộ source code (file .java hoặc .aidl)

 bin/
Thư mục chức file Output sau khi build. Đây là nơi bạn có thể tìm file
.apk.

 gen/
Chứa các file .java tạo ra bởi ADT plug-in, như là file R.java hoặc các
giao diện tạo ra từ file AIDL.

 res/
Chứa các tài nguyên (resources) cho ứng dụng, chẳng hạn như file
hình ảnh, file layout, các chuỗi (string),… Dưới đây là các thư mục con của
nó:

 anim/
Chứa các file .xml dùng cho việc thiết lập các hiệu ứng động
(animation)

 color/
Chứa các file .xml dùng định nghĩa màu sắc.

 drawable/
Chứa file hình ảnh (png, jpeg, gif), file .xml định nghĩa cách vẽ các
loại hình dạng khác nhau (shape).

 layout/
Chứa file .xml dùng để dựng giao diện người dùng.


 menu/
Chứa file .xml quy định application menu.

 raw/
Chứa các file media, chẳng hạn như .mp3 hay .ogg
13
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin

 values/
Chứa file .xml định nghĩa các giá trị. Khác với các resource trong các
thư mục khác, resource ở thư mục này khi được định danh trong lớp R thì sẽ
không sử dụng file name để định danh, mà sẽ được định danh theo quy định
bên trong file .xml đó (xem thêm về lớp R ở phần sau)

 xml/
Dùng chứa các file .xml linh tinh khác, chẳng hạn như file xml quy
định app widget, search metadata,…

 libs/
Chứa các thư viện riêng.

 AndroidManifest.xml/
File kiểm soát cách các thành phần trong ứng dụng (activity, service,
intent receiver,…) tương tác với nhau, cách ứng dụng tương tác với các ứng
dụng khác, cũng như đăng ký các quyền hạn về sử dụng tài nguyên trong
máy.

 build.properties

Tùy chỉnh các thiết lập cho hệ thống build, nếu bạn sử dụng Eclipse
thì file này không cần thiết.

 build.xml
Chỉ sử dụng khi bạn dùng dòng lệnh (command line) để kiến tạo
project.

 default.properties
File này chứa các thiết lập cho project, chẳng hạn như build target,
min SDK version,… tốt hơn hết là không nên chỉnh sửa file này bằng tay.
2. Android Manifest
Mỗi một Android project thì luôn phải có một file AndroidManifest.xml
(xem bên trên). Manifest dùng để định nghĩa cấu trúc cũng như các metadata
của ứng dụng và các thành phần con. Manifest bắt đầu bằng thẻ root <manifest>
với thuộc tính package để quy ước package của project và thuộc tính
14
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
xmlns:android như là một quy định để chuẩn hóa cấu trúc file manifest. Dưới
đây là một file Manifest điển hình:
<manifest xmlns:android="
package="com.my_domain.my_app" >
[ manifest nodes ]
</manifest>
Manifest bao gồm nhiều thẻ định nghĩa các thành phần của ứng dụng, các
thiết lập về bảo mật, các lớp test,… Dưới đây là danh sách các thẻ có thể xuất hiện
trong file manifest:

 <application>
Một file manifest chỉ có thể chứa một thẻ application. Thẻ này dùng

để chỉ định các metadata (bao gồm title, icon, theme,…) và các thành phần
cho ứng dụng. Nó đồng thời cũng là thẻ cha của các thẻ Activity, Service,
Content Provider, và Broadcast Receiver.
<application android:icon="@drawable/icon"
android:theme="@style/my_theme"
android:title="@string/app_name" >
[ application nodes ]
</application>
 <activity>
Thẻ activity được yêu cầu cho mỗi một Activity trong ứng dụng. Sử
dụng thuộc tính android:name để chỉ định tên của lớp Activity tương ứng.
<activity android:name=".MyActivity"></activity>
 <service>
Cũng như activity, thẻ service được yêu cầu cho mỗi một Service
trong ứng dụng. Sử dụng thuộc tính android:name để chỉ định tên của lớp
Service tương ứng. Sử dụng thuộc tính android:enabled để chỉ định trạng
thái mặc định của Service.
<service android:enabled="true" android:name=".MyService">
</service>
 <uses-permission>
15
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Quy định các quyền hạn mà ứng dụng muốn sử dụng trên hệ thống.
Và người dùng sẽ phải xác nhận các quyền này trong khi cài ứng dụng. Điều
này đảm bảo cho việc ứng dụng không thể toàn { sử dụng các tài nguyên của
hệ thống (tin nhắn, danh bạ, thông tin cá nhân, camera, định vị, mạng,…).
Đây là một điểm bảo mật cần lưu ý.
<uses-permission
android:name="android.permission.ACCESS_LOCATION">

</uses-permission>
 <instrumentation>
Được yêu cầu cho mỗi một lớp Test bạn tạo ra trong ứng dụng. Lớp
Test cung cấp những khả năng để bạn có thể kiểm tra các Activity và
Service, giám sát chúng và xem cách chúng 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" >
</instrumentation>

Eclipse sẽ tự động tạo ra một file Manifest bao gồm lớp Activity mặc định khi
bạn tạo mới một Android Project (xem lại chương 2, mục tạo mới một Android
Project)
3. Activity
Activity là thành phần ứng dụng cung cấp một màn hình tương tác cho người sử
dụng nhằm thực hiện một thao tác nào đó chẳng hạn như gọi điện thoại, chụp ảnh,
gửi email hay xem bản đồ. Mỗi activity chạy trong một cửa sổ hiển thị trên giao
diện của người sử dụng. Cửa sổ có thể hiển thị toàn màn hình hoặc nhỏ hơn màn
hình và nổi phía trên các cửa sổ khác.
Một ứng dụng thường bao gồm nhiều activitiy liên kết với nhau. Thông thường
thường một activity của ứng dụng đóng vai trò activity chính và được hiển thị cho
người sử dụng trong lần đầu tiên chạy ứng dụng. Mỗi activity có thể khởi chạy một
activity khác.
16
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Mỗi lần một activity mới được khởi động thì activity trước đó sẽ bị dừng lại
nhưng hệ thống vẫn sắp nó vào stack (tên là “Back stack”). Khi một activity mới

khởi động, nó được xếp phía trên cùng trong khối stack và được focus. “Back
stack” hoạt động theo trình tự “vào sau, ra trước”, cho nên khi người sử dụng đã
thao tác xong với activity hiện tại và nhấn “BACK”, chương trình sẽ “pop” ra từ
stack activity liền trước và activity đó sẽ tiếp tục hoạt động trở lại.
Có nhiều phương thức callback mà một activity có thể nhận được khi có sự thay
đổi trạng thái (khởi tạo, dừng, resume hoặc hủy) và bạn có thể thực hiện một thao
tác tương ứng với sự thay đổi trạng thái. Chẳng hạn khi bị dừng lại thì activity sẽ
phải giải phóng bộ nhớ, đóng truy cập database,… Khi được khởi động lại bạn có
thể truy cập những dữ liệu cần thiết và resume các thao tác bị gián đoạn trước đó.
Những sự chuyển đổi về trạng thái này hợp thành vòng đời của một activity.
Tạo một Activity
Để tạo một activity, bạn phải tạo một subclass cho Activity (hoặc cho chính nó).
Trong subclass, bạn cần phải xác định cách thức callback mà hệ thống sẽ sử dụng
khi có sự chuyển đổi trạng thái của activity chẳng hạn như khi activity được tạo,
dừng lại, resume hoặc bị hủy. Có 2 phương thức callback quan trọng:
 onCreate()
Bạn cần phải hiện thực hóa phương thức này, vì hệ thống sẽ gọi tới method
này mỗi khi activity được khởi động. Và quan trọng, đây chính là nơi cần
gọi phương thức setContentView() để xác định bố cục cho giao diện người
dùng.

 onPause()
Hệ thống sẽ gọi tới phương thức này khi người dùng rời khỏi ứng dụng (nó
không đồng nghĩa với việc activity sẽ bị hủy). Đây là nơi bạn sẽ thực hiện
lưu lại trạng thái, hoặc không làm gì cả (vì người dùng có thể không trở lại).
Có một số phương thức bạn có thể sử dụng để kiểm soát vòng đời của
activity trước những sự gián đoạn không mong muốn dẫn đến activity bị
dừng lại, thậm chí bị hủy bỏ. Những phương thức này sẽ được nói tới trong
phần Kiểm soát vòng đời Activity
17

Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin

Triển khai một giao diện người dùng
Mỗi giao diện của một activity là tập hợp của các View (các đối tượng của
lớp kế thừa từ lớp View). Mỗi đối tượng View kiểm soát một vùng riêng trong
vùng màn hình và có thể phản ứng lại với tương tác của người dùng. Ví dụ View có
thể là một button và có thể thực hiện một hành động nào đó khi người dùng chạm
vào nó. Android cung cấp một số các lớp View sẵn để bạn có thể sử dụng vào
layout của mình. “Widget” là một view đặc biệt, dùng để hiển thị ngoài màn hình
chính, bao gồm: button, text field, checkbox, hoặc đơn giản chỉ là image. “Layout”
là view kế thừa từ ViewGroup, nó cung cấp một khuôn mẫu cách bố trí các view
bên trong nó, chẳng hạn như: linear layout, grid layout, relative layout. Bạn có thể
tạo cho riêng mình các View hay ViewGroup để áp dụng vào giao diện của bạn.
Cách thông thường nhất để định nghĩa một layout đó là sử dụng file XML lưu
trong thư mục resource của ứng dụng. Với cách này bạn có thể duy trì thiết kế giao
diện tách bạch với source code. Bạn có thể set layout này làm giao diện của
activity bằng phương thức setContentView(), truyền vào tham số là ID của layout
đó thông qua lớp R. Tất nhiên bạn cũng có thể tạo giao diện trực tiếp bằng code.
Khai báo Activity trong file Manifest
Bạn cần phải khai báo rõ ràng một activity trong file manifest thì activity đó mới
có thể hoạt động được. Để khai báo Activity ta dùng thẻ <activity> là thẻ con của
<application>. Tương tự như sau:
<manifest >
<application >
<activity android:name=".ExampleActivity" />

</application>
</manifest>
Có nhiều thuộc tính bạn có thể đưa vào <activity> chẳng hạn như: label, icon, hay

theme.
Sử dụng intent filters
18
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Một thẻ <activity> có thể chứa đựng nhiều thẻ <intent-filter>. Thẻ này dùng để xác
định những thành phần nào của ứng dụng có thể kích hoạt, và sử dụng Activitynày.
<activity android:name=".ExampleActivity"
android:icon="@drawable/app_icon">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Thẻ <action> chỉ định đây là Activity chính của ứng dụng (sẽ được chạy mặc
định).
Thẻ <category> chỉ định Activity này sẽ được liệt kê trong danh sách ứng dụng của
hệ thống (để người dùng có thể chạy activity này). Nếu bạn muốn ứng dụng của
bạn bảo mật và không cho phép bất cứ ứng dụng nào khác có thể kích hoạt Activity
này thì bạn không cần thêm bất kz <intent-filter> nào nữa, chỉ cần như trên là đủ.
Khi bạn tạo một Android Project mới thì Eclipse đã tự định ra khai báo Activity
với Intent-filter như trên.
Bắt đầu một Activity
Bạn có thể bắt đầu một Activity khác trong activity đang chạy bằng phương thức
startActivity(), truyền vào tham số là một Intent quy định rõ Activity nào bạn muốn
bắt đầu và sẽ thực hiện hành động cụ thể nào (hệ thống sẽ chọn ra Activity chính
xác cho bạn, nó có thể thuộc một ứng dụng khác).
Ví dụ sau đây bắt đầu một Activity có tên SingInActivity:
Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

Tuy nhiên ứng dụng của bạn khi muốn bắt đầu một Activity mà ứng dụng không có
sẵn, chẳng hạn như gửi email, sms, gọi điện,… Trong trường hợp này ứng dụng sẽ
cần gọi đến các Activity được cung cấp sẵn trên hệ thống, đây là một điểm rất hữu
ích của Android. Ví dụ bạn cần thực hiện thao tác gởi email, bạn làm như sau:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
19
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
startActivity(intent);
Khi thực hiện đoạn mã này thì Activity gởi email của hệ thống sẽ khởi động,
Activity của bạn sẽ ẩn đi. Sau khi người dùng gởi email xong, Activity của bạn sẽ
được resume.
Bắt đầu một Activity và kết quả trả về
Đôi khi bạn muốn nhận được kết quả trả về sau khi chạy một Activity nào đó.
Trong trường hợp này, bạn sử dụng phương thức startActivityForResult() thay vì
startActivity(), sau đó để nhận được kết quả trả về ở Activity kế tiếp, bạn sử dụng
phương thức onActivityResult(). Kết quả được truyền đi là một Intent.
Như ví dụ sau, bạn bắt đầu một Activity cho phép chọn một số trong danh bạ, sau
đó nhận kết quả tại Activity của mình:
private void pickContact() {
Intent intent = new Intent(Intent.ACTION_PICK,
Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == Activity.RESULT_OK &&

requestCode == PICK_CONTACT_REQUEST) {
// code xử lý
}
}
Kết thúc một Activity
Bạn có thể kết thúc một Activity bằng cách gọi phương thức finish(). Bạn cũng có
thể kết thúc một Activity riêng biệt mà trước đó bạn đã khởi động bằng phương
thức finishActivity().
Chú ý: trong hầu hết trường hợp bạn không nên dùng cách này để kết thúc một
Activity, vì hệ thống Android sẽ làm nhiệm vụ này cho bạn. Khi dùng cách này
20
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
cũng có thể sẽ ảnh hưởng đến trải nghiệm của người dùng khi tương tác với ứng
dụng.
Kiểm soát vòng đời Activity
Việc kiểm soát này rất quan trọng để có thể xây dựng được một ứng dụng linh hoạt
và mạnh mẽ. Một Activity có thể tồn tại ba trạng thái cơ bản sau:
 Resumed
Khi Activity đang trong foreground hoặc được focus (trạng thái này
cũng có thể được gọi là "running").

 Paused
Khi Activity mặc dù đang trong foreground, tuy nhiên vẫn đang bị ẩn.
Tại vì có một Activity khác đang được kích hoạt và nằm trên cùng như là:
menu, message box,… Tất nhiên lúc này Activity đang “paused” vẫn còn
“sống” (activity vẫn còn được lưu trong bộ nhớ) tuy nhiên activity này có
thể bị kết thúc bởi hệ thống khi bộ nhớ đã cạn kiệt.

 Stopped

Khi Activity hoàn toàn bị che đi bởi một Activity khác (hay nói cách
khác là Activity này đang nằm trong “background”). Một Stopped Activity
thì vẫn còn “sống”, tuy nhiên nó không còn hiển thị cho người dùng sử dụng
và có thể bị kết thúc bất cứ lúc nào bởi hệ thống.
Các phương thức tương ứng trong vòng đời Activity
Vòng đời của một Activity không phải do Activity kiểm soát, mà nó sẽ do hệ
thống kiểm soát, vì trong lúc thực thi activity, sẽ có những tình huống xảy ra bất
ngờ ảnh hưởng đến Activity.
Ứng với mỗi hình huống xảy ra, hệ thống sẽ có một lời gọi tương ứng kiểu
như sau:
public class ExampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Code xử lý
}
21
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
@Override
protected void onStart() {
super.onStart();
// Code xử lý
}
@Override
protected void onDestroy() {
super.onDestroy();
// Code xử lý
}
// và còn các phương thức khác

}
Dưới đây là danh sách các phương thức có thể được gọi cùng với giải thích cụ thể:
 onCreate()
Gọi khi Activity lần đầu tiên được tạo. Đây là nơi bạn thực hiện mọi
các khai báo cũng như thiết lập giao diện. Luôn được theo sau bởi phương
thức onStart().

 onRestart()
Gọi khi Activity đang ở trạng thái Stopped và được kích hoạt lại.
Luôn được theo sau bởi phương thức onStart().

 onStart()
Gọi khi Activity “restart” và đã sẵn sàng, nhưng chưa chưa hiện ra với
người dùng. Được theo sau bởi phương thức onResume() nếu Activity đi ra
foreground, hoặc onStop() nếu nó ẩn đi.

 onResume()
Chỉ được gọi khi Activity bắt đầu các tương tác với người dùng.
Luôn được theo sau bởi phương thức onPause().
 onPause()
Gọi trước khi Activity bắt đầu vào trạng thái “paused”. Trong phương
thức này ta thường sẽ giải phóng bộ nhớ, hoặc dừng các hành động nào đó
có thể chiếm dụng nhiều ram, cpu để cho Activity được kích hoạt tiếp theo
làm việc trơn tru. Theo sau bởi phương thức onResume() nếu Activity được
kích hoạt lại (quay về foreground), hoặc onStop() nếu nó ẩn đi.
22
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin

 onStop()

Gọi khi Activity không còn được sử dụng nữa. Nó có thể sẽ bị hủy bỏ,
hoặc có thể sẽ lại được kích hoạt lại từ một Activity khác. Theo sau bởi
onRestart() nếu nó được kích hoạt lại, hoặc onDestroy() nếu nó bị hủy bỏ
bởi hệ thống.
 onDestroy()
Gọi trước khi Activity thật sự bị hủy bỏ, đây là lời gọi cuối cùng mà
Activity có thể thực hiện. Phương thức này có thể được gọi bởi vì ở đâu đó
có lời gọi finish() hoặc finishActivity(), cũng có thể vì hệ thống cần phải hủy
bỏ để giải phóng bộ nhớ. Không được theo sau bởi phương thức nào.
Sơ đồ minh hoạ vòng đời Activity
23
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
PHẦN 2: CÁC CÀI ĐẶT CẦN THIẾT CHO
LẬP TRÌNH ANDROID
I. CÀI ĐẶT
- Trước khi xây dựng được ứng dụng nghe nhạc,ta cần phải hoàn thành các cài
đặt sau:
+ Java Development Kit(JDK)
+ Android SDK
+ Eclipse với ADT plug-in
Tải và cài đặt Android SDK
Để tải về và cài đặt,chúng ta truy cập vào trang web:
/>Sau khi tải về,chúng ta bắt đầu cài đặt như sau:
24
Trường Đại học Sư Phạm Kỹ Thuật Hưng Yên
Khoa : Công nghệ thông tin
Double-click vào biểu tượng SDK sau khi đã tải về để cài đặt.
Cửa sổ hiện ra,chọn Next để cài đặt.
Cài đặt sẽ tự động tìm xem trong máy đã cài đặt Java Development Kit(JDK)

chưa,nếu chưa sẽ tự động tải về và cài đặt,nếu trong máy đã có ta chọn Next.
25

×