2017-07-19 43 views
0

我試圖列出我的應用程序的內部存儲和外部存儲器中的所有歌曲作爲列表視圖。我使用下面的代碼獲取歌曲如何使用MediaStore在android中獲取存儲在內部存儲和外部存儲中的所有音樂文件?

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

上面的代碼被成功讀取外部存儲中的所有歌曲,但沒有取存放在內存中的歌曲。在沒有外部存儲的三星Galaxy S8等設備中,這是一個問題。 我也曾嘗試光標與下面的URI

musicUri = MediaStore.Audio.Media.INTERNAL_CONTENT_URI; 

這取我的設備鈴聲和短信鈴聲這不是我所需要的。

我已經經歷了類似的問題在StackOverflow和答案沒有解決這個問題給我。

請幫忙。 謝謝。

回答

0

我覺得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); 
} 
+0

我做同樣的上述步驟,但它不是我取的所有曲目。:( – hybrid

+0

你看到使用普通的Android音樂播放器所有的曲目? – Theo

+0

你可以試試我的自由的新播放列表管理器它會告訴你在媒體數據庫中找到了多少軌道順便說一句,我假設你的軌道是全部是mp3或者flac,Android忽略.wma擴展 – Theo

0

這對我有用。試試這個

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(); } 
相關問題