java - 当我获得每首歌曲的专辑 ID 时,它返回重复项?
问题描述
我用来设置ALBUM ID的代码:
song.setAlbumID(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_ALBUMID)));
现在,当我在 logcat 中记录这些值时:
Log.d(TAG, "album ids: " + cursor.getLong(cursor.getColumnIndexOrThrow(SONG_ALBUMID)));
我在我的 logcat 中得到了这个:
Song: albumids: [1]
Song: albumids: [3]
Song: albumids: [1]
Song: albumids: [4]
Song: albumids: [5]
Song: albumids: [6]
Song: albumids: [1]
Song: albumids: [1]
Song: albumids: [1]
如您所见,多首歌曲具有相同的ALBUM ID,当我尝试更新ALBUM ART时,这给了我一个问题,因为 ID 为 1 的每首歌曲都将更新为我选择的ALBUM ART 。
如何给每首歌曲一个唯一的 ID?
编辑
final Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
final String musicsOnly = SONG_IS_MUSIC + "!=0";
// Querying the Media DATABASE.
cursor = resolver.query(musicUri, projection1, musicsOnly, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
do {
// Creating a SONG from the VALUES in each column.
Song song = new Song(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_ID)),
cursor.getString(cursor.getColumnIndexOrThrow(SONG_FILEPATH)));
song.setTitle(cursor.getString(cursor.getColumnIndexOrThrow(SONG_TITLE)));
song.setArtist(cursor.getString(cursor.getColumnIndexOrThrow(SONG_ARTIST)));
song.setAlbumID(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_ALBUMID)));
song.setAlbum(cursor.getString(cursor.getColumnIndexOrThrow(SONG_ALBUM)));
song.setDuration(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_DURATION)));
song.setYear(cursor.getInt(cursor.getColumnIndexOrThrow(SONG_YEAR)));
// Using the previously created maps to add the current song GENRE.
String currentGenreID = songIdToGenreIdMap.get(Long.toString(song.getId()));
String currentGenreName = genreIdToGenreNameMap.get(currentGenreID);
song.setGenre(currentGenreName);
//song.add(cursor.getLong(cursor.getColumnIndexOrThrow(SONG_ALBUMID)));
Log.d(TAG, "album id: " + cursor.getLong(cursor.getColumnIndexOrThrow(SONG_ALBUMID)));
// Adding the Song to the global array list 'songs'.
songs.add(song);
} while (cursor.moveToNext());
}
我如何在 Mediastore 中插入新的 ALBUM ART
final Uri sArtworkUri =
Uri.parse("content://media/external/audio/albumart");
Uri albumArtUri = ContentUris.withAppendedId(sArtworkUri, albumID);
ContentResolver resolver = c.getContentResolver();
ContentValues valuesAlbum = new ContentValues();
valuesAlbum.put(currentAlbumID, albumID);
valuesAlbum.put(currentAlbumData, file_path);
//Update albumArt.
resolver.delete(albumArtUri, null,null);
resolver.insert(sArtworkUri, valuesAlbum);
解决方案
由于没有人发布任何代码:
获取专辑曲目
public Cursor getAlbumTrackIds(Context context, String album_id) {
ContentResolver cr = context.getContentResolver();
final String _id = MediaStore.Audio.Media._ID;
final String stralbum_id = MediaStore.Audio.Media.ALBUM_ID;
final String track = MediaStore.Audio.Media.TRACK;
final String[] columns = {_id};
final String[] albumid = {album_id};
String where = stralbum_id + " = ?";
return cr.query(uri, columns, where, albumid, track);
}
使用相册更新媒体数据库没有意义,因为 android 会在扫描时处理这个问题。
推荐阅读
- python - Python MagicMock.return_value 返回 MagicMock 而不是 return_value
- python - 如何在 pandas 中使用 if 函数
- amazon-web-services - 如何在调用 API 网关的 Lambda 函数中进行 Node.js 路由(可能使用 express)?
- r - 努力根据模式删除单词(R中的文本分析)
- django - 值比较查询 Django
- sql - 根据 SQL 中另一个表中的值从列中提取子字符串
- html - 如何在保持相应表格结构的同时将表格行项水平居中?
- here-api - 无法到达 HERE api 的路点 1 错误
- python - 更新一个类中的多个项目,而不仅仅是一个
- reactjs - 每次状态变化时都对 useEffect 做出反应