鍍金池/ 問(wèn)答/Android/ android遍歷出所有的音樂(lè)文件,將音樂(lè)文件刪除,重新運(yùn)行后,查詢List還顯

android遍歷出所有的音樂(lè)文件,將音樂(lè)文件刪除,重新運(yùn)行后,查詢List還顯示刪除的音樂(lè)文件

將音樂(lè)文件刪除,重新運(yùn)行后,查詢List還顯示刪除的音樂(lè)文件

List<Music> list=new ArrayList<>();
        //查詢媒體數(shù)據(jù)庫(kù)
        Cursor cursor=getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,
                null,null ,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
        //遍歷數(shù)據(jù)庫(kù)
        if (cursor.moveToFirst()){
            while (!cursor.isAfterLast()) {
                // 歌曲編號(hào)
                int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));
                // 歌曲id
                int trackId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));
                // 歌曲標(biāo)題
                String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
                // 歌曲的專輯名:MediaStore.Audio.Media.ALBUM
                String album = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
                // 歌曲的歌手名: MediaStore.Audio.Media.ARTIST
                String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
                // 歌曲文件的路徑 :MediaStore.Audio.Media.DATA
                String url = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
                // 歌曲的總播放時(shí)長(zhǎng):MediaStore.Audio.Media.DURATION
                int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
                // 歌曲文件的大小 :MediaStore.Audio.Media.SIZE
                Long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));
                // 歌曲文件顯示名字
                String disName = cursor.getString(cursor.getColumnIndexOrThrow(
                        MediaStore.Audio.Media.DISPLAY_NAME));
                // 是否為音樂(lè)
                int isMusic = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));

                cursor.moveToNext();
                if (isMusic != 0) { // 只把音樂(lè)添加到集合當(dāng)中
                    Music music=new Music();
                    music.setTitle(title);
                    music.setArtist(artist);
                    music.setUrl(url);
                    music.setDuration(duration);
                    music.setSize(size);
                    music.setDisName(disName);

                    list.add(music);
                }
            }
            Log.d("url","Service_list="+list);
        }
        cursor.close();
回答
編輯回答
話寡
首先要明確一個(gè)問(wèn)題,ContentProvider維護(hù)MediaStore.Audio.Media.EXTERNAL_CONTENT_URI對(duì)應(yīng)的媒體文件信息都是通過(guò)數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)的

參考資料:

  1. Trigger mediascanner on specific path (folder), how to?
  2. Adding Files to Android’s Media Library Using the MediaScanner
2018年7月29日 05:07
編輯回答
魚(yú)梓

你上面的代碼無(wú)法查看你是什么刪除的,是通過(guò)代碼刪除還是手動(dòng)刪除?重新運(yùn)行

2017年8月25日 08:47
編輯回答
貓小柒

你通過(guò)媒體庫(kù)訪問(wèn)的,媒體庫(kù)存在緩存,要么手動(dòng)刷新媒體庫(kù)要么對(duì)文件是否存在進(jìn)行判斷。不過(guò)同樣添加一個(gè)新的文件時(shí)可能存在搜索不到的情況,所以建議是刷新媒體庫(kù)。

2018年3月27日 09:17