在我的應用程式中,我有幾個檔案Uri(NOT URI)存盤。這些是以下形式:
content://com.android.providers.downloads.documents/document/427
我的意圖是,一旦我單擊一個按鈕,在檔案閱讀器中打開其中一個 Uri(可能是 MS Word、Excel、PDF 閱讀器......取決于擴展名和設備)。
我目前正在嘗試這個片段:
val file = File(Uri.parse(uri).path!!)
val myMime: MimeTypeMap = MimeTypeMap.getSingleton()
val newIntent = Intent(Intent.ACTION_VIEW)
val mimeType: String = myMime.getMimeTypeFromExtension(file.extension).toString()
newIntent.setDataAndType(
FileProvider.getUriForFile(applicationContext, "${applicationContext.packageName}.provider", file), mimeType)
newIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
newIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
try {
startActivity(newIntent)
} catch (e: ActivityNotFoundException) {
}
但是每次我嘗試打開它時,我都會得到:
java.lang.IllegalArgumentException: Failed to find configured root that contains /document/427
你能告訴我我錯過了什么嗎?我在這里找到的沒有針對我的問題的答案。提前致謝!
更新 感謝@CommonsWare 的幫助,我設法避免了例外,我的代碼現在看起來像這樣:
val newIntent = Intent(Intent.ACTION_VIEW)
newIntent.addCategory(Intent.CATEGORY_OPENABLE)
newIntent.data = Uri.parse(uri)
newIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
newIntent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
try {
startActivity(newIntent)
} catch (e: ActivityNotFoundException) {
Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show()
}
我從這里得到 Uri:
val fileResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
viewModel.uploadFile(result, false)
}
fileFab.setOnClickListener {
val intent = Intent()
intent.type = "application/*"
intent.action = Intent.ACTION_OPEN_DOCUMENT
fileResultLauncher.launch(intent)
}
不幸的是,我得到了一個NoActivityFoundException
uj5u.com熱心網友回復:
擺脫:
val file = File(Uri.parse(uri).path!!)
...并將您的setDataAndType()電話替換為:
newIntent.setDataAndType(Uri.parse(uri), mimeType)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/426910.html
