Asked Jul 9th, 2018 1:49 AM 529 0 1
  • 529 0 1
0

Làm để nào để hiển thị Folder có chứa bài hát local trong android

Share
  • 529 0 1

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 ANSWERS


Answered Jul 9th, 2018 8:33 AM
Accepted
+4

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).

Share
Avatar Kids @Lynk
Jul 10th, 2018 1:06 AM

anh có thể hướng dẫn em chỗ đấy được không ạ, em chưa hiểu lắm

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.