Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Tạo một Ứng dụng Phát nhạc trên Android: Phát Bài hát

by
Difficulty:BeginnerLength:MediumLanguages:

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Trong loạt bài này, chúng ta đang tạo một trình phát nhạc trên Android bằng các lớp MediaPlayerMediaController. Trong phần đầu tiên, chúng ta đã tạo ra ứng dụng và xây dựng giao diện người dùng để phát nhạc. Chúng ta trình bày danh sách các bài hát trên thiết bị người dùng và chỉ định một phương thức để thực thi khi người dùng thực hiện một sự lựa chọn. Trong phần này, chúng ta sẽ cài đặt một lớp Service để phát nhạc liên tục, ngay cả khi người dùng không trực tiếp tương tác với ứng dụng.

Giới thiệu

Chúng ta sẽ cần làm cho ứng dụng buộc với Service phát nhạc để tương tác với việc phát nhạc, do đó bạn sẽ học được một số khía cạnh cơ bản về vòng đời của Service trong hướng dẫn này nếu bạn vẫn chưa tìm hiểu về chúng trước đây. Dưới đây là bản xem trước kết quả cuối cùng mà chúng ta đang hướng tới:

Android Music Player

Trong phần cuối cùng của loạt bài này, chúng ta sẽ thêm các điều khiển và chúng ta cũng đảm bảo ứng dụng sẽ tiếp tục hoạt động ở các trạng thái ứng dụng khác nhau. Sau đó, chúng ta sẽ theo dõi tiếp loạt bài này với các cải tiến bổ sung mà bạn có thể muốn thêm, chẳng hạn như điều khiển âm thanh, stream video, và những cách khác để trình bày các tập tin đa phương tiện.

1. Tạo một Service

Bước 1

Thêm một lớp mới vào ứng dụng của bạn, đặt tên cho nó là MusicService hoặc một cái tên khác mà bạn chọn. Hãy chắc chắn rằng nó trùng với tên mà bạn liệt kê trong Manifest. Khi tạo lớp trong Eclipse, hãy chọn android.app.Service làm lớp cha của nó. Eclipse sẽ nhập vào một cái sườn:

Khai báo thừa kế trong dòng mở đầu của lớp để cài đặt một số interface mà chúng ta sẽ sử dụng để phát nhạc:

Eclipse sẽ hiển thị một lỗi trên tên lớp. Di chuyển chuột lên lỗi và chọn Add unimplemented methods. Chúng ta sẽ thêm code vào các phương thức trong giây lát nữa. Các interface mà chúng ta đang cài đặt sẽ hỗ trợ quá trình tương tác với lớp MediaPlayer.

Lớp của bạn cũng sẽ cần thêm các dòng import sau đây:

Bước 2

Thêm các biến đối tượng sau vào lớp Service mới:

Chúng ta truyền danh sách các bài hát vào lớp Service, phát từ đó bằng cách sử dụng lớp MediaPlayer và theo dõi vị trí của bài hát hiện tại sử dụng biến đối tượng songPosn. Bây giờ, hãy cài đặt phương thức onCreate cho Service:

Bên trong onCreate, gọi phương thức của lớp cha, khởi tạo vị trí và các biến đối tượng của MediaPlayer:

Tiếp theo, hãy thêm một phương thức để khởi tạo lớp MediaPlayer, sau phương thức onCreate:

Bên trong phương thức này, chúng ta cấu hình trình phát nhạc bằng cách thiết lập một số thuộc tính của nó như hình dưới đây:

WAKE LOCK sẽ cho phép tiếp tục phát nhạc khi thiết bị ở trong chế độ idle và chúng ta thiết lập kiểu stream thành music. Thiết lập lớp như một listener cho (1) khi đối tượng của MediaPlayer được chuẩn bị, (2) khi bài hát đã phát xong và khi (3) một lỗi sinh ra:

Chú ý rằng chúng tương ứng với các giao diện mà chúng ta đã cài đặt. Chúng ta sẽ thêm code vào các phương thức onPrepared, onCompletion, và onError để đáp ứng các sự kiện này. Trở lại onCreate, hãy gọi initMusicPlayer:

Bước 3

Đã đến lúc thêm một phương thức vào lớp Service để truyền danh sách các bài hát từ Activity:

Chúng ta sẽ gọi phương thức này sau trong hướng dẫn. Điều này sẽ là một phần của sự tương tác giữa các lớp ActivityService, để làm điều đó chúng ta cũng cần một đối tượng Binder. Thêm đoạn code sau vào lớp Service sau phương thức setList:

Chúng ta cũng sẽ truy cập thông tin này từ lớp Activity.

2. Khởi động Service

Bước 1

Trở lại lớp Activity chính của ứng dụng, bạn sẽ cần thêm các import bổ sung sau:

Và bạn cũng cần khai báo ba biến đối tượng mới:

Chúng ta sẽ phát nhạc trong lớp Service, nhưng điều khiển nó từ lớp Activity, nơi mà giao diện người dùng của ứng dụng hoạt động. Để thực hiện việc này, chúng ta sẽ phải ràng buộc với lớp Service. Đối tượng ở trên đại diện cho lớp ServiceIntent, cũng như một cờ để theo dõi liệu lớp Activity có được ràng buộc với lớp Service hay không. Thêm các thứ sau đây vào lớp Activity của bạn, sau phương thức onCreate:

Các phương thức callback sẽ thông báo cho lớp khi đối tượng Activity kết nối thành công với đối tượng Service. Khi điều đó xảy ra, chúng ta sẽ có được một tham chiếu đến đối tượng Service để Activity có thể tương tác với nó. Nó bắt đầu bằng cách gọi phương thức để truyền danh sách bài hát. Chúng ta thiết lập cờ boolean để theo dõi tình trạng ràng buộc. Bạn sẽ cần phải import lớp Binder mà chúng ta đã thêm vào lớp Service ở đầu của lớp Activity:

Đừng quên thay đổi tên gói và tên lớp để phù hợp nếu cần.

Bước 2

Chúng ta sẽ cần khởi động đối tượng Service khi đối tượng Activity khởi động, để override phương thức onStart:

Khi đối tượng Activity bắt đầu, chúng ta tạo ra đối tượng Intent nếu nó chưa tồn tại, ràng buộc nó, và khởi động nó. Thay đổi code nếu bạn đã chọn một tên khác cho lớp Service. Lưu ý rằng chúng ta sử dụng đối tượng kết nối mà chúng ta đã tạo ra để khi kết nối tới đối tượng Service bị ràng buộc, chúng ta sẽ truyền danh sách bài hát. Chúng ta cũng có thể tương tác với đối tượng Service để điều khiển phát nhạc.

Trở lại lớp Service của bạn để hoàn thành quá trình ràng buộc này. Thêm một biến đối tượng đại diện cho lớp inner Binder mà chúng ta đã thêm vào:

Bây giờ hãy sửa đổi phương thức onBind để trả về đối tượng này:

Thêm phương thức onUnbind để giải phóng tài nguyên khi đối tượng Service không được liên kết:

Điều này sẽ thực thi khi người dùng thoát khỏi ứng dụng, tại thời điểm đó chúng ta sẽ ngừng Service.

3. Bắt đầu phát

Bước 1

Hãy thiết lập ứng dụng để phát một bản nhạc. Trong lớp Service của bạn, hãy thêm phương thức sau đây:

Bên trong phương thức, bắt đầu bằng cách reset lại MediaPlayer vì chúng ta cũng sẽ sử dụng code này khi người dùng phát các bài hát tiếp theo:

Tiếp theo, lấy bài hát từ danh sách, trích xuất ID cho nó bằng đối tượng Song của nó, và mô hình hoá điều này như là một URI:

Bây giờ chúng ta có thể thử thiết lập URI này làm nguồn dữ liệu cho đối tượng MediaPlayer, nhưng ngoại lệ có thể xảy ra nếu một lỗi xuất hiện do đó chúng ta sử dụng một khối try/catch:

Sau khối catch, hoàn tất phương thức playSong bằng cách gọi phương thức không đồng bộ của MediaPlayer để chuẩn bị nó:

Bước 2

Khi MediaPlayer được chuẩn bị, thì phương thức onPrepared sẽ được thực thi. Eclipse sẽ chèn nó vào lớp Service của bạn. Bên trong phương thức này, chúng ta bắt đầu phát nhạc:

Để người dùng chọn bài hát, chúng ta cũng cần một phương thức trong lớp Service để thiết lập bài hát hiện tại. Hãy thêm nó ngay:

Chúng ta sẽ gọi nó khi người dùng chọn một bài hát từ danh sách.

Bước 3

Hãy nhớ rằng chúng ta đã thêm một thuộc tính onClick vào layout cho mỗi phần tử trong danh sách bài hát. Giờ hãy thêm phương thức đó vào lớp Activity chính:

Chúng ta thiết lập vị trí bài hát như là tag cho mỗi phần tử trong list view khi chúng ta định nghĩa lớp Adaptor. Chúng ta truy vấn nó ở đây và chuyển nó tới đối tượng Service trước khi gọi phương thức này để bắt đầu phát nhạc.

Trước khi bạn chạy ứng dụng của mình, hãy cài đặt nút end mà chúng ta đã thêm vào menu chính. Trong lớp Activity chính của bạn, thêm phương thức để đáp ứng hành động chọn phần tử trong menu:

Bên trong phương thức, thêm câu lệnh switch cho các hành động:

Chúng ta sẽ cài đặt chức năng trộn bài hát trong phần hướng dẫn tiếp theo. Đối với nút end, chúng ta sẽ dừng đối tượng Service và thoát khỏi ứng dụng. Nhấn nút back sẽ không thoát khỏi ứng dụng vì chúng ta giả định rằng người dùng muốn tiếp tục phát nhạc trừ khi họ chọn nút end. Sử dụng quy trình tương tự nếu ứng dụng bị hủy, override phương thức onDestroy của Activity:

Khi bạn chạy ứng dụng vào thời điểm này, bạn sẽ có thể phát các bài hát bằng cách chọn chúng từ danh sách và bạn cũng có thể thoát khỏi ứng dụng bằng cách sử dụng nút end.

Phần tóm tắt

Bây giờ chúng ta đã cài đặt việc phát nhạc cơ bản để phát các bài hát được chọn từ danh sách các tập tin bài hát của người dùng. Trong phần cuối của loạt bài này, chúng ta sẽ thêm bộ điều khiển phát nhạc thông qua đó người dùng có thể điều khiển việc phát nhạc. Chúng ta sẽ thêm thông báo để cho phép người dùng quay lại ứng dụng sau khi điều hướng khỏi nó và chúng ta sẽ cài đặt một số dịch vụ trợ giúp để làm cho ứng dụng đáp ứng với nhiều hành động khác nhau của người dùng.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.