Android Q / Android 10中错误获取类型栏(audio_genres)

问题描述 投票:0回答:1

我正在尝试使用以下代码从设备中找到音频类型

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在仿真器上进行测试

解决方案

android cursor mediastore android-10.0
1个回答
0
投票

在您的数据库中,genre_id不存在。您从模拟器中卸载应用程序并进行检查。可能是在数据库上创建genre_id之前安装的。

© www.soinside.com 2019 - 2024. All rights reserved.