Изменения в Android 10 MediaStore API

Uri uri = MediaStore.Audio.Artists.Albums.getContentUri("external", 
artistId);

String[] projection = new String[] {BaseColumns._ID};

Cursor cursor = 
mContext.getApplicationContext().getContentResolver().query
(uri,
projection,
null,
null,
null);

До Android 10 BaseColumns._ID возвращал album_id, а теперь в 10 он возвращает какой-то случайный идентификатор.

Когда я передал проекцию как null и получил все имена столбцов ниже, это имя столбца, которое я получил. Это в Android 10. [numsongs, artist, numsongs_by_artist, album, album_art, album_key, artist_id, maxyear, minyear, album_id]

Нет столбца _id, который был в Android 10 ниже.

Чтобы получить album_id в 10, мне пришлось использовать проекцию ниже

String[] projection = new String[] 
{MediaStore.Audio.Artists.Albums.ALBUM_ID};

Для того же Uri ниже представлены доступные столбцы, которые я получаю под Android 10. [album_art, maxyear, minyear, artist, album, artist_key, numsongs_by_artist, _id, numsongs, album_key, artist]

Здесь нет столбца album_id, _id возвращал album_id. Которая сейчас в 10 недоступна.

И теперь мне нужны разные коды, чтобы получить идентификатор альбома, один для Android 10 и один для Android 10 ниже.

И эти изменения нигде не перечислены в поведенческих изменениях Android 10. Это очень важные изменения для нас, такое небольшое изменение может сломать все наше приложение, которым пользуются 1,5 миллиона человек в день.

Как можно так измениться и не дать разработчикам ничего об этом знать? (ИЛИ) Есть ли что-то, чего мне не хватает в документации? (или) Как мне отслеживать эти изменения?


comment
Создал вопрос для того же. Issuetracker.google.com/issues/140508535   -  person Velu    schedule 07.10.2019


Ответы (1)


Ниже Android Q для MediaStore.Audio.Artists.Albums.getContentUri ("external", artistId) uri идентификатор альбома был доступен в столбце BaseColumns._ID, а в Android Q этот столбец недоступен, но по-прежнему возвращает какое-то случайное число, которое не является идентификатором альбома.

Мы должны использовать MediaStore.Audio.Artists.Albums.ALBUM_ID, чтобы получить идентификатор альбома в Android Q. Но это не работает для Android ниже Q, так как этот столбец в нем недоступен. И, следовательно, мы должны использовать две разные версии для ссылки на идентификатор альбома.

if (Build.VERSION.SDK_INT >= 29) {
    return MediaStore.Audio.Artists.Albums.ALBUM_ID;
}else{
    return BaseColumns._ID;
}    

Редактировать 1: Был поднят вопрос с Google примерно то же самое. https://issuetracker.google.com/issues/140508535. Google сказал, что это исправлено и будет доступно в следующем выпуске.

person Velu    schedule 16.09.2019
comment
Можете ли вы помочь мне с stackoverflow.com/questions/63543414/ - person jazzbpn; 24.08.2020