До Android 10 я использовал этот фильтр в своем запросе, чтобы избавиться от дубликатов альбомов.
String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0 ) GROUP BY (" + MediaStore.Audio.Media.ALBUM;
Но с Android 10 api 29 я получаю сообщение об ошибке, когда использую GROUP BY
В этой публикации я обнаружил, что она больше не работает с использованием SQL операторов в запросе, но в этом ответе они используют Hashmap , который я не хочу использовать, потому что мне нужно получать значения по позициям, которые я получаю из RecyclerView , и поэтому я Я использую ArrayList .
Теперь я получаю такие значения: myArrayList.get(position).getAlbum();
, но не уверен, как я могу добиться того же с Hashmap .
Как можно избавиться от этих дубликатов без оператора GROUP BY ?
Мой код
String[] projection2 = { MediaStore.Audio.Media.ALBUM_ID,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.IS_MUSIC};
String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0";
String sort = MediaStore.Audio.Media.ALBUM + " COLLATE NOCASE ASC";
cursor = resolver.query(musicUri, projection2, selection, null, sort);
try {
if (cursor != null) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Album album = new Album(cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)),
cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)));
albums.add(album);
cursor.moveToNext();
}
Log.d(TAG,"albums size: " + albums.size());
}
}catch (Exception e){
Log.e(TAG, "Exception caught when creating ALBUM!", e);
throw new Exception();
}