【问题标题】:Android "open with" implementationAndroid“打开方式”实现
【发布时间】:2020-10-20 08:43:00
【问题描述】:

我正在尝试使用 Kotlin 在 Android 应用中打开下载的文件。目前,我可以通过使用以下代码设置文件类型,在系统上使用推荐的应用程序打开

class Somelistener(private val workManager: WorkManager, private val adapter: someAdapter, private val lifecycle: LifecycleOwner) : AdapterView.OnItemClickListener {


private fun openWithOther(path: String?, context: Context?) {
    if (path == null || context == null) {
        return
    }
    val uri: Uri = Uri.fromFile(File(path))
    val mime: String? = getMimeType(path)

    val intent = Intent()
    intent.action = Intent.ACTION_VIEW
    intent.setDataAndType(uri, mime)
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    startActivity(context, intent, null)
}

但是,我们不需要直接打开文件,而是通过“打开方式”提示询问用户,用户可以在哪里试用他想用哪个应用程序打开文件。

这可以做到吗?有什么样的意图?

次要问题,不需要回答,在 startActivity 有意图,捆绑应该是空的,因为我有它?我似乎也找不到一些 startActivity 的结果。

【问题讨论】:

    标签: android kotlin android-intent


    【解决方案1】:

    您正在寻找的是App chooser。你可以通过Intent.createChooser(target, title)创建它。在您的情况下,它将是:

    with(Intent(Intent.ACTION_VIEW)) {
        setDataAndType(uri, mime)
        addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
        val chooserIntent = Intent.createChooser(this, null)
        activity?.startActivity(chooserIntent)
    }
    

    App Chooser

    【讨论】:

    • 这似乎与我发布的代码 sn-p 没有任何区别。两者都会提示使用推荐的应用程序打开。我从另一位开发人员那里得知我正在尝试做的事情无法完成。要对任何应用程序进行通用打开,不仅推荐
    • 你写道“用户可以试用他想用哪个应用程序打开它”,这就是 chooser 的意思。如果你想在选择器中显示任何应用程序,请将 mime 类型设置为 "/" -> setDataAndType(uri, "*/*")
    • Intent.createChooser 将创建一个包含所有支持该类型的应用程序的选择器。您无法使用清单中不支持该文件的应用程序打开文件。
    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2022-06-11
    • 2013-10-31
    • 1970-01-01
    相关资源
    最近更新 更多