Khái niệm Android 1.1.1Tổng quan về lập trình cho thiết bị di động Người lập trình ứng dụng cho thiết bị di động truyền thống luôn luôn phải nhớ trong đầu nguyên tắc "tiết kiệm tối đa
Trang 1LỜI CẢM ƠN Sau một thời gian tìm hiểu đề tài “Xây dựng ứng nghe nhạc trực tuyến trên hệ điều hành Android”, em đã hoàn thành tiến độ dự kiến Để đạt được
kết quả này, em đã nỗ lực thực hiện và đồng thời cũng nhận được rất nhiều sự giúp đỡ, quan tâm, ủng hộ của các thầy cô bạn bè và gia đình
Em xin chân thành cảm ơn giáo viên hướng dẫn: Th.S Hoàng Thị Cành
– Bộ môn Công nghệ phần mềm – Trường Đại học Công nghệ thông tin và truyền thông – Đại học Thái Nguyên đã tận tình giúp đỡ em hoàn thành đồ án tốt nghiệp này
Em xin chân thành cảm ơn 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 đã nhiệt tình giảng dạy và truyền đạt kiến thức quý báu và bổ ích trong suốt quá trình em học tập tại trường
Em xin chân thành cảm ơn các thầy, cô giáo viên thuộc bộ môn Công nghệ phần mềm đã trang bị cho em những kiến thức chuyên ngành rất hữu ích
để em hoàn thành đề tài và phục vụ cho công việc của em sau này
Vì thời gian có hạn nên không thể tránh khỏi những thiếu sót, em rất mong nhận được sự đóng góp ý kiến từ thầy cô và các bạn Em xin chân thành cảm ơn!
Trang 2LỜI CAM ĐOAN
Em xin cam đoan đồ án tự em nghiên cứu và xây dựng dựa trên các kiến thức được học trên trường và kinh nghiệm đi làm thực Cùng sự hướng dẫn của Ths Hoàng Thị Cành Các nội dung nghiên cứu, kết quả trong đề tài này là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây Những kiến thức tài liệu tham khảo được ghi rõ trong mục tài liệu tham khảo Nếu phát hiện có bất kỳ sự gian lận nào em xin hoàn toàn chịu trách nhiệm về nội dung luận văn của mình Trường đại học CNTT& TT không liên quan đến những vi phạm tác quyền, bản quyền do em gây ra trong quá trình thực hiện (nếu có)
Thái nguyên, ngày tháng 6 năm 2016
Sinh viên thực hiện
Nguyễn Anh Tú
Trang 3MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỤC LỤC 3
DANH MỤC HÌNH 5
LỜI NÓI ĐẦU 6
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 7
1.1 Khái niệm Android 7
1.2 Kiến trúc Android 10
1.2.1 Applications 10
1.2.2 Application Framework 11
1.2.3 Libraries 12
1.2.4 Android Runtime 12
1.2.5 Linux kernel 13
1.3 Lịch sử phát triển của Android qua các phiên bản 14
1.4 Phát triển ứng dụng trên Android 22
1.4.1 Ngôn ngữ lập trình 22
1.4.2 Môi trường lập trình cho Android 23
1.4.3 File AndroidManifest.xml 24
1.5 Các thành phần cơ bản của ứng dụng Android 27
1.5.1 Activity 27
1.5.2 Intent 29
1.5.3 Service 31
1.6 Multimedia Player trong Android 35
1.7 Giới thiệu về gói android.media 37
1.8 Giới thiệu class android.media.mediaplayer 39
Trang 4CHƯƠNG 2: KHẢO SÁT, PHÂN TÍCH THIẾT KẾ HỆ THỐNG 48
2.1 Phân tích yêu cầu đề tài 48
2.1.1 Tóm tắt yêu cầu 48
2.1.2 Nội dung 48
2.1.3 Mục tiêu 48
2.2 Khảo sát hiện trạng 48
2.2.1 Các ứng dụng hiện có 48
2.3 Phân tích hệ thống 51
2.3.1 Biểu đồ Use Case 53
2.3.2 Biểu đồ trình tự 55
2.3.3 Biểu đồ cộng tác 57
2.3.4 Biểu đồ lớp 59
2.3.5 Biểu đồ hoạt động 60
CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH NGHE NHẠC ONLINE 61
TRÊN HỆ ĐIỀU HÀNH ANDROID 61
3.1 Demo giao diện chương trình 61
3.2 Giao diện nghe nhạc 62
3.3 Giao diện download 63
3.4 Giao diện tùy chỉnh stereo 64
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 65
TÀI LIỆU THAM KHẢO 66
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 67
Trang 5DANH MỤC HÌNH
Hình 1.1 Kiếntrúc Android 10
Hình 1.2 Mô hình hợp tác giữa máy ảo Dalvik và Navite code 13
Hình 1.3 Biểu đồ so sánh tốc độ của máy ảo Java giữa các phiên bản Android 22 Hình 1.4 Cấu trúc thư mục và file của một dự án Android trên eclipse 23
Hình 1.5 Khai báo tag <activity> trong file AndroidManifest.xml 28
Hình 1.6 Sử dụng Intent để trao đổi thông tin giữa hai chương trình 30
Hình 1.7 Lược đồ vòng đời của 1 Service 32
Hình 1.8 Lược đồ vòng đời của 1 activity 34
Hình 2.1 Biểu đồ Use Case tổng quan 53
Hình 2.2 Biểu đồ Use Case chức năng nghe nhạc 54
Hình 2.3 Biểu đồ Use Case chức năng Download 55
Hình 2.4 Biểu đồ tuần tự mô tả chắc năng Nghe nhac 56
Hình 2.5 Biểu đồ tuần tự mô tả chắc năng Download 57
Hình 2.6 Biểu đồ cộng tác mô tả chắc năng Nghe nhac 57
Hình 2.7 Biểu đồ cộng tác mô tả chắc năng Download 58
Hình 2.9 Biểu đồ lớp 59
Hình 2.10 Biểu đồ hoạt động 60
Hình 3.1 Hình ảnh giao diện chính ứng dụng 61
Hình 3.2 Hình ảnh giao diện nghe nhạc 62
Hình 3.3 Hình ảnh giao diện download 63
Hình 3.4 Hình ảnh giao diện tùy chỉnh stereo 64
Trang 6LỜI NÓI ĐẦU
Đứng trước xu thế toàn cầu hoá, ngành dịch vụ Viễn thông nói chung và dịch vụ điện thoại di động nói riêng ở Việt Nam đã đạt được những thành tựu nhất định Sơ khai là một ngành với nhũng điều kiện cơ sở vật chất nghèo nàn, dịch vụ viễn thông còn rất lạc hậu Cho đến nay, ngành Viễn thông Việt nam đã hoà nhập với mạng thông tin toàn cầu, đóng góp vào GDP 0,2% năm 1991 và đến nay đã lên tới con số 10,5% Đặc biệt số lượng thuê bao dịch vụ điện thoại
di động đã thay đổi một cách nhanh chóng, từ 4.060 thuê bao năm 1993 lên tới 1.200.000 thuê bao tính đến hết tháng 3 năm 2005 Trước xu thế hội nhập ngày càng mở rộng, ngành dịch vụ Viễn thông nói chung và dịch vụ điện thoại di động nói chung đang bước vào giai đoạn cạnh tranh rất lớn Nổi lên trong giai đoạn hiện nay là công nghệ hệ điều hành di động và nổi bật như một ngôi sao mới là hệ điều hành Android Hệ điều hành Android ra đời với sự kế thừa những
ưu việt của các hệ điều hành ra đời trước và sự kết hợp của nhiều công nghệ tiên tiến nhất hiện nay, được nhà phát triển bởi hãng công nghệ rất nổi tiếng hiện nay
là Google hậu thuẫn Android nhanh chóng là đối thủ cạnh tranh mạnh mẽ với các hệ điều hành trước đó và đang là hệ điều hành di động của tương lai, được nhiều người ưa chuộng nhất
Vì vậy em đã quyết định chọn đề tài “Xây dựng ứng dụng nghe nhạc trực tuyến trên hệ điều hành Android” cho đợt đồ án tốt nghiệp này Trong
quá trình triển khai đề tài em tập trung tìm hiểu về hệ điều hành Android và nền tảng phát triển phần mềm trên Android từ đó xây chương trình ứng dụng
Em xin chân thành cảm ơn cô giáo Hoàng Thị Cành trong thời gian qua đã hướng dẫn tận tình để em có thể hoàn thành bài báo cáo đồ án tốt nghiệp này
Thái Nguyên, tháng 5 năm 2016
Sinh viên
Nguyễn Anh Tú
Trang 7CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1 Khái niệm Android
1.1.1Tổng quan về lập trình cho thiết bị di động
Người lập trình ứng dụng cho thiết bị di động truyền thống luôn luôn phải nhớ trong đầu nguyên tắc "tiết kiệm tối đa tài nguyên" của thiết bị, dùng mọi cách để tối ưu hóa độ phức tạp tính toán cũng như lượng bộ nhớ cần sử dụng Tuy nhiên, cùng với sự phát triển nhanh chóng của phần cứng, các thiết bị di động hiện đại thường có cấu hình rất tốt, với chip xử lý mạnh mẽ, bộ nhớ (RAM) lớn, khiến việc lập trình cho thiết bị di dộng trở nên dễ dàng hơn bao giờ hết Các bộ kit phát triển của các hãng sản xuất hệ điều hành di động hiện nay cũng thường làm trong suốt hầu hết các tác vụ liên quan đến quản lý bộ nhớ, quản lý tiến trình Lập trình viên có thể ít quan tâm hơn đến việc tối ưu hóa sử
dụng tài nguyên và tập trung vào việc "lập trình", phát triển tính năng cho ứng
dụng như khi lập trình cho máy tính cá nhân
Tuy nhiên, đặc trưng di động của các thiết bị này cũng đem đến nhiều vấn đề mà người lập trình cần phải quan tâm như:
Tính "di động" của các thiệt bị này khiến kết nối mạng trở nên rất bất ổn
định và khó kiểm soát Các ứng dụng phụ thuộc nhiều vào kết nối Internet cần chú ý điểm này
Lưu lượng Internet trền thiết bị di động thường có chi phí cao hơn so với Internet cố định Điều này cũng cần lưu ý khi phát triển các ứng dụng sử dụng nhiều tài nguyên Internet như phim trực tuyến, nhạc trực tuyến
So với máy tính cá nhân, các thiết bị di động hiện đại được trang bị thêm rất nhiều tính năng giúp việc tương tác với người dùng trở nên thuận tiện (màn hình cảm ứng đa điểm, tương tác giọng nói, cử chỉ ), các loại kết nối đa dạng (NFC, GPS, 3G, 4G, bluetooth, IR ), các cảm biến phong phú giúp trải nghiệm rất đa dạng (cảm biến ánh sáng, cảm biến tiệm cận, la bàn, cám biến chuyển
Trang 8động, gia tốc kế ) Người lập trình, tùy thuộc vào ứng dụng cụ thể, có thể sử dụng đến các tính năng đặc biệt này để đem đến cho người dùng trải nghiệm tốt nhất trên thiết bị di động của mình
Ngoài ra các hãng phát triển hệ điều hành di động đều làm ra bộ công cụ phát
triển (SDK) và môi trường phát triển tích hợp (IDE) rất thuận tiện cho việc viết
mã nguồn, biên dịch, gỡ rối, kiểm thử cũng như xuất bản phần mềm
Xét theo thị phần trên thị trường, ba hệ điều hành phổ biến nhất cho thiết bị di động hiện nay là Google's Android, Apple's iOS và Microsoft's Windows Phone Mỗi ứng dụng thành công thường được phát triển cho cả 3 hệ nền này Mỗi hệ nền đều có một chợ ứng dụng chính hãng (Google có Google Play Store, Apple
có Apple AppStore, Microsoft có Windows Phone Store) với rất nhiều khách hàng tiềm năng, giúp người phát triển có thể phân phối ứng dụng miễn phí hoặc
có phí với chi phí nhất định
Ngoài việc phát triển ứng dụng cho từng hệ điều hành như kể trên, lập trình viên
có thể lựa chọn các thư viện lập trình đa nền tảng để phát triển ứng dụng, phổ biến nhất trong các ứng dụng đa nền là các ứng dụng viết bằng ngôn ngữ Web (HTML5, CSS & Javascript) Trình duyệt web của các thiết bị di động hiện nay
có đầy đủ tính năng lẫn hiệu năng để chạy tốt các ứng dụng web hiện đại Một ứng dụng Web có thể được đặt trên máy chủ hoặc được đóng gói thành native app (ứng dụng cho từng hệ điều hành) qua một số công cụ đóng gói của các hãng thứ ba
Công cụ đóng gói ứng dụng Web cho thiết bị di động phổ biến nhất hiện nay
là PhoneGap(http://phonegap.com/), được phát triển bởi Nitobi, sau được Adobe mua lại PhoneGap cho phép lập trình viên phát triển ứng dụng di động sử dụng ngôn ngữ Web phổ biến (HTML5, CSS3 và Javascript), với các tính năng bổ sung, cho phép ứng dụng truy cập vào phần cứng của thiết bị như gia tốc kế, máy ảnh, GPS và đóng gói thành ứng dụng cho nhiều hệ điều hành khác nhau, bao gồm Android, iOS, Blackberry, BlackBerry 10, Windows Phone, Windows
Trang 98, Tizen, Bada Tuy nhiên, nhược điểm của các ứng dụng loại này là hiệu suất thấp (chạy không được "mượt mà" như ứng dụng native) và không đồng nhất giữa tất cả các trình duyệt Web di động (có thể chạy hoặc hiển thị khác nhau trên các hệ điều hành với các trình duyệt khác nhau)
Việc chọn hệ điều hành/thư viện nào để phát triển tùy thuộc vào nhiều yếu tố khác nhau như mục đích của ứng dụng, đối tượng sử dụng, tiềm năng của hệ điều hành, các yêu cầu kỹ thuật cụ thể cũng như thói quen và kỹ năng của lập trình viên Trong khuôn khổ giáo trình này, chúng tôi tập trung đi sâu vào việc
phát triển ứng dụng cho hệ điều hành di động phổ biến nhất hiện nay - Google's Android
Android là hệ điều hành điện thoại mã nguồn mở miễn phí do Google phát triển dựa trên nền tảng Linux Bất kì một hãng sản xuất phần cứng nào cũng đều
có thể tự do sử dụng hệ điều hành Android cho thiết bị của mình, miễn là các thiết bị phải đáp ứng được các tiêu chuẩn cơ bản do Google đặt ra
Các nhà sản xuất có thể tự do thay đổi phiên bản Android trên máy của mình một cách tự do mà không cần xin phép hay trả bất kỳ một khoản phí nào nhưng phải đảm bảo tính tương thích ngược của phiên bản chế riêngđó
Android là nền tảng cho thiết bị di động bao gồm một hệ điều hành, midware và một số ứng dụng chủ đạo Bộ công cụ AndroidSDK cung cấp các công cụ và bộ thư viện các hàm API cần thiết để phát triển ứng dụng cho nền tảng Android sử
dụng ngôn ngữ lập trìnhJava
Những tính năng mà nền tảng Android hỗ trợ :
- Applicationframework: cho phép tái sử dụng và thay thế các thành phần sẵn có trong Android
- Dalvikvirtualmachine : máy ảo Java được tối ưu hóa cho thiết bị di động
- Intergratedbrowser: trình duyệt web tích hợp được xây dựng dựa trên web kitengine
Trang 10- Optimizedgraphics: hỗ trợ bộ thư viện 2D và 3D dựa vào đặc tả OpenGLES 1.0
- SQLite : cơ sở dữ liệu dung để lưu trữ dữ liệu có cấutrúc
Hệ điều hành Android tích hợp sẳn một số ứng dụng cơ bản như email
client, SMS, lịch điện tử, bản đồ, trình duyệt web, sổ liên lạc và một số ứng
Trang 11dụng khác Ngoài ra tầng này cũng chính là tầng chứa các ứng dụng được phát triển bằng ngôn ngữ Java
1.1.2.2 Application Framework
Tầng này của hệ điều hành Android cung cấp một nền tảng phát triển ứng dụng mở qua đó cho phép nhà phát triển ứng dụng có khả năng tạo ra các ứng dụng vô cùng sáng tạo và phong phú Các nhà phát triển ứng dụng được tự
do sử dụng các tính năng cao cấp của thiết bị phần cứng như: thông tin định vị địa lý, khả năng chạy dịch vụ dưới nền, thiết lập đồng hồ báo thức, thêm notification vào status bar của màn hình thiết bị…
Người phát triển ứng dụng được phép sử dụng đầy đủ bộ API được dùng trong các ứng dụng tích hợp sẳn của Android Kiến trúc ứng dụng của Android được thiết kế nhằm mục đích đơn giản hóa việc tái sử dụng các component Qua đó bất kì ứng dụng nào cũng có thể công bố các tính năng mà
nó muốn chia sẻ cho các ứng dụng khác (VD: Ứng dụng email có muốn các ứng dụng khác có thể sử dụng tính năng gởi mail của nó) Phương pháp tương
tự cho phép các thành phần có thể được thay thế bởi người sử dụng
Tầng này bao gồm một tập các services và thành phần sau:
- Một tập phong phú và có thể mở rộng bao gồm các đối tượng View được dùng để xây dựng ứng dụng như: list, grid, text box, button và thậm chí
là một trình duyệt web có thể nhúng vào ứng dụng
- Content Provider: Cho phép các ứng dụng có thể truy xuất dữ liệu từ các ứng dụng khác hoặc chia sẽ dữ liệu của chúng
- Resource Manager: Cung cấp khả năng truy xuất các tài nguyên code như hình ảnh hoặc file layout
non Notification Manager: Cung cấp khả năng hiển thị custom alert trên thanh status bar
- Activity Manager: Giúp quản lý vòng đời của một ứng dụng
Trang 121.1.2.3 Libraries
System C library: một thể hiện được xây dựng từ BSD của bộ thư viện hệ thống C chuẩn (libc), được điều chỉnh để tối ưu hóa cho các thiết
bị chạy trên nền Linux
Media libraries: Bộ thư viện hổ trợ trình diễn và ghi các định dạng
âm than và hình ảnh phổ biến
Surface manager: Quản lý hiển thị nội dung 2D và 3D
LibWebCore: Một web browser engine hiện đại được sử dụng trong trình duyệt của Android lần trong trình duyệt nhúng web view được sử dụng trong ứng dụng
SGL: Engine hổ trợ đồ họa 2D
3D libraries: Một thể hiện được xây dựng dựa trên các APIs của OpenGL ES Những thư viện này sử dụng các tăng tốc 3D bằng phần cứng lẫn phần mềm để tối ưu hóa hiển thị 3D
FreeType: Bitmap and vector font rendering
SQLite: Một DBMS nhỏ gọn và mạnh mẽ
1.1.2.4 Android Runtime
Hệ điều hành Android tích hợp sẳn một tập hợp các thư viện cốt lõi cung cấp hầu hết các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java Mọi ứng dụng của Android chạy trên một tiến trình của riêng nó cùng với một thể hiện của máy ảo Dalvik Máy ảo Dalvik thực tế là một biến thể của máy ảo Java được sửa đổi, bổ sung các công nghệ đặc trưng của thiết bị di động Nó được xây dựng với mục đích làm cho các thiết bị di động có thể chạy nhiều máy ảo một cách hiệu quả Trước khi thực thi, bất kì ứng dụng Android nào cũng được convert thành file thực thi với định dạng nén Dalvik Executable (.dex) Định dạng này được thiết kế để phù hợp với các thiết bị hạn chế về bộ nhớ cũng như tốc độ xử lý Ngoài ra máy ảo Dalvik sử dụng bộ
Trang 13nhân Linux để cung cấp các tính năng như thread, low-level memory management
1.1.2.5 Linux kernel
Hệ điều hành Android được xây dựng trên bộ nhân Linux 2.6 cho những dịch vụ hệ thống cốt lõi như: security, memory management, process management, network stack, driver model Bộ nhân này làm nhiệm vụ như một lớp trung gian kết nối phần cứng thiết bị và phần ứng dụng
Dưới đây là mô hinh hợp tác giữa máy ảo Dalvik và Navite code
Hình 1.2 Mô hình hợp tác giữa máy ảo Dalvik và Navite code
JNI: Java Native Interface (Tương tự khái niệm Application
Programming
Interface)
Java Native Interface: là một bộ framework cho phép mã lệnh viết bằng Java chạy trên máy ảo java có thể gọi hoặc được gọi bởi một ứng dụng viết bằng native code (Ứng dụng được viết cho một phần cứng cụ thể và trên một
hệ điều hành cụ thể) hoặc những bộ thư viện viết bằng C, C++ hoặc Assembly Bằng cách sử dụng JNI, Android cho phép các ứng dụng chạy trên máy
ảo Dalvik có thể sử dụng những phương thức được viết bằng các ngôn ngữ cấp thấp như: C, C++, Assembly Qua đó các nhà phát triển ứng dụng có thể xây
Trang 14dựng ứng dụng dựa trên các bộ thư viện viết bằng C, C++, Assembly nhằm tăng tốc độ thực thi của ứng dụng hoặc sử dụng những tính năng mức thấp mà ngôn ngữ Java không hổ trợ Tuy nhiên người phát triển ứng dụng cần phải cân nhắc sự gia tăng độ phức tạp của ứng dụng khi quyết định sử dụng các bộ thư viện này
1.3 Lịch sử phát triển của Android qua các phiên bản
Android 1.0
Ra mắt: ngày 23-11-2008
HTC Dream là dòng smartphone thương mại dùng Android đầu tiên với kiểu dáng trượt kèm bàn phím vật lý Phiên bản Android 1.0 chưa được Google định hình tên mã, dù trước đó tên gọi Astro Boy hay Bender được gán cho thế
hệ đầu tiên này
Android 1.0 rất nguyên sơ, tích hợp sẵn khả năng đồng bộ dữ liệu với các dịch
vụ trực tuyến của Google như Gmail, Google Calendar và Contacts, một trình phát media, hỗ trợ Wi-Fi và Bluetooth, thanh trạng thái hiển thị các thông báo ứng dụng
và một ứng dụng chụp ảnh (camera) tuy chưa cho phép thay đổi độ phân giải và chất lượng ảnh
Android 1.1
Ra mắt: ngày 9-2-2009
Bên cạnh con số, Google rục rịch đưa hệ thống tên gọi (tên mã) vào các phiên bản Android Tuy chưa chính thức áp dụng nhưng Android 1.1 đã có tên Petit Four Không bao gồm nhiều tính năng, phiên bản này bổ sung một số chức
Trang 15năng mới cho Google Maps hiển thị chi tiết hơn, bàn phím ảo gọi điện thoại đã
có thể hiển thị hoặc ẩn khi gọi, chương trình SMS cho phép người dùng lưu tập tin đính kèm Android 1.1 sửa một số lỗi trong Android 1.0
Ngoài ra, phiên bản này cho phép người dùng hiển thị hình ảnh trong danh
bạ, một điểm thú vị mà hầu hết người dùng điện thoại di động muốn có Màn hình chuyển đổi và hình ảnh khi khởi động máy được làm mới
Android 1.6: Donut
Ra mắt: ngày 30-9-2009
Donut khắc phục các chức năng "lỏng lẻo" trong Cupcake, mở rộng chức năng tìm kiếm bằng giọng nói và ký tự đến bookmark và danh bạ Android Market trở thành "chợ đầu mối" để người dùng tìm kiếm và xem các ứng dụng Android Ứng dụng chụp ảnh và quay phim trong Donut nhanh hơn Hệ điều
Trang 16hành hỗ trợ màn hình có độ phân giải lớn hơn, hướng đến các thế hệ smartphone màn hình lớn
Android 2.0: Eclair
Ra mắt: ngày 26-10-2009
Chỉ sau gần một tháng ra mắt Donut (Android 1.6), Google tung ra Eclair, phiên bản được nhận định là "bước đi lớn" của hệ điều hành này
* Nhip Sống Số: Android lên ba và bước nhảy xa ngoạn mục
Eclair cải tiến rất nhiều, từ giao diện đến ứng dụng bên trong hệ thống Ứng dụng chụp ảnh tăng cường thêm chức năng zoom số (phóng to), cân bằng trắng, hỗ trợ đèn flash và các hiệu ứng màu sắc
Hệ thống hoạt động ổn định hơn, cải thiện khả năng xử lý, hỗ trợ kết nối Bluetooth tốt hơn, đặc biệt tùy chọn đồng bộ nhiều tài khoản Một điểm thuận
Trang 17tiện được đánh giá cao lúc bấy giờ là giao diện danh bạ cho phép nhấn chọn vào một ảnh danh bạ để gọi, nhắn tin hay email đến họ Giao diện ứng dụng lịch biểu (Calendar) cũng thay đổi
Eclair là phiên bản Android đầu tiên hỗ trợ ảnh nền động (live wallpaper)
dù tùy chọn này tiêu tốn khá nhiều pin
Android 2.2: Froyo
Ra mắt: ngày 20-5-2010
Từ phiên bản 2.0 trở đi, Android dần hoàn thiện hơn Phiên bản 2.2 (Froyo) mang Adobe Flash đến Android, kéo theo hàng loạt ứng dụng và game trên nền Flash Người dùng cũng có thể xem video clip nền Flash như YouTube và "ra lệnh" thực hiện cuộc gọi qua Bluetooth
Một chức năng mới trong Froyo được nhóm người dùng lưu động yêu thích là USB Tethering và Wi-Fi Hotspot, biến chiếc smartphone Android thành thiết bị phát sóng Wi-Fi từ kết nối 3G Tính năng này được sử dụng rất phổ biến đến ngày nay
Lần đầu tiên Android cho phép cài đặt ứng dụng (app) lên thẻ nhớ SD thay vì mặc định cài ngay vào bộ nhớ trong của thiết bị Điểm "đầu tiên" nữa trong Froyo bao gồm mật khẩu đã hỗ trợ số và chữ số Thiết bị đầu tiên mang nhãn Froyo ra mắt thị trường là HTC Nexus One
Android 2.3: Gingerbread
Trang 18Ra mắt ngày: 6-12-2010
Đến cuối năm 2012, Gingerbread vẫn đang "phủ sóng" trên rất nhiều thiết
bị dùng Android, chiếm đến hơn phân nửa (54%) Google hợp tác Samsung trình làng dòng smartphone đầu tiên sử dụng Gingerbread mang tên Nexus S, hỗ trợ công nghệ giao tiếp tầm gần NFC
Gingerbread đưa vào hệ thống một công cụ quản lý tải tập tin, cho phép theo dõi và truy xuất đến các tập tin đã tải về máy Hệ thống này hỗ trợ nhiều camera cho các thiết bị có camera mặt sau và trước, quản lý nguồn pin hiệu quả hơn, tiết kiệm thời lượng pin Phiên bản này khắc phục khá nhiều lỗi từ Froyo, kèm theo một số điều chỉnh trong giao diện người dùng (UI)
Android 3.0: Honeycomb
Ra mắt: ngày 22-2-2011
Đây không chỉ là một phiên bản, mà có thể xem là một thế hệ Android đầu tiên dành riêng cho máy tính bảng (tablet), ra mắt cùng tablet Motorola XOOM
Trang 19Mang những tính năng từ thế hệ Android 2.x, Android 3.0 cải tiến giao diện phù hợp với cách sử dụng máy tính bảng, bàn phím ảo thân thiện hơn, hỗ trợ xử lý đa tác vụ (multi-tasking), cho phép chuyển đổi qua lại các ứng dụng đang cùng chạy Không chỉ có bề mặt được trau chuốt, phần lõi hệ thống có các cải tiến tương thích với phần cứng như hỗ trợ chip xử lý (CPU) đa lõi, tăng tốc phần cứng
Android 3.0 đặt nền móng quan trọng cho thế hệ Android 4.x hợp nhất, khắc phục sự phân mảng của Android (có các phiên bản riêng dành cho smartphone
Trang 20Nguồn: Gizmodo
Android 4.0 đưa chức năng truy xuất nhanh các ứng dụng thường dùng vào phần bên dưới giao diện chủ, tùy biến widget, dễ sắp xếp và duyệt danh sách ứng dụng hơn Các ứng dụng đã có thể truy xuất nhanh từ màn hình khóa thiết bị (Lock screen), hiện các hãng sản xuất thiết bị chỉ mới cho phép Camera có thể chọn nhanh
từ Lock screen
Ice Cream Sandwich hoạt động mượt mà, nhanh và đẹp hơn
Android 4.1: Jelly Bean
Ra mắt: 9-7-2012
Máy tính bảng Nexus 7, sản phẩm hợp tác giữa
Google và Asus, là thiết bị dùng Jelly Bean đầu tiên ra
mắt Android 4.1 nâng tầm hoạt động cho hệ điều hành của Google, trở thành hệ điều hành cho thiết bị di động hàng đầu hiện nay, đe dọa cả "ông lớn" Windows Khả năng sắp xếp giao diện chủ và widget trong Jelly Bean rất tùy biến và linh hoạt Hệ thống hỗ trợ dịch vụ ví điện tử Google Wallet, đặc biệt trình duyệt web mặc định trong Android được thay thế bởi đại diện tên tuổi: Chrome, với khả năng đồng bộ dữ liệu theo tài khoản với bản Chrome trên máy tính
Trang 21Jelly Bean giới thiệu Google Now, dịch vụ trực tuyến mới hiện chỉ dành cho Android, một phụ tá ảo đắc lực cho công việc sắp xếp lịch trình, tìm kiếm thông tin, xác định vị trí Rất đa năng và được xem như lời đáp trả của Google với "phụ tá ảo" Apple Siri trong iOS
Android 4.2: vẫn là Jelly Bean
Ra mắt: tháng 11-2012
Chỉ sau gần năm tháng ra mắt Android 4.1,
Google tiếp tục bồi thêm sức nặng cho Android với phiên bản 4.2 và vẫn mang tên mã Jelly Bean
Android 4.2 tiếp tục mang đến những cải tiến hấp dẫn cho ứng dụng chụp ảnh (Camera) như HDR, Photo Sphere, hiệu ứng ảnh, Google Now, đưa tính năng lướt chọn từ rất hay trong bàn phím ảo Chức năng "bom tấn" hỗ trợ nhiều
tài khoản người dùng (multi-user profile) lần đầu tiên được áp dụng trong
Android 4.2 nhưng chỉ có người dùng máy tính bảng thừa hưởng chức năng này
Tương lai Android X
Nhiều dự đoán cho rằng thế hệ Android 5.0 kế tiếp sẽ có tên mã "Key Lime Pie" và thế hệ thiết bị Nexus mới của Google sẽ một lần nữa trở thành "đại diện đầu tiên" sở hữu nền tảng mới này Android sẽ dần xóa nhòa lằn ranh giữa hệ điều hành cho thiết bị di động và hệ điều hành cho máy tính cá nhân, giảm khác biệt phân mảnh, đem đến những chức năng thú vị hơn nữa
Trang 221.4 Phát triển ứng dụng trên Android
1.4.1 Ngôn ngữ lập trình
Ngôn ngữ lập trình chính thức của Android là Java Mặc dù các ứng dụng trên Android được phát triển dựa trên nền tảng Java, nhưng Android không hỗ J2ME và J2SE, là hai ngôn ngữ lập trình phổ dụng cho các thiết bị di động
Dựa trên máy ảo Java của Sun, Google đã tinh chỉnh và phát triển nên máy ảo Dalvik để biên dịch mã Java với tốc độ biên dịch nhanh hơn và nhẹ hơn Đến phiên bản Froyo 2.2, Android đã hỗ trợ Just-in-time Compiler (JIT) làm tăng tốc độ biên dịch Java lên gấp 2-5 lần so với các phiên bản trước
Hình 1.3 Biểu đồ so sánh tốc độ của máy ảo Java giữa các phiên bản Android
Bằng cách sử dụng các frameworks của hãng thứ ba (VD: PhoneGap, Titanium, ), các nhà lập trình web cũng có thể phát triển ứng dụng Android một cách dễ dàng bằng các ngôn ngữ web phổ dụng như HTML, CSS, Javascript Tuy nhiên số lượng các ứng dụng đi theo chiều hướng này chưa nhiều
Ngoài ra các ứng dụng của Android sử dụng SQLite để quản lý cơ sở dữ liệu
Trang 231.1.4.2 Môi trường lập trình cho Android
Android SDK bao gồm các công cụ riêng lẻ như: debugger, các thư viện, trình giả lập điện thoại Android, các tài liệu hỗ trợ và code mẫu Hiện Android cung cấp bộ công cụ này trên nhiều nền tảng hệ điều hành khác nhau (Windows, Linux, Mac, ), miễn là có sẵn Java Development Kit, Apache Ant và Python2.2 trở lên
Môi trường lập trình (IDE) chính thức của Android là Eclipse
Ứng dụng Android được đóng gói thành các file apk và đuợc lưu trong thư mục
/data/app của hệ điều hành Android.Java Development Kit (JDK) 5.0
Một số công cụ hỗ trợ lập trình Android tiêu biểu:
SQLite Manager: Là một addon của Firefox giúp quản lí cơ sở
dữ liệu
SQLite của Android
DroidDraw: Giúp thiết kế file XML giao diện ứng dụng
Balsamiq Mockups và AdobeFireworks: Giúp nhanh chóng phác
thảo ý tưởng và giao diện sơ bộ của ứng dụng
StarUML: Vẽ các lược đồ UML hỗ trợ phân tích thiết kế
Hình 1.4 Cấu trúc thư mục và file của một dự án Android trên eclipse
Trang 24AndroidManifest.xml: file XML mô tả ứng dụng và các thành phần đuợc cung cấp bởi ứng dụng (activities, services, )
build.xml: Một file chứa mã script Ant (ant.apache.com) nhằm compile
và cài đặt ứng dụng lên máy
default.properties: file property tạo bởi script Ant trên bin/ : nơi chứa ứng dụng sau khi được compile bin/classes/ : chứa các lớp Java đã được compile
bin/classes.dex : chứa các file executable tạo bởi các lớp Java
bin/yourapp.ap_ : chứa các tài nguyên của ứng dụng, đóng gói thành 1 file zip bin/yourapp-debug.apk hay bin/yourapp-unsigned.apk : chứa chính ứng dụng Android của ta
libs/ : nơi chứa các file Java JAR ứng dụng yêu cầu (third party)
src/ : nơi chứa mã nguồn Java của ứng dụng
res/ : chứa các tài nguyên của ứng dụng, như các icons, GUI layouts, res/drawable/ : chứa file hình ảnh (PNG, JPEG, ) res/layout/ : chứa UI layout, dưới dạng XML res/menu/ : chi tiết các menu, dưới dạng XML
res/raw/ : chứa các file khác (CSV chứa thông tin account, )
res/values/ : chứa các strings, dimensions,
res/zml/ : chứa các file XML khác cần cho ứng dụng
assets/ : nơi chứa các files tĩnh (static) được yêu cầu đi kèm với ứng dụng
1.1.4.3 File AndroidManifest.xml
Là nền tảng của mọi ứng dụng Android, file AndroidManifest.xml được đặt trong thư mục root và cho biết những thành phần có trong ứng dụng của: các activities, các services, cũng như cách các thành phần ấy gắn bó với nhau Mỗi file manifest đều bắt đầu với một thẻ manifest:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.commonsware.android.search">
Trang 25
</manifest>
Khi tạo file manifest, điều quan trọng nhất là phải cung cấp thuộc tính của package, tức tên của Java package dùng làm cơ sở cho ứng dụng của ta Sau khi đã đặt tên package, sau này khi cần ghi tên lớp trong file manifest, ta
có thể rút ngắn, chẳng hạn với lớp “com.yourapp.android.search.Someclass” ta chỉ cần ghi “.Someclass” là đủ
Các thành phần manifest khác là:
uses-persmission: chỉ định các quyền mà ứng dụng của ta đuợc cấp
để hoạt động trôi chảy (như đã nói, các ứng dụng Android nằm dưới nhiều lớp bảo mật khác nhau)
permission: chỉ định các quyền mà các activities hay services yêu cầu các ứng dụng khác phaỉ có mới được truy cập dữ liệu của ứng dụng của ta
instrumentation: chỉ định phần code cần được gọi khi xảy ra những
sự kiện quan trọng (chẳng hạn khởi động activities) nhằm phục vụ việc ghi chú
(logging) và tra soát (monitoring)
uses-library: nhằm kết nối với các thành phần có sẵn của Android (như service tra bản đồ, )
uses-sdk: có thể có hoặc không, chỉ ra phiên bản củaAndroid mà ứng dụng này yêu cầu
application: định nghĩa phần trung tâm của ứng dụng của file manifest
Ví dụ file AndroidManifest:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.commonsware.android">
Trang 26Tất nhiên, phần quan trọng của 1 file manifest chính là thành phần
application Mặc định, khi ta tạo 1 project Android mới, ta có sẵn 1 thành phần activity:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.commonsware.android.skeleton">
Trang 27Đinh nghĩa Activity
Là thành phần tối quan trọng của bất kỳ một ứng dụng Android nào Thuật ngữ Activity chỉ một việc mà người dùng có thể thực hiện trong một ứng dụng Android Do gần như mọi activity đều tương tác với người dùng, lớp Activity đảm nhận việc tạo ra một cửa sổ (window) để người lập trình đặt lên
đó một giao diện UI với setContentView(View) Một activity có thể mang nhiều dạng khác nhau: Một cửa sổ toàn màn hình (full screen window), một cửa sổ floating (với windowsIsFloating) hay nằm lồng bên trong 1 activity khác (với ActivityGroup)
Có 2 phương thức mà gần như mọi lớp con của Activity đều phải hiện thực:
onCreate(Bundle) - Nơi khởi tạo activity Quan trọng hơn, đây chính người lập trình gọi setContentView(int) kèm theo layout để thể hiện UI của riêng mình Đồng thời còn có findViewById(int) giúp gọi các widget (buttons, text boxes, labels, ) để dùng trong UI
onPause() - Nơi giải quyết sự kiện người dùng rời khỏi activity Mọi
dữ liệu được người dùng tạo ra tới thời điểm này cần phải được lưu vào ContentProvider
Trang 28Để có thể sử dụng Context.startActivity(), mọi lớp activity đều phải được khai báo với tag <activity> trong file AndroidManifest.xml
Hình 1.5 Khai báo tag <activity> trong file AndroidManifest.xml
Vòng đời của một Activity
Các activity được quản lí dưới dạng các activity stack - Out: Khi một activity mới được khởi tạo, nó sẽ được đưa lên trên cùng stack, các activity khác muốn chạy trên nền (foreground) trở lại thì cần phải chờ tới khi Activity mới này kết thúc
First-In-Last-Một Activity có 4 trạng thái:
Active hay Running: Khi một activity đang chạy trên màn hình
Paused: Khi một activity vẫn đang chạy trên màn hình nhưng đang bị
một activity trong suốt (transparent) hay không chiếm toàn màn hình hiển thị phía trên Tuy vẫn lưu trữ dữ liệu, nhưng các paused activity này sẽ bị hệ thống bắt chấm dứt khi đang thiếu bộ nhớ trầm trọng
Stopped: Khi 1 activity bị che khuất hoàn toàn bởi 1 activity khác Tuy
vẫn lưu trữ dữ liệu, nhưng các stopped activity này sẽ thường xuyên bị hệ thống bắt chấm dứt để dành chỗ cho các tiến trình khác
Trang 29Killed hay Shut down: Khi 1 activity đang paused hay stopped, hệ
thống sẽ xóa activity ấy ra khỏi bộ nhớ
về, POST để đưa dữ liệu cho nó để thực thi một công việc nào đó Khái niệm Intent cũng tương tự, Intent là một mô tả trừu tượng của một hành động được thực thi Nó đại diện cho một hành động đi kèm với một ngữ cảnh xác định Với Intent thì có nhiều hành động và nhiều component (Một thể hiện của một class java dùng để thực thi các hành động được đặc tả trong Intent) dành cho Intent của Android hơn là so với HTTP verbs (POST, GET) và nguồn tài nguyên (hình ảnh, web page) của giao thức HTTP, tuy nhiên khái niệm vẫn tương tự nhau
Intent được sử dụng với phương thức startActivity() để mở một Activity,
và dùng với broadcastIntent để gởi nó đến bất kì BroadcastReceiver liên quan nào, và dùng với startService(Intent), bindService(Intent, ServiceConnection, int) để giao tiếp với các Service chạy dưới nền
Intent cung cấp một chức năng cho phép kết nối hai chương trình khác nhau trong quá trình thực thi (runtime) (Cung cấp khả năng cho phép hai chương trình khác nhau giao tiếp với nhau) Chức năng quan trọng và được sử dụng nhiều nhất của một Intent là mở một Activity, nơi mà nó có thểđược dùng như một vật kết nối các Activity lại với nha
Trang 30
Hình 1.6 Sử dụng Intent để trao đổi thông tin giữa hai chương trình
Thành phần chính của Intent bao gồm:
Action: Xác định hành động sẽ được thực thi, các hành động này có thể
là: ACTION_VIEW, ACTION_EDIT, ACTION_MAIN…
Data: Các dữ liệu được sử dụng để hành động (Action) thao tác trên nó, như
bản ghi về một người nào đó trong cơ sở dữ liệu chứa các contact của thiết bị
Type: Chỉ định 1 kiểudữ liệu chính xác (kiểu MIME) được mang bởi
intent Thường thì type được suy ra từ chính dữ liệu Bằng cách thiết lập thuộc tính type, bạn có thể vô hiệu hóa sự phỏng đoán kiểu dữ liệu và chỉ định rỏ một kiểu chính xác
Component: Chỉ định rõ tên của lớp thành phần (Một thể hiện của một
class java dùng để thực thi các hành động được đặc tả trong Intent) sử dụng cho Intent Thông thường thì nó được xác định bằng cách tìm kiếm thông tin trong Intent (Các thông tin như Action, data/type, và category) và nối chúngvới các component (Một thể hiện của một Class java dùng để thực thi các hành động được đặc tả trong Intent) có thể đáp ứng được các yêu cầu
sử lý của Intent
Extracts: là một đối tượng Bundle dùng để chứa các thông tin kèm
theo được dùng để cung cấp thông tin cần thiết cho component Ví dụ: Nếu có một Intent đặc tả hành động send email thì những thông tin cần chứa trong đối tượng Bundle là subject, body…
Trang 31Intent
Resolution
Intent có 2 dạng
chính sau:
Explicit Intents: Xác định rỏ một component (Một thể hiện của một
class java dùng để thực thi các hành động được đặc tả trong Intent) (thông qua phương thức setComponen(ComponentName) hoặc setClass(Context, Class)) cung cấp lớp sẽ
thực thi các hành động được đặc tả trong Intent Thông thường thì những Intent này không chứa bất kỳ thông tin nào khác (như category, type)
mà đơn giản chỉ là cách để ứng dụng mở các Activity khác bên trong một Activity
Implicit Intents: Không chỉ định một component nào cả, thay vào đó,
chúng sẽ chứa đủ thông tin để hệ thống có thể xác định component có sẵn nào
là tốt nhất để thực thi hiệu quả cho Intent đó
1.1.5.3 Service
Định nghĩa Service
Một service là một thành phần của ứng dụng, thể hiện mong muốn ứng dụng thực hiện các hành động trong khi không tương tác với người dùng hoặc cung cấp chức năng cho các ứng dụng khác sử dụng Nói một cách đơn giản, service là các tác vụ (task) chạy ngầm dưới hệ thống nhằm thực hiện một nhiệm vụ nào đó Cũng như các đối tượng của ứng dụng khác, services chạy trên luồng (Thread) của tiến trình chính Có nghĩa là nếu service của bạn
dự định chạy các hành vi có cường độ lớn hoặc các hành vi có thể gây nghẽn mạch, nó sẽ tự sinh ra luồng (Thread) của chính nó để làm thực hiện các tác vụ được đặc tả trong Service
Cần lưu ý:
Service không phải là một tiến trình độc lập Đối tượng Service không chạy trên tiến trình (process) của riêng nó (trừ khi có một yêu cầu đặt biệt), Service chạy trên tiến trình của chương trình
Trang 32Service không phải là một luồng (thread)
Service có chứa 2 đặc trưng cơ bản sau:
Là một chức năng để ứng dụng thông báo với hệ thống về việc mà nó muốn thực hiện ở phía dưới nền (ngay cả khi người dùng không tương tác trực tiếp tới ứng dụng) Điều này tương ứng với việc gọi phương thức Context.startservice(), nó sẽ yêu cầu hệ thống lên lịch cho service để chạy cho đến khi bị chính service hay người nào đó dừng nó lại
Là một chức năng cho phép ứng dụng để cung cấp các chức năng của nó cho các ứng dụng khác Điều đó tương ứng với việc gọi Context.bindService(), cho phép một long-standing connection được tạo ra để service có thể tương tác với nó
Vòng đời của 1 Service
Hình 1.7 Lược đồ vòng đời của 1 Service
Dựa theo hình trên, 1 service được bắt đầu bởi phương thức startService() là service dùng để thực hiện các tác vụ ngầm dưới nền, service được bắt đầu bởi
Trang 33phương thức bindService() là service được dùng để cung cấp các chức năng cho các chương trình khác
BroadcastReceiver
Là lớp nhận về các intents
Có hai lớp broadcast quan trọng cần xét đến:
Broadcasts bình thường (Normal broadcasts): Được gửi bởi context.sendBroadcast tới các receivers hoàn toàn không theo 1 trật tự nào, dẫn tới đôi khi tồn tại cùng 1 lúc nhiều receivers khác nhau Tuy nhanh nhưng không thể trao đổi kết quả nhận về giữa cac1 receivers với nhau
Broadcasts có thứ tự (Ordered broadcasts) - Được gửi bởi Context.sendOrdered Broadcast() tới từng receiver một Như vậy, kết quả nhận về của 1 receiver có thể trở thành input của 1 receiver khác, hay có thể ngay lập tức dừng việc