哥 你这文件选择器器只能找到图片媒体文件吗,为啥我单独找个pdf一点返回结果都不给啊

#99 · closed · 3 comments

View on GitHub ↗

MayDayzll

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

javakam

> 两种情况: 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) } ```

MayDayzll

哥 如果还需要不走是不是就和intent没啥区别了,毕竟也能直接跳转到文件管理器啊?你这选择器主打就是相对解耦直接毁掉处理吗

javakam

我是捕获了`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 } ```