通過文件選擇器選擇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)
        }
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容