Android 10 个 MediaStore API 更改
Android 10 MediaStore API changes
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 中,它 returns 一些随机 ID。
当我将投影作为 null 传递并检索下面的所有列名时,我得到的是列名。这是在 Android 10。
[numsongs, 艺术家, numsongs_by_artist, 专辑, album_art, album_key, artist_id, maxyear, minyear, album_id]
Android 10.
下面没有 _id 列
要在 10 中获得 album_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 Q,对于 MediaStore.Audio.Artists.Albums.getContentUri("external", artistId) uri,专辑 ID 在 BaseColumns._ID 列和 android Q 中可用此列不可用,但仍然 returns 一些不是专辑 ID 的随机数。
我们必须使用 MediaStore.Audio.Artists.Albums.ALBUM_ID 来获取 Android Q 中的相册 ID。但是这不适用于 android Q 以下,因为该列在 android Q 中不可用.因此我们必须使用两个不同的版本来引用专辑 ID。
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 已表示已修复并将在下一个版本中提供。
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 中,它 returns 一些随机 ID。
当我将投影作为 null 传递并检索下面的所有列名时,我得到的是列名。这是在 Android 10。 [numsongs, 艺术家, numsongs_by_artist, 专辑, album_art, album_key, artist_id, maxyear, minyear, album_id]
Android 10.
下面没有 _id 列要在 10 中获得 album_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 Q,对于 MediaStore.Audio.Artists.Albums.getContentUri("external", artistId) uri,专辑 ID 在 BaseColumns._ID 列和 android Q 中可用此列不可用,但仍然 returns 一些不是专辑 ID 的随机数。
我们必须使用 MediaStore.Audio.Artists.Albums.ALBUM_ID 来获取 Android Q 中的相册 ID。但是这不适用于 android Q 以下,因为该列在 android Q 中不可用.因此我们必须使用两个不同的版本来引用专辑 ID。
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 已表示已修复并将在下一个版本中提供。