新版startActivityForResult过期了,采用新的启动方式,intent设置要选择的文件mime。
file_max_length是最大文件大小
private lateinit var pdfSelectLauncher: ActivityResultLauncher<Intent>
pdfSelectLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
result?.let {
if (it.resultCode == Activity.RESULT_OK) {
it.data?.let { data ->
val fileUri: Uri? = data.data
fileUri?.let {
val path = PathUtils.getExternalAppDocumentsPath()
var orgFile = UriUtils.uri2File(it)
if (orgFile.length() > file_max_length) {
showNormalToast(getString(R.string.file_size_error), true)
return@let
}
val fileName = orgFile.name
val targetFile = File(path, fileName)
if (!targetFile.exists()) {
val parcelFileDescriptor =
requireContext().contentResolver.openFileDescriptor(
it,
"rw"
)
val fileDescriptor = parcelFileDescriptor!!.fileDescriptor
val fileInputStream = FileInputStream(fileDescriptor)
targetFile.createNewFile()
targetFile.writeBytes(fileInputStream.readBytes())
fileInputStream.close()
}
//处理文件
}
}
}
}
}
这里使用官方推荐选择文件的方式
val intent = Intent(Intent.ACTION_OPEN_CONTENT).apply {
type = "application/pdf"
flags =
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
addCategory(Intent.CATEGORY_OPENABLE)
}
if (intent.resolveActivity(requireActivity().packageManager) != null) {
pdfSelectLauncher.launch(intent)
}