Android跳转系统文件管理页面获取文件(图片、视频、音频、文档等)

要想访问相册首先需要获取权限

目前权限在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及以上的设备中需要申请相应的其他权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值