Đây là bộ đồ án mình làm về chủ đề: Tìm hiểu về hệ điều hành android và xây dựng ứng dụng nghe nhạc cho android. Bài đồ án được đánh giá 9 điểm trong buổi bảo vệ... Have fun !!!
Trang 1Nhận xét của giáo viên hướng dẫn
Nhận xét của giáo viên phản biện 1
Trang 2
Nhận xét của giáo viên phản biện 2
Trang 3
LỜI CẢM ƠN
Trang 4MỤC LỤC
Trang 5ĐỒ Á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
Trang 6Android – hệ điều hành cho điện thoại di động được phát triển bởi Googlengà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)
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ấpmộ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ênkhô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 ứngdụ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ự ramắ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
Trang 7minh 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 độngtrong 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épApache
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ìmkiế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ụngmớ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ụngAndroid SDK
- 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ụngcủ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
Trang 8Android 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
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
Trang 9Mộ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:
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
Activity Manager
Gói api lõi, chứa các class cấp thấp như containers, string formatters, XML parsing
Trang 11android.webkit
Activity Manager
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:
Intermittent Activity
Activity Manager
Ứ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
Dưới đây là một số lưu { khi xây dựng ứng dụng thuộc 3 loại trên:
Trang 12đượ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ìnhtrạ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
có đuôi apk là file ứng dụng của Android )
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/
Activity Manager
Chứa toàn bộ source code (file java hoặc aidl)
Trang 14khô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)
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:
Trang 15<manifest xmlns:android="http://schemas.android.com/apk/res/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>
Activity Manager
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
<service android:enabled="true" android:name=".MyService">
</service>
<uses-permission>
Activity Manager
Trang 16Quy đị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ềunà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 ý
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
Trang 17ngườ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ộtactivity khác
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()
Activity Manager
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()
Activity Manager
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)
Trang 18Có 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
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ế giaodiệ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:
Trang 19Có nhiều thuộc tính bạn có thể đưa vào <activity> chẳng hạn như: label, icon, hay theme.
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);
Trang 20Tuy 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);
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,
Trang 21Bạ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 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:
“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
Activity Manager
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ấtngờ ả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:
Trang 22public class ExampleActivity extends Activity {
onResume()
Activity Manager
Trang 23Chỉ đượ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()
onStop()
Activity Manager
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()
Activity Manager
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
Trang 24Sơ đồ minh hoạ vòng đời Activity
PHẦN 2: CÁC CÀI ĐẶT CẦN THIẾT CHO
LẬP TRÌNH ANDROID
Trang 25+ 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:
http://developer.android.com/sdk
Sau khi tải về,chúng ta bắt đầu cài đặt như sau:
Double-click vào biểu tượng SDK sau khi đã tải về để cài đặt
Trang 26Cử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.
Trang 271 cửa sổ hiện ra,có 2 tuỳ chọn
- Install for anyone using this computer: cài đặt cho bất kỳ ai sử dụng máy
tính này
- Install just for me: Cài đặt cho riêng bạn sử dụng.
Lựa chọn xong,chúng ta chọn Next.
Trang 28Chọn nơi lưu cài đặt,nếu muốn lưu ở vị trí khác,ta chọn Browse.
Rồi chọn Next.
Chọn tên thư mục hiển thị trong Start,sau đó bấm Install để tiếp tục cài đặt.
Trang 29Cài đặt sẽ chạy trong vài phút, xong ta chọn Next
Một cửa sổ hiện ra,ta chọn Finish để hoàn tất cài đặt.
- Sau khi cài đặt,ta khởi động SDK Manager:
Vào Start - All Program – Android SDK Tools – SDK Manager
Trang 30Ta tiến hành cài đặt gói SDK chính(phiên bản mới nhất là Android 4.1.2).Đánh
dấu vào Android 4.1.2 và chọn Install packages.
Chọn Install
Trang 31Cài đặt sẽ download các file cần thiết về(ta cần có kết nối Internet),quá trình này lâu hay chậm tuỳ thuộc vào tốc độ download của mạng.
- Sau khi cài đặt xong,ta vào ADV Manager
Chúng ta vào ADV Manager để tạo ra 1 thiết bị chạy Android ảo ADV là 1 máy
ảo với cấu hình phần cứng tuỳ chỉnh,nơi có thể chạy Android cũng như các ứng dụng trên Android
Trang 32Vào Start – All Program – Android SDK Tools – ADV Manager
Cửa sổ hiện ra,chọn New…
- Name :Gõ tên của thiết bị
- Target: chọn nền tảng mà ta muốn thiết bị sẽ chạy(ở trên ta vừa cài SDK
Platform Android 4.1.2,nên ở đây ta chọn Android 4.1.2)
Trang 33- CPU/ABI: ta chọn AMR
- Còn những mục khác ta có thể để mặc định
Sau đó chọn Create ADV
Cửa sổ hiện lên báo kết quả của việc cài đặt và các thông số ta vừa lựa chọn
Ta bấm OK để tiếp tục
Sau khi tạo xong ADV,ta sẽ thấy tên của ADV xuất hiện trong danh sách.Ta
chọn vào ADV đó và chọn Start…
Trang 34Chọn Launch để tiếp tục.
Cài đặt bắt đầu trình giả lập cho thiết bị
Trang 35Cửa sổ này hiện ra nghĩa là ta đã cài đặt thành công cho thiết bị.
CÀI ĐẶT ADT PLUG-IN CHO ECLIPSE
Trước khi cài đặt ADT,Eclipse phải được cài đặt sẵn.Chúng ta download eclipse ở trang web: http://www.eclipse.org/downloads
Sau khi tải về,thư mục Eclipse sẽ có các mục như trên,chúng ta chọn file :
eclipse