Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓;以“打开”;实施_Android_Kotlin_Android Intent - Fatal编程技术网

Android 安卓;以“打开”;实施

Android 安卓;以“打开”;实施,android,kotlin,android-intent,Android,Kotlin,Android Intent,我正试图用Kotlin在Android应用程序中打开下载的文件。目前,我可以通过以下代码设置文件类型,在系统上使用推荐的应用程序打开 class Somelistener(private val workManager: WorkManager, private val adapter: someAdapter, private val lifecycle: LifecycleOwner) : AdapterView.OnItemClickListener { private fun ope

我正试图用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)
}
但是,我们不需要直接打开文件,而是通过“open with”提示询问用户,用户可以在哪里试用他想用哪个应用打开文件

这能做到吗?有什么意图


第二个问题,不是回答的必要条件,在startActivity的意图中,捆绑包应该是空的,因为我有它?此外,我似乎也找不到结果的起始点。

你要找的是
App chooser
。您可以通过
Intent.createChooser(目标、标题)
创建它。在您的场景中,它将是:

带有(意图(意图.动作视图)){
setDataAndType(uri,mime)
addFlags(Intent.FLAG\u GRANT\u READ\u URI\u权限)
val chooserentent=Intent.createChooser(该值为null)
活动?.startActivity(选择内容)
}

请参见

您要查找的是
应用程序选择器
。您可以通过
Intent.createChooser(目标、标题)
创建它。在您的场景中,它将是:

带有(意图(意图.动作视图)){
setDataAndType(uri,mime)
addFlags(Intent.FLAG\u GRANT\u READ\u URI\u权限)
val chooserentent=Intent.createChooser(该值为null)
活动?.startActivity(选择内容)
}

请参见

这似乎与我发布的代码片段没有任何区别。两者都会导致提示使用推荐的应用打开。我从另一个开发人员那里得知,我正在尝试做的事情无法完成。要使通用应用程序对任何应用程序都开放,不仅推荐你写了“用户可以试用他想用哪个应用程序来打开它”,这就是
chooser
的用意。如果要在选择器中显示任何应用程序,请将mime类型设置为“/”->
setDataAndType(uri,“*/*”)
Intent.createChooser将创建一个包含所有支持该类型的应用程序的选择器。您无法打开清单中不支持该文件的应用程序的文件。这似乎与我发布的代码段没有任何区别。两者都会导致提示使用推荐的应用打开。我从另一个开发人员那里得知,我正在尝试做的事情无法完成。要使通用应用程序对任何应用程序都开放,不仅推荐你写了“用户可以试用他想用哪个应用程序来打开它”,这就是
chooser
的用意。如果要在选择器中显示任何应用程序,请将mime类型设置为“/”->
setDataAndType(uri,“*/*”)
Intent.createChooser将创建一个包含所有支持该类型的应用程序的选择器。您无法使用清单中不支持该文件的应用程序打开该文件。