gpt4 book ai didi

android - 在 Androidx 上使用 registerForActivityResult 选择文件

转载 作者:行者123 更新时间:2023-12-05 00:02:56 31 4
gpt4 key购买 nike

我需要在我的 webviewActivity 中实现选择文件选项,我发现的所有教程都只有带有 startActivityResult 的示例,但它目前已被弃用,所以我想要一些关于如何将此代码转换为新模板的帮助如文档中所示: https://developer.android.com/training/basics/intents/result
WebviewActivity.kt

class WebviewActivity: AppCompatActivity() {
val REQUEST_SELECT_FILE = 1
val FILE_CHOOSER_RESULT = 2
var uploadMessage: ValueCallback<Array<Uri>>? = null
var uploaded: ValueCallback<Uri>? = null

private fun launchWebview(url: String): WebView =
webview_id.apply{
loadUrl(url)
webViewClient : object = WebViewClient(){
//...//
}

webChromeClient : object = WebChromeClient(){
override fun onShowFileChooser(
webView: WebView?,
filePathCallback: ValueCallback<Array<Uri>>?,
fileChooserParams: WebChromeClient.FileChooserParams
): Boolean{
if (uploadMessage != null){
uploadMessage!!.onReceiveValue(null)
uploadMessage = null
}

uploadMessage = filePathCallback
val intent = fileChooserParams.createIntent()

startActivityForResult(intent, REQUEST_SELECT_FILE)

return true
}
}
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_SELECT_FILE){
uploadMessage!!.onReceiveValue(
WebChromeClient.FileChooserParams.parseResult(
resultCode, data
)
)
uploadMessage = null
} else if (requestCode == FILE_CHOOSER_RESULT){
val result = if (data == null || resultCode != RESULT_OK) null else data.data
uploaded!!.onReceiveValue(result)
uploaded = null
}
super.onActivityResult(requestCode, resultCode, data)
}
}
我使用这个链接来制作上面的代码: Android File Chooser not calling from Android Webview

最佳答案

你必须做某事。像那样:

private fun createFile() {
getResult.launch("chartName.pdf")
}

private val getResult = registerForActivityResult(
CreateSpecificTypeDocument("application/pdf")
) { uri ->
if(uri != null){
contentResolver.openFileDescriptor(uri, "w")?.use {
FileOutputStream(it.fileDescriptor).use { fileOutputStream ->
//DO sth. with file
}
}
}
}
和:
class CreateSpecificTypeDocument(private val type: String) :
ActivityResultContracts.CreateDocument() {
override fun createIntent(context: Context, input: String): Intent {
return super.createIntent(context, input).setType(type)
}
}

关于android - 在 Androidx 上使用 registerForActivityResult 选择文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68035953/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com