add alternative media query syntax for Android 11
This commit is contained in:
parent
a44d9da2ea
commit
af598888b8
@ -284,13 +284,48 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
val limit = take ?: (total - offset)
|
val limit = take ?: (total - offset)
|
||||||
|
|
||||||
this.context?.run {
|
this.context?.run {
|
||||||
val imageCursor = this.contentResolver.query(
|
val imageCursor: Cursor?
|
||||||
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
|
||||||
imageMetadataProjection,
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
if (albumId == allAlbumId) null else "${MediaStore.Images.Media.BUCKET_ID} = $albumId",
|
imageCursor = this.contentResolver.query(
|
||||||
null,
|
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
||||||
"$imageOrderBy LIMIT $limit OFFSET $offset"
|
imageMetadataProjection,
|
||||||
)
|
android.os.Bundle().apply {
|
||||||
|
// Limit & Offset
|
||||||
|
putInt(android.content.ContentResolver.QUERY_ARG_LIMIT, limit)
|
||||||
|
putInt(android.content.ContentResolver.QUERY_ARG_OFFSET, offset)
|
||||||
|
// Sort
|
||||||
|
putStringArray(
|
||||||
|
android.content.ContentResolver.QUERY_ARG_SORT_COLUMNS,
|
||||||
|
arrayOf(
|
||||||
|
MediaStore.Images.Media.DATE_TAKEN,
|
||||||
|
MediaStore.Images.Media.DATE_MODIFIED
|
||||||
|
)
|
||||||
|
)
|
||||||
|
putIntArray(
|
||||||
|
android.content.ContentResolver.QUERY_ARG_SORT_DIRECTION,
|
||||||
|
intArrayOf(
|
||||||
|
android.content.ContentResolver.QUERY_SORT_DIRECTION_DESCENDING,
|
||||||
|
android.content.ContentResolver.QUERY_SORT_DIRECTION_DESCENDING
|
||||||
|
)
|
||||||
|
)
|
||||||
|
// Selection
|
||||||
|
if (albumId != allAlbumId) {
|
||||||
|
putString(android.content.ContentResolver.QUERY_ARG_SQL_SELECTION, "${MediaStore.Images.Media.BUCKET_ID} = ?")
|
||||||
|
putStringArray(android.content.ContentResolver.QUERY_ARG_SQL_SELECTION_ARGS, arrayOf(albumId))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
null
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
imageCursor = this.contentResolver.query(
|
||||||
|
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
||||||
|
imageMetadataProjection,
|
||||||
|
if (albumId == allAlbumId) null else "${MediaStore.Images.Media.BUCKET_ID} = $albumId",
|
||||||
|
null,
|
||||||
|
"$imageOrderBy LIMIT $limit OFFSET $offset"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
imageCursor?.use { cursor ->
|
imageCursor?.use { cursor ->
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
@ -312,12 +347,48 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
val limit = take ?: (total - offset)
|
val limit = take ?: (total - offset)
|
||||||
|
|
||||||
this.context?.run {
|
this.context?.run {
|
||||||
val videoCursor = this.contentResolver.query(
|
val videoCursor: Cursor?
|
||||||
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
|
||||||
videoMetadataProjection,
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
if (albumId == allAlbumId) null else "${MediaStore.Images.Media.BUCKET_ID} = $albumId",
|
videoCursor = this.contentResolver.query(
|
||||||
null,
|
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
||||||
"$videoOrderBy LIMIT $limit OFFSET $offset")
|
videoMetadataProjection,
|
||||||
|
android.os.Bundle().apply {
|
||||||
|
// Limit & Offset
|
||||||
|
putInt(android.content.ContentResolver.QUERY_ARG_LIMIT, limit)
|
||||||
|
putInt(android.content.ContentResolver.QUERY_ARG_OFFSET, offset)
|
||||||
|
// Sort
|
||||||
|
putStringArray(
|
||||||
|
android.content.ContentResolver.QUERY_ARG_SORT_COLUMNS,
|
||||||
|
arrayOf(
|
||||||
|
MediaStore.Video.Media.DATE_TAKEN,
|
||||||
|
MediaStore.Video.Media.DATE_MODIFIED
|
||||||
|
)
|
||||||
|
)
|
||||||
|
putIntArray(
|
||||||
|
android.content.ContentResolver.QUERY_ARG_SORT_DIRECTION,
|
||||||
|
intArrayOf(
|
||||||
|
android.content.ContentResolver.QUERY_SORT_DIRECTION_DESCENDING,
|
||||||
|
android.content.ContentResolver.QUERY_SORT_DIRECTION_DESCENDING
|
||||||
|
)
|
||||||
|
)
|
||||||
|
// Selection
|
||||||
|
if (albumId != allAlbumId) {
|
||||||
|
putString(android.content.ContentResolver.QUERY_ARG_SQL_SELECTION, "${MediaStore.Video.Media.BUCKET_ID} = ?")
|
||||||
|
putStringArray(android.content.ContentResolver.QUERY_ARG_SQL_SELECTION_ARGS, arrayOf(albumId))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
null
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
videoCursor = this.contentResolver.query(
|
||||||
|
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
||||||
|
videoMetadataProjection,
|
||||||
|
if (albumId == allAlbumId) null else "${MediaStore.Video.Media.BUCKET_ID} = $albumId",
|
||||||
|
null,
|
||||||
|
"$videoOrderBy LIMIT $limit OFFSET $offset"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
videoCursor?.use { cursor ->
|
videoCursor?.use { cursor ->
|
||||||
while (cursor.moveToNext()) {
|
while (cursor.moveToNext()) {
|
||||||
@ -486,13 +557,48 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
|
|
||||||
private fun getImageAlbumThumbnail(albumId: String, width: Int?, height: Int?): ByteArray? {
|
private fun getImageAlbumThumbnail(albumId: String, width: Int?, height: Int?): ByteArray? {
|
||||||
return this.context?.run {
|
return this.context?.run {
|
||||||
val imageCursor = this.contentResolver.query(
|
val imageCursor: Cursor?
|
||||||
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
|
||||||
arrayOf(MediaStore.Images.Media._ID),
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
if (albumId == allAlbumId) null else "${MediaStore.Images.Media.BUCKET_ID} = $albumId",
|
imageCursor = this.contentResolver.query(
|
||||||
null,
|
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
||||||
MediaStore.Images.Media.DATE_TAKEN + " DESC LIMIT 1"
|
arrayOf(MediaStore.Images.Media._ID),
|
||||||
)
|
android.os.Bundle().apply {
|
||||||
|
// Limit
|
||||||
|
putInt(android.content.ContentResolver.QUERY_ARG_LIMIT, 1)
|
||||||
|
// Sort
|
||||||
|
putStringArray(
|
||||||
|
android.content.ContentResolver.QUERY_ARG_SORT_COLUMNS,
|
||||||
|
arrayOf(
|
||||||
|
MediaStore.Images.Media.DATE_TAKEN,
|
||||||
|
MediaStore.Images.Media.DATE_MODIFIED
|
||||||
|
)
|
||||||
|
)
|
||||||
|
putIntArray(
|
||||||
|
android.content.ContentResolver.QUERY_ARG_SORT_DIRECTION,
|
||||||
|
intArrayOf(
|
||||||
|
android.content.ContentResolver.QUERY_SORT_DIRECTION_DESCENDING,
|
||||||
|
android.content.ContentResolver.QUERY_SORT_DIRECTION_DESCENDING
|
||||||
|
)
|
||||||
|
)
|
||||||
|
// Selection
|
||||||
|
if (albumId != allAlbumId) {
|
||||||
|
putString(android.content.ContentResolver.QUERY_ARG_SQL_SELECTION, "${MediaStore.Images.Media.BUCKET_ID} = ?")
|
||||||
|
putStringArray(android.content.ContentResolver.QUERY_ARG_SQL_SELECTION_ARGS, arrayOf(albumId))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
null
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
imageCursor = this.contentResolver.query(
|
||||||
|
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
||||||
|
arrayOf(MediaStore.Images.Media._ID),
|
||||||
|
if (albumId == allAlbumId) null else "${MediaStore.Images.Media.BUCKET_ID} = $albumId",
|
||||||
|
null,
|
||||||
|
MediaStore.Images.Media.DATE_TAKEN + " DESC LIMIT 1"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
imageCursor?.use { cursor ->
|
imageCursor?.use { cursor ->
|
||||||
if (cursor.moveToFirst()) {
|
if (cursor.moveToFirst()) {
|
||||||
val idColumn = cursor.getColumnIndex(MediaStore.Images.Media._ID)
|
val idColumn = cursor.getColumnIndex(MediaStore.Images.Media._ID)
|
||||||
@ -507,13 +613,48 @@ class PhotoGalleryPlugin : FlutterPlugin, MethodCallHandler {
|
|||||||
|
|
||||||
private fun getVideoAlbumThumbnail(albumId: String, width: Int?, height: Int?): ByteArray? {
|
private fun getVideoAlbumThumbnail(albumId: String, width: Int?, height: Int?): ByteArray? {
|
||||||
return this.context?.run {
|
return this.context?.run {
|
||||||
val videoCursor = this.contentResolver.query(
|
val videoCursor: Cursor?
|
||||||
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
|
||||||
arrayOf(MediaStore.Video.Media._ID),
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
if (albumId == allAlbumId) null else "${MediaStore.Video.Media.BUCKET_ID} = $albumId",
|
videoCursor = this.contentResolver.query(
|
||||||
null,
|
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
||||||
MediaStore.Video.Media.DATE_TAKEN + " DESC LIMIT 1"
|
arrayOf(MediaStore.Video.Media._ID),
|
||||||
)
|
android.os.Bundle().apply {
|
||||||
|
// Limit
|
||||||
|
putInt(android.content.ContentResolver.QUERY_ARG_LIMIT, 1)
|
||||||
|
// Sort
|
||||||
|
putStringArray(
|
||||||
|
android.content.ContentResolver.QUERY_ARG_SORT_COLUMNS,
|
||||||
|
arrayOf(
|
||||||
|
MediaStore.Video.Media.DATE_TAKEN,
|
||||||
|
MediaStore.Video.Media.DATE_MODIFIED
|
||||||
|
)
|
||||||
|
)
|
||||||
|
putIntArray(
|
||||||
|
android.content.ContentResolver.QUERY_ARG_SORT_DIRECTION,
|
||||||
|
intArrayOf(
|
||||||
|
android.content.ContentResolver.QUERY_SORT_DIRECTION_DESCENDING,
|
||||||
|
android.content.ContentResolver.QUERY_SORT_DIRECTION_DESCENDING
|
||||||
|
)
|
||||||
|
)
|
||||||
|
// Selection
|
||||||
|
if (albumId != allAlbumId) {
|
||||||
|
putString(android.content.ContentResolver.QUERY_ARG_SQL_SELECTION, "${MediaStore.Video.Media.BUCKET_ID} = ?")
|
||||||
|
putStringArray(android.content.ContentResolver.QUERY_ARG_SQL_SELECTION_ARGS, arrayOf(albumId))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
null
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
videoCursor = this.contentResolver.query(
|
||||||
|
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
||||||
|
arrayOf(MediaStore.Video.Media._ID),
|
||||||
|
if (albumId == allAlbumId) null else "${MediaStore.Video.Media.BUCKET_ID} = $albumId",
|
||||||
|
null,
|
||||||
|
MediaStore.Video.Media.DATE_TAKEN + " DESC LIMIT 1"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
videoCursor?.use { cursor ->
|
videoCursor?.use { cursor ->
|
||||||
if (cursor.moveToNext()) {
|
if (cursor.moveToNext()) {
|
||||||
val idColumn = cursor.getColumnIndex(MediaStore.Video.Media._ID)
|
val idColumn = cursor.getColumnIndex(MediaStore.Video.Media._ID)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user