通过文件选择器选择pdf格式文档

import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.activity.result.contract.ActivityResultContract
import com.energysh.router.bean.FileRequest

class FileContractReqUri : ActivityResultContract<FileRequest, Uri?>() {
    override fun createIntent(context: Context, input: FileRequest): Intent {
        val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
            // 设置 MIME 类型为 PDF 和 TXT
            type = "*/*" // 表示所有文件类型
//            flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
            val mimeTypes = arrayOf("application/pdf", "text/plain") // 仅显示 PDF 和 TXT
            putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes) // 限制 MIME 类型
            addCategory(Intent.CATEGORY_OPENABLE) // 确保只能打开可打开的文件(如文件管理器)
        }
        return intent
    }

    override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
        return intent?.data
    }
}
class FileReqUriLauncher(private val caller: ActivityResultCaller) :
    BaseActivityResultLauncher<FileRequest, Uri?>(caller, FileContractReqUri()) {
    override fun launch(input: FileRequest, callback: ActivityResultCallback<Uri?>) {
        when (caller) {
            is AppCompatActivity -> {
                PermissionUtil.requestPermission(isOld = false, caller,
                    PermissionBean.writeStoragePermissionBean(),
                    granted = {
                        super.launch(input, callback)
                    },
                    refused = {

                    })
            }
            is Fragment ->{
                PermissionUtil.requestPermission(isOld = false, caller,
                    PermissionBean.writeStoragePermissionBean(),
                    granted = {
                        super.launch(input, callback)
                    },
                    refused = {

                    })
            }
        }
    }
}

data class FileRequest(

    var clickPos: Int = 0,
) : Serializable, Parcelable {
    constructor(parcel: Parcel) : this(
        parcel.readInt(),
    )

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(clickPos)

    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<FileRequest> {
        override fun createFromParcel(parcel: Parcel): FileRequest {
            return FileRequest(parcel)
        }

        override fun newArray(size: Int): Array<FileRequest?> {
            return arrayOfNulls(size)
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容