Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về HỆ THỐNG PHÂN QUYỀN ỨNG DỤNG nói chung và những thay đổi của hệ thống này từ phiên bản Android 6 Marshmallow.
Ở bài học này, chúng ta tiếp tục tìm hiểu về các loại nội dung đa phương tiện trong Android như hình ảnh, nhạc, video,… và cơ chế ContentProvider mà Android sử dụng để quản lý chúng.
Nội dung
Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:
Từng nghe nhạc, xem phim, xem ảnh (cái này thì quá dễ).
Biết một số định dạng file đa phương tiện phổ biến như MP3, FLAC, JPG, PNG,…
Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:
Các định dạng đa phương tiện được hỗ trợ trong Android.
Viết một chương trình nhỏ để xem ảnh, chơi nhạc có sẵn trong máy.
Các định dạng đa phương tiện được hỗ trợ trong Android
Chúng ta đều biết rằng các thông tin đa phương tiệnnhư hình ảnh, âm thanh, video,… được lưu trong máy tính dưới dạng các file. Chúng có thể tồn tại dưới nhiều định dạng khác nhau nữa như nhạc thì có OGG, MP3, FLAC, WAV; ảnh thì phổ biến nhất là JPG và PNG, GIF.
Phần nội dung dưới đây được sơ lược khá nhiều để các bạn có cái nhìn tổng quan là chính. Để tìm hiểu sâu hơn, các bạn có thể đọc cuốnAndroid Studio New Media Fundamentals của tác giả Wallace Jackson.
Android cũng có hỗ trợ rất nhiều định dạng phổ biến nói trên. Các bạn có thể tham khảo bảng sau để biết sơ qua các định dạng và các đời hệ điều hành hỗ trợ (dấu x là có hỗ trợ):
Cũng khá là dài phải không? Trên thực tế việc sử dụng các API có sẵn của Android để viết ứng dụng chơi nhạc hay xem hình khá là dễ dàng. Chúng ta có thể thử làm với ví dụ ngay sau đây.
Ứng dụng nghe nhạc trong máy
Bước 1: Chúng ta tạo một project mới như thường lệ, lấy tên là MediaExample:
Bước 2: Để ứng dụng có thể mở được nhiều định dạng đa phương tiện thì chúng ta cũng phải cân nhắc mức API. Ở đây mình chọn 4 để hỗ trợ cho nhiều.
Chọn loại Activity là Empty và tiếp tục:
Bước 3: Để đơn giản hoá toàn bộ kiến thức, chúng ta sẽ thống nhất là viết ứng dụng chơi tất cả những bài nhạc đang có trong máy, hiển thị danh sách bài hát ra ListView. Tạo một model có tên là Song.java:
package com.howkteam.mediaexample;
publicclassSong {privatelong id;
private String title;
private String artist;
publicSong(long songID, String songTitle, String songArtist) {
id = songID;
title = songTitle;
artist = songArtist;
}
publiclonggetID() {
return id;
}
public String getTitle() {
return title;
}
public String getArtist() {
return artist;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Bước 4: Để hiển thị dạng danh sách thì hiển nhiên là chúng ta sẽ cần đến Adapter và layout cho từng item. Nếu bạn đã quên cách làm thì ngó lại bài LISTVIEW và RECYCLERVIEW trước đó nhé. Đầu tiên chúng ta tạo layout:
package com.howkteam.mediaexample;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
publicclassSongAdapterextendsBaseAdapter {// Song list và layoutprivate ArrayList<Song> songs;
private LayoutInflater songInf;
// ConstructorpublicSongAdapter(Context c, ArrayList<Song> theSongs) {
songs = theSongs;
songInf = LayoutInflater.from(c);
}
@OverridepublicintgetCount() {
return songs.size();
}
@Overridepublic Object getItem(int position) {
returnnull;
}
@OverridepubliclonggetItemId(int position) {
return0;
}
@Overridepublic View getView(int position, View convertView, ViewGroup parent) {
// Ánh xạ đến layout mỗi bài
LinearLayout songLayout = (LinearLayout) songInf.inflate(R.layout.song, parent, false);
TextView songView = (TextView) songLayout.findViewById(R.id.song_title);
TextView artistView = (TextView) songLayout.findViewById(R.id.song_artist);
// Lấy bài hát hiện
Song currentSong = songs.get(position);
// Lấy tên tiêu đề và tác
songView.setText(currentSong.getTitle());
artistView.setText(currentSong.getArtist());
// Cài đặt tag cho mỗi bài là vị trí của mỗi
songLayout.setTag(position);
return songLayout;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Bước 6: Để có thể chơi nhạc, chúng ta cần một “Bộ điều khiển” (controller) để phát nhạc. Việc này có thể dễ dàng thực hiện bằng cách tạo lớp kế thừa từ lớp MediaController.
Bước 7: Hẳn các bạn cũng muốn là sau khi đóng ứng dụng, chương trình phát nhạc vẫn chạy như bình thường đúng không? Rất nhiều ứng dụng nghe nhạc khác cũng làm tương tự, để khi tắt màn hình thì nhạc vẫn chạy, chúng ta có thể làm điều đó bằng cách tạo ra một Service như sau:
Bước 9: Do app sử dụng menu và một số thành phần drawable ngoài, các bạn có thể tìm thấy trong thư mục /res/drawable ở file project đính kèm. Ngoài ra các bạn cần tạo thêm menu cho nó bằng cách chuột phải vào thư mục/res > New > Android resource directory
Tạo folder với thông số như hình:
Và tạo bên trong một file menu_main.xml với nội dung như sau:
Thêm nữa, chúng ta sẽ chỉnh file build.gradlecho Target dưới 23, ở đây mình chọn 22, để tạm thời tránh xung đột với Runtime Permission trên Android 6 trở lên (phần targetSdkVersion):
Qua bài này chúng ta đã nắm được Các định dạng đa phương tiện cơ bản trong Android, và sử dụng Service để làm một ứng dụng chơi nhạc nho nhỏ, thuận tiện.
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Xử lý nội dung đa phương tiện dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Project hoàn chỉnh cho bạn nào cần: Link Project