2

我試圖檢索有關我的原始文件夾中的音樂文件的信息。我需要檢索持續時間,標題,藝術家等。我知道如何檢索存儲在外部存儲器中的音樂文件的這些信息,但我不知道如何在原始文件夾中查找音樂文件。幫助和鏈接將不勝感激!Android:從原始文件夾檢索音樂文件信息

回答

2

經過四處搜索並嘗試下面的例子,我沒有成功。 @Jignesh Shaw的解決方案給了我一個IllegalArgumentException,當我將設置MediaMetadataRetriever的來源和@Hanz克拉茨的解決方案是唯一能夠提取歌曲的持續時間(如他所描述的)

兩個,但是,我的靈感之間拿出一個工作解決方案然後

Uri mediaPath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.song_name); 
MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
mmr.setDataSource(this, mediaPath); 

信息進行提取,就像兩個用戶曾表示

String sponsorTitle = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); 
String sponsorArtist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST); 
//and so on... 

我不知道爲什麼這個工程完美,但@Hanz克拉茨的解決方案不。如果其他人偶然發現了這個線索,那麼如果你發佈了你的發現就會很好。謝謝大家!

0

這可能會幫助: -

String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 
String[] projection = { MediaStore.Audio.Media._ID, 
     MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE, 
     MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.DISPLAY_NAME, 
     MediaStore.Audio.Media.DURATION}; 

cursor = this.managedQuery(
     MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selection,null, null); 

private List<String> songs = new ArrayList<String>(); 

while(cursor.moveToNext()){ 
    songs.add(cursor.getString(0) + "||" + cursor.getString(1) + "||" + 
      cursor.getString(2) + "||" + cursor.getString(3) + "||" + 
      cursor.getString(4) + "||" + cursor.getString(5)); 
} 
+0

感謝您的嘗試,但這不是我要找的。正如問題所述,我已經知道如何從位於外部存儲器的文件中檢索信息。我試圖檢索原始文件夾中的文件信息 –

1

剛剛獲得FileDescriptor的原始資產,然後使用MediaMetadataRetriever提取元數據,如持續時間等

MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
    FileDescriptor fd = getResources().openRawResourceFd(R.raw.rocknroll).getFileDescriptor(); 
    mmr.setDataSource(fd); 
    String duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 

這工作正常持續時間,但不幸的是MediaMetadataRetriever有問題的藝術家,標題,...與一些MP3文件:Android MediaMetadataRetriever returns null values from most keys

+0

感謝您的幫助。你把我推向了正確的方向(請參閱我的編輯以獲得正確答案) –

+1

太棒了!你應該從你的問題中提取你的答案,然後將它作爲答案並接受它。在SO上回答問題並接受它們是完全正確的。 –

0

加載你的資源的路徑是這樣的:

String mediaPath = Uri.parse("android.resource://<your-package-name>/raw/filename").getPath(); 

請確保你沒有附加文件擴展名。例如使用 「文件名」,而不是 「FILENAME.MP3」

然後,您可以訪問ID3標籤(假設你使用MP3文件)是這樣的:

MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
mmr.setDataSource(mediaPath); 

String albumName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM); 

等..

希望這可以幫助!

+0

感謝您的幫助,您的回答將我推向正確的方向(請參閱編輯以獲取正確答案) –