要想访问相册首先需要获取权限
目前权限在android13以后有了较大修改,所以需要分两种情况处理。下面代码中使用的所有未提及的工具类均为AndroidUtilCode SDK中的工具类,有其他的工具类也可自行使用
Android13及以上需在Manifest.xml中申请READ_MEDIA_IMAGES以及代码中动态申请READ_MEDIA_IMAGES权限
视频以及音频则需要获取其他权限READ_MEDIA_VIDEO和READ_MEDIA_AUDIO
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
PermissionUtils.permission(
Manifest.permission.READ_MEDIA_IMAGES
).callback { isAllGranted, granted, deniedForever, denied ->
if (isAllGranted) {
goAlbum()
} else {
showError("Please grant storage permission.")
}
}.request()
Android13以下需申请READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
PermissionUtils.permission(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
).callback { isAllGranted, granted, deniedForever, denied ->
if (isAllGranted) {
goAlbum()
} else {
showError("Please grant storage permission.")
}
}.request()
跳转相册图片列表的代码
private fun goAlbum() {
//进入相册选择·ACTION_GET_CONTENT选择如果跳到非系统文件管理的话是可以选择非图片文件的,会出现bug,比如用户可能选择一个视频或者其他的文件回来
//val albumIntent = Intent(Intent.ACTION_GET_CONTENT)
//ACTION_OPEN_DOCUMENT只能选择系统文件夹内的文件
val albumIntent = Intent(Intent.ACTION_OPEN_DOCUMENT)
albumIntent.type = "image/*"
//albumIntent.setType("video/*") //视频
//albumIntent.setType("audio/*") //音频
//文本选择
//albumIntent.putExtra(
Intent.EXTRA_MIME_TYPES,
arrayOf(
MimeType.DOC,
MimeType.DOCX,
MimeType.PDF,
MimeType.PPT,
MimeType.PPTX,
MimeType.XLS,
MimeType.XLSX,
MimeType.TXT
)
)
//albumIntent.setType("*/*");//无类型限制
//可多选
albumIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
startActivityForResult(albumIntent, 100)
}
object MimeType {
const val DOC: String = "application/msword"
const val DOCX: String =
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
const val XLS: String = "application/vnd.ms-excel application/x-excel"
const val XLSX: String = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
const val PPT: String = "application/vnd.ms-powerpoint"
const val PPTX: String =
"application/vnd.openxmlformats-officedocument.presentationml.presentation"
const val PDF: String = "application/pdf"
const val TXT: String = "text/plain"
}
选择图片返回监听
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode != RESULT_OK || requestCode != 100) return
data?.let {
val uriFile = UriUtils.uri2File(data.data)
LogUtils.e("文件路径", uriFile.path)
}
跳转视频以及音频相册列表均可使用这种方式,不过在Android13及以上的设备中需要申请相应的其他权限