【问题标题】:Android 10 MediaStore API changesAndroid 10 MediaStore API 更改
【发布时间】:2019-09-05 06:24:44
【问题描述】:
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,现在在 Android 10 中,它返回一些随机 ID。

当我将投影传递为 null 并检索下面的所有列名时,我得到的列名。这是在 Android 10 中。 [numsongs, artist, numsongs_by_artist, album, album_art, album_key, artist_id, maxyear, minyear, album_id]

Android 10 以下没有 _id 列。

要获得 10 中的专辑 ID,我必须使用以下投影

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

对于下面的相同 Uri 是我在 Android 10 以下获得的可用列。 [album_art,maxyear,minyear,艺术家,专辑,artist_key,numsongs_by_artist,_id,numsongs,album_key,艺术家]

这里没有album_id 列,_id 返回album_id。现在 10 中的哪个不可用。

现在我需要不同的代码来获取专辑 ID,一个用于 Android 10,一个用于 Android 10 以下。

而且这些变化并未在 Android 10 行为变化中列出。 这对我们来说是非常关键的变化,像这样的小变化可能会破坏我们每天被 150 万人使用的整个应用程序。

怎么会有人做出这样的改变而不让开发者知道任何事情呢? (要么) 有没有我想在文档中寻找的东西。 (或)如何跟踪这些更改?

【问题讨论】:

标签: android android-contentprovider mediastore android-music-player android-10.0


【解决方案1】:

在 android Q 下,对于 MediaStore.Audio.Artists.Albums.getContentUri("external", artistId) uri,专辑 ID 在 BaseColumns._ID 列中可用,而在 android Q 中此列不可用,但仍返回一些不是专辑ID的随机数。

我们必须使用 MediaStore.Audio.Artists.Albums.ALBUM_ID 来获取 Android Q 中的专辑 ID。但这不适用于以下 android Q,因为该列在其中不可用。因此,我们必须使用两个不同的版本来引用专辑 ID。

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

编辑 1: 向谷歌提出了同样的问题。 https://issuetracker.google.com/issues/140508535 。谷歌表示它已修复,并将在下一个版本中提供。

【讨论】:

猜你喜欢
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
相关资源
最近更新 更多