2016-05-14 5 views
0

私のアプリケーションは、デバイスのストレージに保存された曲からメディアタグを読み込む必要がありますが、表示される名前はタイトルタグではなくファイル名です!Android ContentResolverは曲名をロードしません

マイコード:

List<Song> SongList = new ArrayList<>(); 

ContentResolver musicResolver = mContext.getContentResolver(); 

Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 

Cursor cSong = musicResolver.query(musicUri, null, null, null, null); 

int iIDCol = cSong.getColumnIndex(MediaStore.Audio.Media._ID); 
int iTitleCol = cSong.getColumnIndex(MediaStore.Audio.Media.TITLE); 
int iArtistCol = cSong.getColumnIndex(MediaStore.Audio.Media.ARTIST); 
int iAlbumCol = cSong.getColumnIndex(MediaStore.Audio.Media.ALBUM); 
int iDurationCol = cSong.getColumnIndex(MediaStore.Audio.Media.DURATION); 
int iAlbumIDCol = cSong.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID); 
int iDataCol = cSong.getColumnIndex(MediaStore.Audio.Media.DATA); 

if (cSong != null && cSong.moveToFirst()) { 
    do { 
     String sArtist = cSong.getString(iArtistCol); 
     String sAlbum = cSong.getString(iAlbumCol); 

     if (sArtist.equals(MediaStore.UNKNOWN_STRING)) { 
      sArtist = mContext.getResources().getString(R.string.UnknownArtist); 
     } 

     if (sAlbum.equals(MediaStore.UNKNOWN_STRING)) { 
      sAlbum = mContext.getResources().getString(R.string.UnknownAlbum); 
     } 

     SongList.add(new Song(cSong.getLong(iIDCol), cSong.getLong(iAlbumIDCol), cSong.getString(iTitleCol), sArtist, sAlbum, cSong.getInt(iDurationCol), cSong.getString(iDataCol))); 
    } 
    while (cSong.moveToNext()); 
} 

cSong.close(); 

ファイル名ソング・タイトルが等しいため#Selfieが正しく表示されますが、他の人が正しく表示されません!

EDIT:

私は唯一の非MP3ファイル、問題を引き起こすことをチェックアウト!これをどうすれば解決できますか?

私があなたを助けてくれることを願っています!

ありがとうございます!

答えて

0

あなたはなど、タイトルを取得するためにMediaMetadataRetrieverを使用することができます。

String data = cursor.getString(iDataCol) 
MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
retriever.setDataSource(data); 

String title = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE); 

あなたはあまりにも

+0

この原因を試してみてください私のアプリケーションの非常に長い開始時間...他にも可能性はありますか? –

+0

そして問題はまったく解決されませんが、エラーはまだそこにあります –

+0

残念ながらそれはしばらく時間がかかります。私はコンテンツプロバイダーではなくファイルそのものを直接使用しており、正しいデータを返しています。おそらくコンテンツプロバイダーが偽のデータの原因になっているようです。 – Jahnold

0

をアーティスト&アルバムを得ることができます私はこの問題は、あなたがgetContentResolver.query用の投影引数を設定していないと思い()メソッド

この

ContentResolver musicResolver = getContentResolver(); 

    Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 

    Cursor cSong = musicResolver.query(musicUri,new String[]{MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.DATA},null,null,null); 
+0

これは何も変わりません!私の編集に注意してください:) –

関連する問題