我正在使用MediaStore获取所有图片的相册,之前在Android Q之前都能正常工作。但今天我将编译版本提升到29,它抛出了以下异常:
android.database.sqlite.SQLiteException: near "GROUP": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT bucket_id, bucket_display_name, mime_type FROM images WHERE ((is_pending=0) AND (is_trashed=0) AND (volume_name IN ( 'external_primary' ))) AND ( GROUP BY bucket_id )
以下是我查询MediaStore的代码:
String[] PROJECTION_BUCKET = {
MediaStore.Images.ImageColumns.BUCKET_ID,
MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
MediaStore.Images.ImageColumns.MIME_TYPE};
String BUCKET_GROUP_BY = "1) GROUP BY 1,(2";
String BUCKET_ORDER_BY = "MAX(datetaken) DESC";
Cursor cur = context.getContentResolver().query(getUriOfType(type),
PROJECTION_BUCKET,
BUCKET_GROUP_BY,
null,
BUCKET_ORDER_BY);
Android Q
中不支持 As Group, 有什么解决办法吗?
ContentProvider
的实现不要求使用符合SQL标准的数据库。特别地,没有要求MediaStore
必须使用符合SQL标准的数据库。你使用了一种技巧,在某些设备上一段时间内运行良好。现在你抱怨这种技巧不起作用了。最初就不应该使用这种技巧,因为从来没有保证任意的SQL都可以被破解成MediaStore
查询。所以,请利用这个机会修复你的代码,并使其在不同设备和版本上更加可靠。 - CommonsWare