簡體   English   中英

如何使用MediaStore獲取存儲在android的內部存儲和外部存儲中的所有音樂文件?

[英]How to get all music files stored in internal storage and external storage in android using MediaStore?

我正在嘗試將我的應用程序的內部存儲和外部存儲中的所有歌曲作為列表視圖列出。 我正在使用以下代碼來獲取歌曲

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

        int durationColumn=musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.DURATION);


        do {
            try {
                long thisId = musicCursor.getLong(idColumn);
                String thisTitle = musicCursor.getString(titleColumn);
                String thisArtist = musicCursor.getString(artistColumn);
                String duration = musicCursor.getString(durationColumn);
                if (!thisArtist.equalsIgnoreCase("<unknown>")) {
                    //save track
                }

            } catch (Exception e) {

            }
        }
        while (musicCursor.moveToNext());

上面的代碼成功獲取了外部存儲器中的所有歌曲,但沒有獲取內部存儲器中的歌曲。 在沒有外部存儲的設備如Samsung Galaxy S8中,這是一個問題。 我也嘗試了以下uri的光標

musicUri = MediaStore.Audio.Media.INTERNAL_CONTENT_URI;

這使我獲得了我不需要的設備鈴聲和SMS鈴聲。

我在StackOverflow中經歷了類似的問題,那里的答案並沒有為我解決這個問題。

請幫忙。 謝謝。

我認為EXTERNAL一詞令人困惑。 它用於尋址內部存儲器掃描過程將把所有音樂輸入到媒體數據庫,而不管它是在內部還是外部媒體上。(請確保文件夾中沒有隱藏的.nomedia文件)。 以下代碼應返回您的所有音樂。 如果不是,那么我懷疑您的媒體數據庫未完全填充。

        public Cursor getAllTracks(Context context) {
    // gets all tracks
     Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    ContentResolver cr = context.getContentResolver();
    final String[] columns = {track_id ,track_no, artist, track_name,
            album, duration, path, year, composer};
    return cr.query(uri, columns, null, null, null);
}

這對我有用。 嘗試這個

 Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0";
    Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
    if (cursor != null) {
        if (cursor.moveToFirst()) {
            do {
                String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));

                SongInfo s = new SongInfo(name, artist, url);
                _songs.add(s);

            } while (cursor.moveToNext());

        }

        cursor.close(); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM