Я пытаюсь найти аудио жанры с устройства, используя следующий код
public ArrayList<Genre> OriginalGenre() {
String query;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
query = "_id in (select genre_id from audio_genres_map where audio_id in " +
"(select _id from audio_meta where is_music != 0))";
} else {
query = MediaStore.Audio.Genres.Members.GENRE_ID + " IN" +
" (SELECT " + MediaStore.Audio.Genres.Members.GENRE_ID + " FROM audio_genres_map WHERE " +
MediaStore.Audio.Genres.Members.AUDIO_ID + " IN" +
"(select _id from audio_meta where is_music != 0))";
}
ArrayList<Genre> genres = new ArrayList<>();
String[] columns = {
MediaStore.Audio.Genres._ID,
MediaStore.Audio.Genres.NAME,
};
Cursor cursor = Common.getInstance()
.getContentResolver()
.query(MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI,
columns, query, null, MediaStore.Audio.Genres.NAME);
if (cursor != null && cursor.getCount() > 0) {
if (cursor.moveToFirst()) {
do {
ArrayList<Album> albums = getAlbumsForSelection("GENRES", cursor.getString(0));
try {
if (albums != null && albums.size() > 0) {
Genre genre = new Genre(Long.parseLong(cursor.getString(0)),
MediaStore.Audio.Genres.NAME,
getAlbumArtUri(albums.get(0)._Id).toString(),
albums.size());
genres.add(genre);
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
} while (cursor.moveToNext());
if (cursor != null) {
cursor.close();
}
}
}
return genres;
}
ArrayList<Album> getAlbumsForSelection(String from, String selectionCondition)
{
if (from.equalsIgnoreCase("GENRES")) {
uri = MediaStore.Audio.Albums.getContentUri("external");
selection = "album_info._id IN "
+ "(SELECT (audio_meta.album_id) album_id FROM audio_meta, audio_genres_map "
+ "WHERE audio_genres_map.audio_id=audio_meta._id AND audio_genres_map.genre_id=?)";
selectionArgs = new String[]{String.valueOf(selectionCondition)};
sortBy = MediaStore.Audio.Albums.DEFAULT_SORT_ORDER;
ArrayList<Album> albums = new ArrayList<>();
String[] columns = {
BaseColumns._ID,
MediaStore.Audio.Albums.ALBUM,
MediaStore.Audio.Albums.ARTIST,
MediaStore.Audio.Albums.NUMBER_OF_SONGS,
};
Cursor cursor = Common.getInstance().getContentResolver().query(
uri,
columns,
selection,
selectionArgs,
sortBy);
if (cursor != null && cursor.moveToFirst()) {
do {
Album album = new Album(cursor.getLong(0), cursor.getString(1), cursor.getString(2), cursor.getString(3));
albums.add(album);
} while (cursor.moveToNext());
}
if (cursor != null) {
cursor.close();
}
return albums;
}
это ошибка
`Caused by: android.database.sqlite.SQLiteException: no such column: genre_id (code 1 SQLITE_ERROR): , while compiling: SELECT _id, name FROM audio_genres WHERE (genre_id IN (SELECT genre_id FROM audio_genres_map WHERE audio_id IN(select _id from audio_meta where is_music != 0))) ORDER BY name`
Этот код отлично работает на Android N или меньше, а также выше, но не в Android Q.
В недавнем Android Q произошли изменения, но нет подходящего решения, может кто-нибудь помочь
Я тестирую на эмуляторе с API 29
что такое решение