Khi bạn sử dụng implicit intent, hé thống Android sẽ tìm kiếm tất cả thành ph thích hợp để start bằng cách cách so sánh nội dung của Intent đc gửi với các Intent filter đc khai báo trong
Trang 1
BO GIAO DUC VA DAO TAO
TRUONG DAI HOC KHOA CONG NGHE THONG TIN
Trang 2NHAN XET TP H6Chi Minh, ngay CUA GIAO VIEN HUONG DAN
Trang 3LOT CAM ON
Lời đầi tiên nhóm xin phép được gửi lời cảm ơn chân thành và sâu sắc nhất đến với Khoa Công Nghệ Thông Tin — Trưởng Đại Học Sư Phạm Kỹ Thuật Thành Phố H ồ Chí Minh đã tạo đi u kiện cho nhóm chúng em được học tập, phát triển n`n tảng kiến thức sâu
sắc và thực hiện đ Êtài này
Bên cạnh đó nhóm chúng em xin gửi đến th3%y Trần Văn Định lời cảm ơn sâu sắc nhất Trải qua một quá trình dài học tập và thực hiện đ tài trong thời gian qua Th 3 đã tận tâm chỉ bảo nhiệt tình nhóm chúng em trong suốt quá trình từ lúc bắt đâi cũng như kết thúc đề tài này
Nhờ có những n`ần tảng kiến thức chuyên ngành vững chắc cộng thêm với những kinh nhiệm và yêu c3 thực tế ngoài xã hội thông qua việc học ở trưởng và những chuyến di thực tế thu thập ý kiến người dùng Tập thể các th# cô Khoa Công Nghệ Thông Tin va
đặc biệt thy Trần Văn Định đã tặng cho chúng em một khối lượng kiến thức và kinh
nghiệm khổng | 6v êchuyên ngành và công việc trong tương lai Đặc biệt đi ân này đã giúp
và thôi thúc chúng em hoàn thành được đề tài Chúng em thật sự cảm ơn và khắc ghi những kiến thức đó Đây sẽ là hành trang vô cùng lớn của chúng em trước khi bước ra một cuộc sống mới
Tuy nhiên lượng kiến thức là vô tận và với khả năng hạn hẹp chúng em đã rất cố gắng
để hoàn thành một cách tốt nhất Chính vì vậy việc xảy ra những thiếu sót là đi âu khó có thể tránh khỏi Chúng em hi vọng nhận được sự góp ý tận tình của quý th 4y qua đó chúng
em có thể rút ra được bài học kinh nghiệm và hoàn thiện và cải thiện nâng cấp lại sản phẩm của mình mệt cách tốt đẹp nhất
Cuối cùng một lần nữa chúng em xin gửi lời cảm ơn sâu sắc nhất đến với th3y Trần Văn Định và tập thể quý th% (cô) Khoa Công Nghệ Thông Tin — Trưởng Đại Học Sư Phạm Kỹ Thuật Thành Phố H ồöChí Minh Chúc các th cô có sức khỏe thật tốt
Chúng em xin chân thành cảm ơn!
Trang 4MUC LUC
CHUONG 1: CƠSỞLÝ THUYẾT
1.1 Giới thiệu hệ điâi hành Android
1.2 Gidi thiéu v €Android Studio va Android SDK
1.3 Intent & Manifest trong Lajatrinh Android
1.3.1 Intent
1.3.2 Manifest
14 Activity trong Android
1.5 Lưu trữ dữ liệu trong Android
1.6 Broadcast Receiver trong Android
1.7 Content Provider trong Android
1.8 Service trong Android
1.9 Notification trong Android
CHUONG 2: GIỚI THIỆU CHUNG
2.1 Giới thiệu, lý do chọn đÊtài
2.2 Các chức năng phầì mền
2.3 Yêu c3 người dùng
24 Yêu cân hệ thống
2.4.1 Các yêu c3 vềchức năng:
2.4.2 Các yêu c3 phi chức năng
CHUONG 3: THIẾT KẾVÀ MÔ TẢ CHỨC NĂNG HỆ THỐNG
3.2.2 Mô tả chỉ tiết các quan hệ
3.3 Thiết kế giao diện
Trang 5Giao diện cá nhân
Giao diện đăng ký đăng nhập
Giao diện phát nhạc
Giao diện quản lý danh sách phát của người dùng
Giao diện quản lý
Giao diện cá nhân
Giao diện đăng ký đăng nhập
Giao diện phát nhạc
Giao diện quản lý danh sách phát của người dùng
Giao diện quản lý
Trang 6DANH MUC HINH ANH
Hình 1-2 Vòng doi ca Activity 14 Hinh 1-3 Biéu dién cach content providers quan ly viéc truy c4p tới bộ nhớ 18
Hình 1-4 Minh họa cách Content Provider đi `âi phối việc truy cập tới bễ lưu trữ đữ liệu
thông qua các API và các component 19 Hình 1-5 Bound Service 21 Hinh 3-1 Biéu d Suse case téng quat 27 Hình 3-2 Sơ d Guse case dang ký/ đăng nhập của ngươi dùng 28 Hình 3-3 Sơ đ'ôuse case nghe nhạc 29 Hình 3-4 Sơ d Suse case quan ly danh sách phát của cá nhân 31 Hinh 3-5 So d Guse case tim kiém 33 Hình 3-6 Sơ d6tu% tu đăng ký 35 Hình 3-7 Sơ đ ôtu ân tự đăng nhập 36 Hình 3-8 Sơ đồtu3n tự ngừng nhạc 37
Hình 3-10 Sơ đ ôtun tự chuyển bài hát tiếp theo 38 Hình 3-11 Sơ đ ồtu3n tự chuyển bài hát phía trước 39
Hình 3-13 Sơ đ `ôtun tự lặp bài hát 40
Hình 3-15 Sơ đ ôtu3n tự danh sách phát 41 Hình 3-16 Sơ đ `ôtuñn tự đánh gia nhac 42 Hình 3-17 Sơ đ ôtu3? tự tải xuống 43 Hình 3-18 Sơ đ `ôtun tự tìm kiếm 44 Hình 3-19 Sơ đ 'ôtun tự thêm danh sách phát 45 Hinh 3-20 So d Gtu %h tự sửa danh sách phát 45 Hình 3-21 Sơ đ ôtu3n tự xóa danh sách phat 46
Hình 3-22 Sơ đ `ôtu3 tự thêm nhạc vào danh sách phát 46 Hình 3-23 Sơ đ `ôtu tự xóa nhạc khỏi danh sách phát 47
Hình 3-27 Sơ đ 'ôhoạt động của người dùng 49
Trang 7Hình 3-28 Sơ đ ôhoạt động đăng ký
Hình 3-29 Sơ đ ôhoạt động đăng nhập
Hình 3-30 Sơ đ ôhoạt động ngung nhac
Hình 3-31 Sơ đ'ôhoạt động phát nhạc
Hình 3-32 Sơ đ ôhoạt động chuyển bài hát tiếp theo
Hình 3-33 Chuyển bài hát phía trước
Hình 3-34 Sơ đ ôhoạt động thởi gian nhạc
Hình 3-35 Sơ đ ôhoạt động lặp bài hát
Hình 3-36 Sơ đ `ôhoạt động trộn danh sách phát
Hình 3-37 Sơ đ ôhoạt động danh sách phát
Hình 3-38 Sơ đ `ôhoạt động đánh giá nhac
Hình 3-39 Sơ đ ôhoạt động tải xuống
Hình 3-40 Sơ đ `ôhoạt động tìm kiếm
Hình 3-41 Sơ đ ôhoạt động thêm danh sách phát
Hình 3-42 Sơ đ `ôhoạt động sửa danh sách phát
Hình 3-43 Sơ đ ôhoạt động xóa danh sách phát
Hình 3-44 Sơ đ `ôhoạt động thêm nhạc vào danh sách phát
Hình 3-45 Sơ đ 'ôhoạt động xóa nhạc khỏi danh sách phát
Hình 3-46 Sơ đ `ôhoạt động thêm đối tượng nhạc
Hình 3-47 So d Shoat động sửa đối tượng nhạc
Hình 3-48 Sơ đ `ôhoạt động xóa đối tượng nhạc
Hình 3-49 Sơ đ ôthực thể kết hợp (ERD)
Hình 3-55 Thiết kế hộp thoai đổi mật khẩu
Hình 3-56 Thiết kế màn hình chọn phương thức đăng ký
Hình 3-57 Thiết kế màn hình đăng ký email
Hình 3-58 Thiết kế màn hình chọn phương thức đăng nhập
Hình 3-59 Thiết kế màn hình đăng nhập email
Trang 8Hình 3-62 Thiết kế màn hình các danh sách phát cá nhân
Hình 3-63 Thiết kế màn hình chi tiết danh sách phát cá nhân
Hình 3-64 Thiết kế màn hình quản lý danh sách đối tương nhạc
Hình 3-65 Thiết kế màn hình cập nhật chị tiết đối tượng nhạc
Hình 4-6 Kết quả hôp thoại đổi mật khẩu
Hình 4-7 Kết quả màn hình chọn phương thức đăng ký
Hình 4-8 Kết quả màn hình đăng ký với email
Hình 4-9 Kết quả màn hình chọn phương thức đăng nhập
Hình 4-10 Kết quả màn hình đăng nhập với Email
Hình 4-11 Kết quả màn hình phát nhạc
Hình 4-12 Kết quả màn hình danh sách phát khi phát nhạc
Hình 4-13 Kết quả màn hình danh sách phát cá nhân
Hình 4-14 Kết quả màn hình chỉ tiết danh sách phát cá nhân
Hình 4-15 Kết quả màn hình quản lý danh sách đối tượng nhạc
Hình 4-16 Kết quả màn hình thêm đối tượng nhạc
Hình 4-17 Kết quả màn hình sửa đối tượng nhạc
Trang 9DANH MUC BANG Bảng 3-1 Mô tả use case đăng ký/ đăng nhập
Bảng 3-2 Mô tả use case nghe nhạc
Bảng 3-3 Mô tả use case quản lý danh sách phát cá nhân
Bảng 3-4 Mô tả use case tìm kiếm
Bảng 3-5 Mô tả chỉ tiết bảng cơ sở dữ liệu User
Bảng 3-6 Mô tả chỉ tiết bảng cơ sở đữ liệu Song
Bảng 3-7 Mô tả chỉ tiết bảng cơ sở dữ liệu Banner
Bảng 3-8 Mô tả chỉ tiết bảng cơ sở dữ liệu Album
Bảng 3-9 Mô tả chỉ tiết bảng cơ sở dữ liệu Theme
Bảng 3-10 Mô tả chỉ tiết bảng cơ sở dữ liệu Types
Bảng 3-11 Mô tả chỉ tiết bảng cơ sở dữ liệu Playlist
Bảng 3-12 Mô tả chỉ tiết bảng cơ sở dữ liệu Playlist_Song
Trang 10CHUONG 1: COSOLY THUYET 1.1 Gioi thiéu hé di‘@ hanh Android
Android là hệ đi `âi hành mã ngu ni mở, dựa trén Linux Kernel, danh cho các thiết bị di
động nói chung (điện thoại, máy tính bảng, đ ông h ôthông minh, máy nghe nhạc, )
Có nghĩa là Android không chỉ giới hạn trong phạm vi một hệ điâi hành cho điện thoại! Nó có thể được nhà sản xuất cai dat lén dng h ồ, máy nghe nhạc, thiết bị định vị GPS, thậm chí là ô tô (các thiết bị Android Auto)
Android cũng không phải là mệt thiết bị hay sản phẩm cụ thể, nó là một hệ đi 'âi hành
dựa trên Linux, ngu ôn mở, linh hoạt
Hiện Android là một thương hiệu của Google Có khả năng tùy biến rất cao và có thể chạy trên nhi âu thiết bị, nhí *âi kiến trúc vì xử lý (ARM / x86) Tinh đến nay, Android đã
có các phiên bản (kèm tên mã) In lượt là:
- Android 4.0 Ice Cream Sandwich
- Android 4.1 Jelly Bean
- Android 4.2 Jelly Bean
- Android 4.3 Jelly Bean
- Android 4.4 KitKat
- Android 5.0 Lollipop
- Android 6.0 Marshmallow
Trang 11
Hình 1-1 Kiến trúc của hệ đi`âi hành Android
Chỉ tiết v`êcác tầng của kiến trúc này như sau:
- _ Tầng Applications: Là tầng chứa các ứng dụng Danh bạ, Gọi điện, Trình duyệt, Nghe nhạc, các ứng dụng này thưởng mua máy v ềchúng ta đã có sẵn r ä
- Tầng Framewcrk: Là tầng chứa các API để làm việc với hệ đi`âi hành như lấy thông tin danh bạ, quản lý các Activity , quản lý địa điểm, quản lý các View
- _ Tầng Libraries: Chứa các thư viện, API gân như là cốt lõi của Android, bao g 4m bộ quản lý b`êmặt cảm ứng (Surface Manager), OpenGL (phục vụ cho việc dựng đồ họa phức tạp)
Trang 12-_ Tầng Android Runtime: Chứa các thư viện lõi của Android và máy ảo Dalvik Virtual Machine (từ Android 4 trở lên chúng ta có thêm máy ảo ART)
- _ Tầng Kermnel: Là nhân lõi của hệ đi`âi hành, chứa các tập lệnh, driver giao tiếp giữa phẦ3n cứng và phần m`ần của Android
Trong quá trình làm việc, chúng ta sẽ gần như chỉ làm việc với tầng xanh lam (Applications va Applicatlon Framework) và xanh lá (Libranes) Chương trình Android được viết bằng ngôn ngữ Java và được máy ảo DVM / ART trong mỗi thiết bị Android biên dịch ra mã máy
1.2 _ Giới thiệu v €Android Studio va Android SDK
Tháng 5 năm 2013, Google công bế Android Studio, một môi trưởng phát triển ứng dụng tích hợp (IDE) dành riêng cho Android, mã ngu ôi mở, dựa trên IDE Java IntelliJ của hãng JetBrains
Android Studio chạy trên Windows, Mac và Linux, nhằm thay thế cho Eclipse Android Development Tool (ADT) vốn được sử dụng làm IDE chính trong các năm trước
đó
Một số tính năng nổi bật:
-_ Bộ công cy build tng dụng dựa trên Gradle (thay vì Maven)
- _ Chức năng đò và sửa lỗi nhanh, hướng Android
- _ Công cụ chỉnh sửa màn hình dạng kéo thả tiện lợi
-_ Các wizard tích hợp nhằm giúp lập trình viên tạo ứng dụng từ mẫu có sẵn
- Tich hop Google Cloud Platform, dé dàng tích hợp với Google Cloud Messaging
va App Engine của Google
1.3 Intent & Manifest trong La Xp trZnh Android
1.3.1 Intent
Khái niệm
Trang 13Intent là một đối tượng message bạn có thể sử dụng để request một hành động từ một vài component trong ứng dụng
Cac loai Intent
Intent c6é 2 loai chinh 1a Explicit Intent va Implicit Intent
Explicit Intent (dich word by word cé nghia 1a intent trong minh):
Hiểu đơn giản explicit intents 1a intent xdc định rõ và cụ thể các thanh ph % tham gia hành động
Implicit Intent (dịch word by word có nghĩa là Intent không tưởng minh)
Loại Intents này chỉ ra hành động cẦn được thực hiện (action) va dữ liệu cho hành
động đó (data) Khi bạn sử dụng implicit intent, hé thống Android sẽ tìm kiếm tất
cả thành ph thích hợp để start bằng cách cách so sánh nội dung của Intent đc gửi với các Intent filter đc khai báo trong ứng dụng khác Nếu intent đc gửi đó khớp với intent fñlter trong một component hoặc một ứng dụng nào đó, thì ngay lập tức
hệ thống sẽ khởi động thành ph đó và cung cấp cho nó intent ban đần đc gửi Nếu nhí Ân intent filter tương thích thì hệ thống sẽ hiển thị hộp thoại để người dùng
có thể chọn ứng dụng nào sẽ sử dụng
Intent filter (b6 loc intent) 14 mét thé trong minifest nham xác định loại intent mà
thành ph % chứa intent filter đó muốn nhận ví dụ thế này nhé: khai bao intent filter cho một activity trong manifest đi`âi này có nghĩa là trong số các intent đc gửi đi intent nao c6é nội dung tương thích vs nội dung trong thẻ intent filter thì nó sẽ nhận intent đó Và ngược lại nếu bạn không khai báo bất kì Intent filter nào cho actIvIty cia minh thi activity đó chỉ có thể start bằng một explicit intent (intent trong minh)
Cấu trúc của một Intent
Một đối tượng intent sẽ mang theo thông tin mà hệ thống android cần để quyết định thành ph Äì nào sẽ đc start Và những thông tin đó bao g ôn :
Component Name: Tên của component được sfart
10
Trang 141.3.2
hoặc chọn)
Data: Sử dụng một đối tượng Uri tham chiếu tới dữ liệu sẽ đc thực hiện một hành
động nào đó Loại dữ liệu cung cấp thưởng được quyết định bởi action của intent Category: Một chuỗi chứa thông tin bổ sung v`êloại thành ph3n sẽ xử lý intent Để nhận đc các intent không tưởng minh thì bất buộc ứng dụng phải khai báo category
trong manifest, Va gia tri mac dinh la CATEGORY_DEFAULT
Extra: Cac cap key-value mang théng tin bổ sung c3Ần thiết để hoàn thành hành động được yêu c ầ1
Flag: Cở được định nghĩa trong lớp Intent có chức năng như siêu dữ liệu cho intent
Cỡ có thể ra lệnh hệ thống Android vêcách khởi chạy một (ví dụ, hoạt động sé
thuộc v tác vụ nào ) và cách xử lý sau khi nó được khởi chạy
Manifest
Moi trng dung da bất buộc phải có một file AndroidManifest.xml ở thư mục gốc
AndroidManifest cung cấp thông tin cơ bản của ứng dụng cho hệ đi `âi hành Android ví dụ
như:
1.4
Tên java package của ứng dụng
Các thành ph của ứng dụng, như danh sách các thành phần của ứng dụng, như
activity, services, broadcast receiver,
Tinh chất cia cdc thanh ph%h trong tng dung (vi du, mét app cd nhi‘&i activity thi activity nao sé direc goi dai tién khi vào app)
Đánh giá các tiến trình chứa runtime của ứng dụng
Danh sách các quy ân truy cập của ứng dụng c3n được người dùng cho phép Phiên bản Android tối thiểu
Các thư viện liên kết với ứng dụng Android
Activity trong Android
Giới thiệu
11
Trang 15Lớp Activity là thành phần quan trọng nhất của ứng dụng Android, cách mà chúng hoạt động tạo thành n`â tảng cơ bản của mô hình lập trình ứng dụng Android khởi chạy một ứng dụng thông thưởng bằng kích hoạt một Activity tương ứng với vòng đời cụ thể của nó trong quá trình hoạt động
Thường một Activity cung cấp một của sổ, ở đó ứng dụng sé dựng các thành phần
UI (User Interface - giao dién người dùng) Mặc định cửa sổ này có thể lấp đầy mà hình thiết bị, nhỏ hơn hoặc nổi phía trên các cửa sổ khác Hi hết các ứng dụng đìầi sử dụng nhi`âi màn hình khác nhau, có nghĩa nó sẽ phải có nhi ` Activity khác nhau Khi một Activity chỉ định là Main Activity, nó sẽ là màn hình đầu tiên khi khởi chạy ứng dụng Activity này có thể gọi và kích hoạt một Activity khác
Vong doi Activity
12
Trang 16
_— 0MB)
User navigates
to the activity — 0nRe8uMe) `
Another activity comes
The activity is finishing or
being destroyed by the system
Trang 17Hình 1-2 Vòng doi cia Activity Nhìn vào hình, ta thấy có các mốc chính trong quá trình hoạt động của Activity tương ứng với các phương thức mà bạn có thể quá tải là:
1.5
onCreate(Bundle savedInstanceState): Được gọi khi hoạt động mới được tạo, tại
đây khởi tạo các biến, nạp giao diện layout ., phương thức này cũng nhận dữ liệu lưu lại trạng thái hoạt động trước đó (với mục đích để phục hồ - savedlnsfanceState) Sau sự kiện này bao giở cũng gọi ngay lập tức onSfartQ) onStartQ: Được gọi ngay trước khi Activity hiển thị trên màn hình
onResume(): Được gọi ngay khi Activity bất đân có thể tương tác với người dùng,
và Activity nằm trên cùng trong danh sách các Activity của hệ thống Sau phương thức này là các chức năng của Activity hoạt động dựa trên tương tác của người dùng ., cho đến khi có một nguyên nhân nào đó mà phương thức OnPause được
gol
onPause(): Được gọi khi hệ thống sắp kích hoạt một Activity khác, nếu bạn quá tải
phương thức này, thưởng để lưu lại dự liệu thật nhanh để hệ thống còn kích hoạt Activity khác Ngay sau phương thức này nó sẽ gọi onResume() néu Activity duoc kích hoạt lại ngay, hoặc gọi OnStopQ nếu Activity bị ẩn đi
onStopQ: Được gọi khi nó bị ẩn đi Sau phương thức này, Activity có thể gọi
onRestartQ nếu nó được người dùng kích hoạt lại hoặc gọi onDestroy(Q để hết thúc
onDestroyQ: gọi khi Activity bị hủy hoàn toàn (ví dụ gọi fnish(), hoặc người dùng kill Activity)
Lưu trữ dữ liệu trong Android
Để lưu trữ dữ liệu trong Android thì nhà phát triển đã cung cấp nhi `âi lựa chọn trong việc lưu trữ dữ liệu như:
— Internal file storage: Lưu trữ các file riêng tư của ứng dụng (app-private files) trong hệ thống file của thiết bị
14
Trang 18— External file storage: Luu trir file trén hé thống file chia sẻ ra được bên ngoài Thường dùng cho các file mà người dùng được chia sẽ, chẳng hạn như hình ảnh, video
— Shared Preferences: Lưu trữ dữ liệu nguyên thủy bởi các cặp key-value
- Database: Lưu trữ các dữ liệu có cấu trúc trong cơ sở dữ liệu private
Ngoại trừ một số loại file trên External Storage, thì tất cả các cách lưu trữ này dành cho đữ liệu riêng tư của ứng dụng - dữ liệu khêng thể truy cập tự nhiên vào các ứng dụng khác Nếu muốn chia sẻ file với các ứng dụng khác nên sử dụng EileProvider API
Firebase là địch vụ cơ sở đữ liệu hoạt động trên n` tảng đám mây — cloud Kém theo
đó là hệ thống máy chủ cực kỳ mạnh mẽ của Google Chức năng chính là giúp người dùng lập trình ứng dụng bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu Cụ thể là những giao diện lập trình ứng dụng API đơn giản Mục đích nhằm tăng số lượng người
dùng và thu lại nhi u lợi nhuận hơn Đặc biệt, còn là dịch vụ đa năng và bảo mật cực tốt
Eirebase hỗ trợ cả hai nền tảng Android và IOS Không có gì khó hiểu khi nhi `i lập trình viên chọn Firebase làm nên tảng đầi tiên để xây dựng ứng dụng cho hàng triệu người dùng trên toàn thế giới
1.6 Broadcast Receiver trong Android
Khái niệm
Đã bao giờ bạn tự hỏi hệ thống Android làm cách nào mà có thể nhận biết được tất
cả những sự thay đổi của hê thống như lắng nghe tin nhắn đến, hành động rút - cắm sạc, hay hành động bật tắt mạng đó chính xác là hệ thống sử dung Broadcast Receiver dé làm Vậy chúng ta đi vào tìm hiểu Broadcast Receiver là gì
Broadcast Receiver là một trong 4 component lớn trong Android, với mục đích là lắng nghe các sự kiện, trạng thái của hệ thống phát ra thông qua Intent nhờ đó mà các lập trình viên có thể xử lí được các sự kiện hệ thống ở bên trong ứng dụng của mình Broadcast Receiver có thể hoạt động được cả khi ứng dụng bị tất đi, nghĩa là ở background chính vì vậy nó thưởng được sử dụng với service
15
Trang 19- Custom BroadcastReceiver
Thuong duoc stv dung dé truy fn thông điệp trong và ngoài ứng dụng nhưng không phải là sự thay đổi từ hệ thống mà là những thông điệp mà lập trình viên muốn truy ôn đi
- Local Broadcast Receiver
Ưu điểm so với BroadcastReceiver
e® Bạn sẽ không phải lo lắng v việc rò rỉ dữ liệu vì dữ liệu chỉ được gói gọn trong project của bạn mà thôi
e® Không phải lo lắng v`êcác lễ hổng bảo mật vì nó không send broadcast với ứng dụng khác
® Nó hiệu quả hơn việc gửi một Broadcast qua hệ thống
Các lưu ý v`êbảo mật và cách xử lí
— Nếu bạn không muốn sendBroadcast cho các đối tượng ở bên ngoài ứng dụng của bạn thì bạn có thể sử dụng LocalBroadcast vì LocalBroadcastManager hiệu quả hơn nhi li (không cẦñn giao tiếp liên tục) và cho phép bạn tránh suy nghĩ v bất kỳ vấn đề bảo mật nào liên quan đến các ứng dụng khác có thể nhận hoặc gửi các broadcast của bạn
- Không phát thông tin nhạy cảm bằng cách sử dụng intent không tưởng minh Thông tin có thể được đọc bởi bất kỳ ứng dụng nào đăng ký để nhận broadcast Có
ba cách để kiểm soát ai có thể nhận broadcast của bạn:
® Bạn có thể set các quy ñ cho Broadcast
@ Set package ma ban muGn gui Broadcast dén qua setPackage(String)
@ Su dung Local Broadcast
— Khi ban dang ky nhan Broadcast thi bat ctr tng dung nao ma ban dang ky dai cd thể gửi những thông tin độc hại đến ứng dụng của ban Có các cách phòng tránh sau đây:
16
Trang 20® Set các quy bạn cho là "Nguy hiểm”
® Bạn có thể set android:exported=false
® Local Broadcast
— Chú ý cách đặt tên hành động lắng nghe sao cho tránh trùng lặp tên
— Không nên chạy task nặng trong hàm onReceive(Q) nếu bạn muốn chạy thì chúng ta nên sử dụng một trong hai cách sau:
® Sử dụng goAsyncQ trong onReceiveQ
® Sử dụng JobScheduler
— Không nên start Activity tử Broadcast vì lúc này trải nghiệm người dùng đang chập chởn, nhất là khi có nhi`âi hơn một người nhận Thay vào đó hãy xem xét hiện thị các thông báo
1.7 Content Provider trong Android
Giới thiệu
Content provider là một thành phần để quản lý truy cập dữ liệu, nó cung cấp các phương thức khác nhau để các ứng dụng có thể truy cập dữ liệu tử một ứng dụng khác bằng cách sử dụng ContentResolver Content Provider có thể giúp cho một ứng dụng quản
lý quy truy cập đến dữ liệu được lưu bởi ứng dụng đó, hoặc các ứng dụng khác, và đó
là một cách để ta có thể chia sẻ dữ liệu cho các ứng dụng khác nhau Hình dưới đây biểu diễn cho việc cách content providers quản lý việc truy cập tới bộ nhớ
17
Trang 21Your content Ề
implementation
Your data storage
Hình 1-3 Biểu diễn cách content providers quản lý việc truy cập tới bộ nhớ Content Provider đi`âi phối việc truy cập tới bỗ lưu trữ dữ liệu thông qua các API
và các component như hình dưới, nó bao g Gn:
— Chia sẻ dữ liệu từ ứng dụng của bán tới các ứng dụng khác
— Gửi dữ liệu sang widget
— Trả vêmột kết quả gợi ý khi search cho ứng dụng của bạn thông qua Seach Framework sử dung SearchRecentSuggestionsProvider
- Đồng bộ dữ liệu của ứng dụng với server bằng cách sử dụng AbstractThreadedS yncAdapter
— Tải dữ liệu lên UI sử dụng CursorLoader
18
Trang 22Hình 1-4 Minh họa cách Content Provider đi `âi phối việc truy cập tới bễ lưu trữ dữ liệu
thông qua các API và các component Content Provider hoạt động rất giống với một cơ sở dữ liệu, bạn có thể truy vấn, chỉnh sửa nội dung, cũng như là thêm xóa các nội dung sử dụng các phương thức: insertQ, update(Q, deleteQ, queryÔ
Sử dụng Content Provider
Để sử dụng Content Provider ta làm theo các bước sau:
— Xác định kiểu dữ liệu
— Xac dinh Uniform Resource Identifier (URT
— Khai bao Content Provider trong manifest
Implement lop ContentProvider va caéc phương thức được yêu câu
Các phương thức c3 được Override trong lớp Content Provider:
— onCreate(Q: Phương thức này được gọi khi Provider được bắt đần, nếu quá trình
khởi tạo thành công trả v`ềtrue, ngược lại là false
19
Trang 23- query(): Phuong thirc nhan yéu ci tv Client Két qua được trả vênhư một đối tượng Cursor
- insert(): Phương thức chèn một dòng dữ liệu mới vào Content Provider
— delete(): Phuong thức xóa một dòng dữ liệu đã tôn tại
— updateQ: Phương thức cập nhật một dòng dữ liệu nào đó đã tôn tại
— gefTypeQ: Phương thức trả v`êkiểu MIME của dữ liệu tại các URI
1.8 Service trong Android
Khai niém
Một Service là một thành phn (componenf) có thể thực hiện các hoạt động lâu dài
trong background và nó không cung cấp một giao diện người dùng Một thành ph8n khác của ứng dụng có thể sfart nó, và nó tiếp tục chạy trong background ngay cả khi người dùng chuyển sang ứng dụng khác Ngoài ra một thành phn có thể liên kết (bind) với một Service để tương tác với Service đó, thậm chí là thực hiện truy thông liên tiến trình IPC (interprocess communication - IPC ban có thể hiểu là một hoạt động chia sẽ dữ liệu qua nhi ôi tiến trình, thông thưởng sử dụng giao thức truy thông và nó phải có Client và
Server) Ví dụ: một Service có thể thực hiện các giao dich mang, choi nhac, ra vao file I/O
hoặc tương tác với một confent provider, tat ca dG te background
Phân loại Service
Service được chia làm 3 loại khác nhau:
- Background Service
20
Trang 24chú ý trực tiếp Ví dụ một ứng dụng sử dụng một service để thu gom bộ nhớ chẳng hạn thì service là một Background Service, hoạt động mà người dùng không cần thiết phải để ý
Bound Service
Một service được gọi là Bound khi một thành ph %h ctia ứng dụng ràng buộc với nó
béi Idi goi bindService() Mét Bound Service cung cấp một giao diện Client - Server cho phép các thành ph tương tác với nó: gửi yêu c3, nhận kết quả và
thậm chí là IPC Một Bound Service chỉ chạy miễn là có một thành phần ràng buộc
với nó Có thể có nhi âi thành phần ràng buộc với Bound Service cùng lúc, nhưng khi tất cả tháo bỏ ràng buộc (unbound) thì nó sẽ Destroy Trước đây Service thưởng được chia là Started Service và Bound Service
Trang 25Mét Started Service hay 14 Unbound Service 1a service duoc khéi déng bang phương thức startServiceQ từ thành phần khác Và nó sẽ tiếp tục chạy trong background
kể cả khi thành ph % khởi tạo nó bị phá hủy Đây cũng là xem là mét Background Service theo cách chia trên
Độ ưu tiên các loại Service
Hệ thống Android bất buộc phải đừng một service khi bộ nhớ ít và phải khôi phục tài nguyên hệ thống cho Activity đang được sử dụng Nếu Service được ràng buộc với một Activity đang sử dụng, nó ít khả năng bị giết; nếu Service được khai báo và chạy ở chế độ Foreground né cũng khó biết giết Nếu Service là Started và chạy lâu dài, hệ thống
sẽ làm giảm vị trí ưu tiên của nó Vì phụ thuộc vào process (bạn có thể tìm hiểu thêm), thì
các loại service sẽ được xếp theo độ ưu tiên sau: Bound Service khó bị kill nhất, tiếp theo
la Foreground Serviceva Background Service
Bound > Foreground > Background
Các giá trị tra v étrong onStartCommand()
Khi Service bị hệ thống kill do thiếu bộ nhớ chẳng hạn, thì dưới đây là 3 giá trị trả
v éthuong ding trong onStartCommandQ) để thông báo với hệ thống Tùy vào bài toán mà bạn sử dụng cho thích hợp
- START_NOT_STICKY
Nếu hệ thống kill service khi giá trị này được trả v`ề thì service này không được khởi động lại trừ khi có một Intent đang được chở ở onStar(Command() Đây là lựa chọn an toàn nhất để tránh chạy Service khi không c3ñn thiết và khi ứng dụng có thể
khởi động lại một cách đơn giản các công việc chưa hoàn thành
- START_STICKY
Khi giá trị này được trả v trong onStartCommand, nếu service bị hệ théng kill
Nếu onStartCommand không có một intent nào chở nó nữa thì Service sẽ được hệ
thống khởi động lại với mét Intent null
- START_REDELEVER_INTENT
22
Trang 261.9
ma Service duoc nhan Di này thích hợp với các service đang thực hiện công
việc muốn tiếp tục ngay tức thì như download ñe chẳng hạn Ngoài 3 giá trị trên thì trong onStartCommandQ còn có thêm 2 giá trị trả v`ênữa là
Notification trong Android
Mét notification 1a mét théng điệp mà Android hiển thị bên ngoài giao diện ứng dụng của bạn để cung cấp cho người dùng lời nhắc, tin nhắn, hay bất kỳ thông tin gì từ ứng dụng của bạn Ngươi dùng có thể nhấn vào notification để mở ứng dụng, hoặc thực hiện một hành động trực tiếp trên notification như gửi tin nhấn
Notification Channel: Bắt đầu tử phiên bản 8.0 (Oreo), Android bắt đầi nhóm các thông báo (notification) vào các kênh (Channel) khác nhau Mỗi kênh sế có một hành vi
cụ thể, và hành vi này sẽ được áp dụng cho tất cả các thông báo của nó Mỗi kênh có một
ID đại diện cho nó
23
Trang 27CHUONG 2: GIỚI THIỆU CHUNG
2.1 _ Giới thiệu, lý do chọn đ tài
Hiện nay, công nghệ thông tin vô cùng phát triển mọi người đều sử dụng máy vi tính hoặc điện thoại di động để làm việc và giải trí Do đó việc xây dựng các ứng dụng cho điện thoại di động đang là một ngành công nghiệp mới đầy ti ân năng Với
sự phát triển nhanh chóng của xã hội, nhu c3 giải trí thông qua điện thoại di động ngày càng phổ biến như xem phim,chơi game lướt mạng xã hội,nghe nhạc , Trong
đó lợi ích của âm nhạc không chỉ giúp thư giấn mà còn có thể cải thiện chất lượng giấc ngủ, ngăn ngừa chứng trầm cảm, giảm đau, kiểm soát cơn thèm ăn, làm đẹp vóc dang, nâng cao chất lượng cuộc sống của con ngươi Vì vậy chúng em đã chọn đề tài “Xây dựng ứng dụng android nghe nhạc” với mục đích nghiên cứu, tìm hiểu v`ề ứng dụng nghe nhạc trên android để có thể đáp ứng nhu cÂi giải trí, giúp cho mọi người có thể thư giãn thông qua ứng dụng một cách dễ dàng
2.2 Các chức năng phần mền
- Phát nhạc: tắt nhạc, hẹn giờ, lặp lại, danh sách phát
- TZm kiếm: theo tên, theo nghệ sĩ
- Đềxuất: bài hát mới cập nhật
- Đánh giá nhạc: thích, không thích, chia sẻ
24
Trang 28Đăng nhập và không đăng nhập đi có thể sử dụng những chức năng như: chọn
album, chọn thể loại nhạc, tìm kiếm nhạc, chọn nhạc và nghe nhạc
Khi đăng nhập sẽ có thêm chức năng lưu nhạc vào danh sách phát
Yéu ca hé thong
Các yêu cân v êchức năng:
Ứng dụng cho phép người dùng phát nhạc theo yêu cân
Tìm kiếm theo bài hát, ca sĩ, thê loại,
Cập nhật thông tin v`êbảng xếp hạng âm nhạc
Quản lý thông tin cá nhân người dùng, tạo danh sách phát
Cho phép ngươi dung tải xuống các bài hát để người dung có thể nghe nhạc khi không có kết nối mạng
Cho phép ngươi dùng sử dụng bài hát đó làm nhạc chuông, cho điện thoại Cho phép ngươi dùng đăng ký tài khoản
Các yêu cân phi chức năng
Yêu c3 v`êsản phẩm
Tốc độ load các bài hát phải nhanh tránh tình trạng giật, lag khi sử dụng
Hỗ trợ đầu ra âm thanh đa dạng, xử lý âm thanh tốt
Đáp ứng các yêu c3 v`êgiải trí, thư giãn của người dùng
Chỉ sử dụng tối đa 100 MB bộ nhớ trên điện thoại
Thuong xuyên có các bản cập nhật nhằm cải thiện hoặc khắc phục các lỗi phát sinh (nếu có) đối với sản phẩm
Các bài hát phải được cập nhật một cách liên tục
Giao diện phải được thiết kế đơn giản dễ dàng sử dụng tuy nhiên vẫn phải có các chức năng c3 thiết
25
Trang 29Yéu cW v €t6 chite/ tién trZnh phat trién
Hệ thống hoạt đệng khi điện thoại sử dụng phiên bản android 5.0 trở lên
Ngôn ngữ lập trình được sử dụng : Java
Công cụ được sử dụng: Android Studio và dữ liệu được lưu trữ trên SQLite,
Firebase
Yêu c3 từ bên ngoài
Phải lược bỏ chỉ phí một cách tối giản để người dung có thể sử dụng sản phẩm với chỉ phí thấp nhất có thể
Hệ thống phải bảo mật, không được để lộ thông tin của người sử dụng
- Các bài hát có trong hệ thống phải đảm bảo vấn đ`ềv êmặt bản quy `& không
để tình trạng sử dụng các bài hát không có bản quy `
26
Trang 303.1 _ Phân tích thiết kế hệ thống
3.1.1 Sơ đÔuse case
CHUONG 3: THIẾT KẾ VÀ MÔ TẢ CHỨC NĂNG HỆ THỐNG
Hình 3-1 Biểu d use case téng quát
Đặc tả một số use case quan trọng:
Use case đăng ký/ đăng nhập của người dùng:
27
Trang 31Actor chính Người dùng
Actor phụ Không có
Ti & di & kién Không có
Hậu đi ân kiện Không có
2.1 Hệ thống lấy các phương thức đăng ký hiện tại
và hiển thị ra màn hình cho ngươi dùng chọn 2.2 Thay đổi giao diện ký thông tin cho ting
phương thực đăng nhập
28
Trang 334.3 Load lai giao diện
5 Trở về bài 5.I _ Hệ thống kiểm tra danh sách phát hiện tại và lấy bài trước trước
5.2 Ngừng bài hát hiện tại, làm mới thanh quá trình va phát bài hát trước
5.3 Load lai giao diện
6 Trộn danh 6.I _ Hệ thống lấy danh sách phát hiện tại và trộn thứ tự sách phát các bài hát
6.2 Load lai giao diện
7 Xem danh 7.1 Hé thống lấy danh sách phát hiện tại và hiển thị ra sách phát màn hình
Bảng 3-2 Mô tả use case nghe nhạc Use case quan ly danh sách phát của cá nhân:
30
Trang 34Actor chính Người dùng
Actor phụ Không có
T¡ ân đi ôi kiện Phải đăng nhập thành công
Trang 353 Nguoi ding yéu cH
x6a danh sach phat
4 Nguoi ding yéu cH
thêm bai hat vào
5 Neuoi ding yéu cH
xóa bài hát trong
Bảng 3-3 Mô tả use case quản lý danh sách phát cá nhân
Use case t7Zm kiếm:
Trang 36
Actor phu Không có
Ti ân đi ân kiện Không có
Hậu đi ân kiện Không có
Hành độc tác nhân | Phản ứng hệ thống
1 Nguoi dùng 1.1 Hệ thống mở input cho người nhập từ khóa
yéu ca tim 1.2 Hệ thống kiểm tra tử khóa
kiếm 1.3 Hệ thống trả v êdanh sách bài hát theo kết quả
Bảng 3-4 Mô tả use case tìm kiếm 3.1.2 Sơ đồtu3n tự
- Mục đích: biểu diễn tương tác giữa những người dùng và những đối tượng bên trong
hệ thống Sơ đ 'ônày cho biết các thông điệp được truy n tuần tự như thế nào theo thời
gian Thứ tự các sự kiện trong Sơ đ`ôtu3 tự hoàn toàn tương tự như trong scenario mô
tả use case tương ứng
Biểu diễn: Sơ đ ôtu3n tự được biểu diễn bởi các đối tượng và message truy Ân đi giữa các đối tượng đó
- Trong hệ thống quản lý bán hàng, chúng ta lựa chọn Sơ đ ôtương tác dạng tuẦn tự để biểu điễn các tương tác giữa các đối tượng Để xác định rõ các thành ph cn bổ sung trong Sơ đ ôlớp, trong mỗi Sơ đ ôtun tự của hệ thống quản lý bán hàng sẽ thực hiện: + Xác định rõ kiểu của đối tượng tham gia trong tương tác (ví dụ giao diện, đi `âi khiển hay thực thể)
+ Mỗi Sơ đồtu3n tự có thể có ít nhất một lớp giao diện (Form) tương ứng với chức nang (use case) mà sơ đ ôđó mô tả
+ Mỗi Sơ đ ôtu3n tự có thể liên quan đến một hoặc nhi `âi đối tượng thực thể Các đối tượng thực thể chính là các đối tượng của các lớp đã được xây dựng trong
Sơ đồthiết kế chỉ tiết Dưới đây là một số Sơ đ`ôtu3n tự cho các chức năng của ứng dụng nghe nhạc:
Sơ đồtun tự đăng ký/ đăng nhập
33
Trang 37Dang ky
Người dùng
ALT
Đã tồn tại
Thông báo tài khoản đã tồn tại và yêu cầu nhập lại
Chưa có
+ -~-~~- Đưa về giao diện người dùng
;Lưu vào cơ sở dữ liệu
Trang 38: Gửi yêu cầu đăng nhập Sử
If Giao diện đăng nhập
Ï iêm tra thông tin
thông tin sai +
Nếu thông tin sai
Hình 3-7 Sơ đ ôtu ân tự đăng nhập
Sơ đồtun tự nghe nhạc
Ngừng nhạc
35
Trang 39Giao dién phat nhac
Trang 40
Giao diộn phat nhac Hộ thong
4:Bài hỏt mới tiếp theo
4 -=S~.-==.=======~===z ma
Hỡnh 3- L0 Sơ đ ồtu 3n tự chuyển bài hỏt tiếp theo
Chuy đõn bài hỏt phớa trước
37