哥 你这文件选择器器只能找到图片媒体文件吗,为啥我单独找个pdf一点返回结果都不给啊
#99 · closed · 3 comments
View on GitHub ↗
fun Context.getFileSelector(type: Int = 1,callBack: FileSelectCallBack) {
val optionsPDF = FileSelectOptions().apply {
fileType = FileType.PDF
singleFileMaxSize = 5242880
}
FileSelector
.with(this)
.setTypeMismatchTip("不是要选择的类型")
.setMinCount(1, "只能选择一个哦!")
.setMaxCount(1, "只能选择一个哦")
.setOverLimitStrategy(FileGlobal.OVER_LIMIT_EXCEPT_OVERFLOW)
.setExtraMimeTypes(
"application/pdf"
)
.applyOptions(optionsPDF)
.filter(object : FileSelectCondition {
override fun accept(fileType: IFileType, uri: Uri?): Boolean {
return true
}
})
.callback(object :FileSelectCallBack{
override fun onError(e: Throwable?) {
ToastUtils.showShort("1111")
}
override fun onSuccess(results: List<FileSelectResult>?) {
ToastUtils.showShort("2222")
}
})
.choose()
} 选择完了以后啥都没有啊 我看domo的apk上面也是啊 图片啥的可以其他文件都不行了
Comments
> 两种情况:
1. 没设置请求码 `.setRequestCode(REQUEST_CHOOSE_FILE)` , 这个是我的问题默认应该是可以不填写requestCode才对
2. 选择结果没有捕获到, 下述方式二选一, 推荐方案① :
①使用`ActivityResultLauncher` : `mFileSelector = FileSelector.with(this, launcher = mStartForResult)`
```
private val mStartForResult: ActivityResultLauncher<Intent> =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
FileLogger.w("Back ok -> ActivityResultCallback")
handleResult(REQUEST_CHOOSE_FILE, result.resultCode, result.data)
}
```
②使用原生的`onActivityResult` : `mFileSelector = FileSelector.with(this)`
```
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
handleResult(REQUEST_CHOOSE_FILE, resultCode, data)
}
```
哥 如果还需要不走是不是就和intent没啥区别了,毕竟也能直接跳转到文件管理器啊?你这选择器主打就是相对解耦直接毁掉处理吗
我是捕获了`Intent`数据并处理, 没有返回结果就是`requestCode`的问题, 你上面的写法需要写成`mFileSelector = FileSelector.with()...`, 此外, 还有一种情形是传入和处理的`requestCode`不一致 :
```
传入: .setRequestCode(REQUEST_CHOOSE_FILE)
接收: mFileSelector?.obtainResult(REQUEST_CHOOSE_FILE, resultCode, data)
```
🍎刚升级了版本`v3.9.8`(图个吉利), 调整了`requestCode`处理机制 :
```
FileSelector默认requestCode值为1 👉 val REQUEST_CODE_DEFAULT: Int = 1
FileSelector处理传入(mRequestCode)和接收(requestCode)的比较:
if (requestCode == -1 || requestCode != mRequestCode) return
改为
if (requestCode != mRequestCode) {
mFileSelectCallBack?.onError(Throwable("请比较 setRequestCode() 和 obtainResult() 方法中的 requestCode 值是否一致!(Please compare whether the requestCode values in setRequestCode() and obtainResult() methods are consistent!)"))
return
}
```