我正在尝试使用以下代码从设备中找到音频类型
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在仿真器上进行测试
解决方案
在您的数据库中,genre_id不存在。您从模拟器中卸载应用程序并进行检查。可能是在数据库上创建genre_id之前安装的。