Làm để nào để hiển thị Folder có chứa bài hát local trong android
Em đang làm một cái Local Music đang gặp vấn đề chỗ load Folder mong mọi người giúp em. Vấn đề em đang gặp hiện tại là làm thế nào để folder nào có songs thì nó hiện lên còn folder nào không có songs thì nó không hiện lên và folder đó có thể là folder cha hoặc cũng có thể là folder con. Demo như hình mong mọi người giúp em. Xin chân thành cảm ơn.
1 CÂU TRẢ LỜI
Trong android có hỗ trợ sẵn phương thức liệt kê các files/folders bên trong một thư mục listFiles()
, có phương thức để kiểm tra xem một item
trong danh sách đó có phải là file
hay folder
hay không.
Dưới đây là 1 ví dụ về việc lấy tất cả các file .mp3
trong ExternalStorageDirectory
:
final String MEDIA_PATH = Environment.getExternalStorageDirectory().getPath() + "/";
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
private String mp3Pattern = ".mp3";
/**
* Function to read all mp3 files and store the details in ArrayList
* */
public ArrayList<HashMap<String, String>> getPlayList() {
System.out.println(MEDIA_PATH);
if (MEDIA_PATH != null) {
File home = new File(MEDIA_PATH);
File[] listFiles = home.listFiles();
if (listFiles != null && listFiles.length > 0) {
for (File file : listFiles) {
System.out.println(file.getAbsolutePath());
if (file.isDirectory()) {
scanDirectory(file);
} else {
addSongToList(file);
}
}
}
}
// return songs list array
return songsList;
}
private void scanDirectory(File directory) {
if (directory != null) {
File[] listFiles = directory.listFiles();
if (listFiles != null && listFiles.length > 0) {
for (File file : listFiles) {
if (file.isDirectory()) {
scanDirectory(file);
} else {
addSongToList(file);
}
}
}
}
}
private void addSongToList(File song) {
if (song.getName().endsWith(mp3Pattern)) {
HashMap<String, String> songMap = new HashMap<String, String>();
songMap.put("songTitle", song.getName().substring(0, (song.getName().length() - 4)));
songMap.put("songPath", song.getPath());
// Adding each song to SongList
songsList.add(songMap);
}
}
Source code: https://stackoverflow.com/a/18268013
Để đạt được mong muốn của bạn, bạn chỉ cần chỉnh sửa phương thức addSongToList()
một chút.
Thay vì chỉ thêm songTitle
, songPath
vào danh sách, bạn tạo một danh sách chứa đường dẫn tới thư mục
có chứa bài hát (thực chất là songPath
bỏ đi tên của song
) cùng với số lượng bài hát có trong đường dẫn ấy (mỗi lần bạn check xem thư mục hiện tại có trong danh sách hay chưa, nếu có rồi thì tăng thêm 1).
anh có thể hướng dẫn em chỗ đấy được không ạ, em chưa hiểu lắm