how to get all all audio files from sd card android

后端 未结 4 1490
清酒与你
清酒与你 2020-12-30 16:35

I want to write a class which gets all the mp3 files from the whole sd card. But actually it only gets the audio files laying directly on the sd card. so it doesnt search tr

相关标签:
4条回答
  • 2020-12-30 17:07
    private void getallaudio()
        {
            String[] STAR = { "*" };
            controller.audioWrapper.clear();
            Cursor audioCursor = ((Activity) cntx).managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, STAR, null, null, null);
            if (audioCursor != null) 
            {
                if (audioCursor.moveToFirst()) 
                {
                    do 
                    {
                        String path = audioCursor.getString(audioCursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                        audioWrapper.add(new MediaWrapper(new File(path).getName(), path, "Audio",false));
    //                    Log.i("Audio Path",path);
                    }while (audioCursor.moveToNext());
    
                }
    //            audioCursor.close();
            }
        }
    
    0 讨论(0)
  • 2020-12-30 17:10
    final String MEDIA_PATH = Environment.getExternalStorageDirectory()
            .getPath() + "/";
    private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
    private String mp3Pattern = ".mp3";
    
    // Constructor
    public SongsManager() {
    
    }
    
    /**
     * 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);
        }
    }
    
    0 讨论(0)
  • 2020-12-30 17:12

    This code will give you an arrayList of hash map which content the song title as well as song absolute path

    public ArrayList<HashMap<String, String>> getAudioList() {
    
        ArrayList<HashMap<String, String>> mSongsList = new ArrayList<HashMap<String, String>>();
        Cursor mCursor = getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                new String[] { MediaStore.Audio.Media.DISPLAY_NAME,
                        MediaStore.Audio.Media.DATA }, null, null, null);
    
        int count = mCursor.getCount();
        System.out.println("total no of songs are=" + count);
        HashMap<String, String> songMap;
        while (mCursor.moveToNext()) {
            songMap = new HashMap<String, String>();
            songMap.put("songTitle",mCursor.getString(mCursor
                            .getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME)));
            songMap.put("songPath", mCursor.getString(mCursor
                    .getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
            mSongsList.add(songMap);
        }
        mCursor.close();
        return mSongsList;
    }
    
    0 讨论(0)
  • 2020-12-30 17:23

    You can also fetch Using ContentResolver class I have done like this and it's working fine

    public void getSongListFromStorage() {
            //retrieve song info
      ContentResolver musicResolver = getContentResolver();
      Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
      Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
    
      if (musicCursor != null && musicCursor.moveToFirst()) {
      //get columns
      int titleColumn = musicCursor.getColumnIndex
                        (android.provider.MediaStore.Audio.Media.TITLE);
      int idColumn = musicCursor.getColumnIndex
                        (android.provider.MediaStore.Audio.Media._ID);
     int artistColumn = musicCursor.getColumnIndex
                        (android.provider.MediaStore.Audio.Media.ARTIST);
     //add songs to list
      do {
          long thisId = musicCursor.getLong(idColumn);
          String thisTitle = musicCursor.getString(titleColumn);
          String thisArtist = musicCursor.getString(artistColumn);
          songList.add(new Song(thisId, thisTitle, thisArtist));
          } while (musicCursor.moveToNext());
       }
     }
    
    0 讨论(0)
提交回复
热议问题