Android 如何在API低于29的情况下从手机获取图像

Android 如何在API低于29的情况下从手机获取图像,android,kotlin,android-contentresolver,mediastore,Android,Kotlin,Android Contentresolver,Mediastore,我为Android开发图像库应用程序(min sdk 23,target sdk 29)。我正试图从手机上获取照片列表。代码如下: val list:MutableList=mutableListOf() val投影=阵列( MediaStore.Images.Media.\u ID, MediaStore.Images.Media.DATE_拍摄, MediaStore.Images.Media.ORIENTATION, MediaStore.Images.Media.SIZE ) val q

我为Android开发图像库应用程序(min sdk 23,target sdk 29)。我正试图从手机上获取照片列表。代码如下:

val list:MutableList=mutableListOf()
val投影=阵列(
MediaStore.Images.Media.\u ID,
MediaStore.Images.Media.DATE_拍摄,
MediaStore.Images.Media.ORIENTATION,
MediaStore.Images.Media.SIZE
)
val query=contentResolver?.query(
MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI,
投影,
无效的
无效的
MediaStore.Images.Media.DATE_take+“DESC”
)
查询?使用{cursor->
如果(cursor.count!=0){
val ididex=cursor.getColumnIndex(MediaStore.Images.Media.\u ID)
val sizeIndex=cursor.getColumnIndex(MediaStore.Images.Media.SIZE)
while(cursor.moveToNext()){
val id=cursor.getLong(idIndex)
val size=cursor.getInt(sizeIndex)
val contentUri:Uri=ContentUris.withAppendedId(
MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI,
身份证件
)
val photo=photo(contentUri,大小)
列表。添加(照片)
}
}
}
但Android Studio告诉我,一些MediaStore字段需要API级别29+。(例如,MediaStore.Images.Media.DATE_take、MediaStore.Images.Media.ORIENTATION、MediaStore.Images.Media.DATA等)。 所以我的问题是,我应该如何获得29以下API上的图像列表? studio也对
contentResolver.loadThumbnail()
方法作了同样的描述


接下来的问题是:在安卓系统中是否可以检索相册列表?或者我应该获得所有图像的列表,然后浏览它并挑选相册?

试试这个,即使使用API 29也可以:

private fun getAllImages(activity: Activity): ArrayList<Photo>? {
    var cursor: Cursor? = null
    var i = 0
    val arrayList: ArrayList<Photo> = ArrayList()
    if (cursor == null) {
        val resolver = activity.contentResolver
        cursor = resolver.query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            null,
            null,
            null,
            null
        )
        if (cursor != null) {
            while (i < cursor.count) {
                cursor.moveToPosition(i)
                val fieldIndex: Int = cursor.getColumnIndex(MediaStore.Images.Media._ID)
                val id: Long = cursor.getLong(fieldIndex)
                val imageUri =
                    ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id)
                arrayList.add(Photo("", imageUri))
                i++
            }
            cursor.close()
        }
    }
    return arrayList
}


data class Photo(var name: String, var uri: Uri)
将此权限添加到您的清单中,并确保已授予该权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

我在获取照片列表方面没有问题。我想知道如何获得照片缩略图(没有滑动),和相册列表。MediaStore.Images.Media.BUCKET_名称在29以下的API中不可用。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>