Когда я получаю идентификатор альбома для каждой песни, она возвращает дубликаты? - PullRequest
0 голосов
/ 25 января 2019

Код, который я использую для установки АЛЬБОМА 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]

Как видите, несколько песен имеют одинаковый АЛЬБОМ ИД , что вызывает проблему при попытке обновить АЛЬБОМ АРТ , поскольку каждая песня с ИД 1 будет обновлена ​​до что АЛЬБОМ АРТ я выбрал.

Как дать каждой Песне УНИКАЛЬНЫЙ ID ?

EDIT

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

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

1 Ответ

0 голосов
/ 25 января 2019

Поскольку никто не опубликовал код:

чтобы получить треки для альбома

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

Нет смысла обновлять базу данных мультимедиа с помощью albumart, поскольку android позаботится об этом при сканировании.

...