私のアプリケーションは、デバイスのストレージに保存された曲からメディアタグを読み込む必要がありますが、表示される名前はタイトルタグではなくファイル名です!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ファイル、問題を引き起こすことをチェックアウト!これをどうすれば解決できますか?
私があなたを助けてくれることを願っています!
ありがとうございます!
この原因を試してみてください私のアプリケーションの非常に長い開始時間...他にも可能性はありますか? –
そして問題はまったく解決されませんが、エラーはまだそこにあります –
残念ながらそれはしばらく時間がかかります。私はコンテンツプロバイダーではなくファイルそのものを直接使用しており、正しいデータを返しています。おそらくコンテンツプロバイダーが偽のデータの原因になっているようです。 – Jahnold