【问题标题】:No apps can perform this action Android Intent using Kotlin没有应用程序可以使用 Kotlin 执行此操作 Android Intent
【发布时间】:2018-07-04 18:04:41
【问题描述】:

我正在使用 Android 官方文档中的以下代码 sn-ps 通过使用 Intent 的应用程序共享内容,但它显示“没有应用程序可以执行此操作”。在物理设备上。我安装了信使、电子邮件客户端和短信客户端。

val intent = Intent().apply {
    intent.action = Intent.ACTION_SEND
    intent.type = "text/plain"
    intent.putExtra(Intent.EXTRA_TEXT, "Text to share")
}

startActivity(Intent.createChooser(intent, "Sharing"))

【问题讨论】:

  • “在 Kotlin 中”在 Java 中是否有效?

标签: android android-intent kotlin


【解决方案1】:

我认为你应该改变你的意图初始化应用到这个:

val intent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, "Text to share")
}

当您修改应用内的意图变量时,您正在修改活动意图而不是全新的意图。

复制这段代码,你会明白我在说什么:

val intent_1 = Intent().apply {
    intent.action = Intent.ACTION_SEND
    intent.type = "text/plain"
    intent.putExtra(Intent.EXTRA_TEXT, "Text to share")
}

【讨论】:

  • 我之前试过这个,但是没有用。原因可能是在应用块而不是新创建的活动意图上设置内容
【解决方案2】:

这是我所知道的:

正如Fredy Mederos所说,你修改的值是Activity.getIntent,而不是new Intent

你应该这样写:

val intent = Intent().apply {
        action = Intent.ACTION_SEND
        type = "text/plain"
        putExtra(Intent.EXTRA_TEXT, "Text to share")
    }

或更准确地说:

val intent = Intent().apply {
        this.action = Intent.ACTION_SEND
        this.type = "text/plain"
        this.putExtra(Intent.EXTRA_TEXT, "Text to share")
    }

this 指向你初始化的new Intent()

【讨论】:

  • 接受了这个答案,指出了 this 关键字,它指的是初始化的意图。
【解决方案3】:

以下代码有效,而不是上面在问题中发布的代码。

val i = Intent(Intent.ACTION_SEND)
i.type = "text/plain"
i.putExtra(Intent.EXTRA_TEXT, "Content to share")
startActivity(Intent.createChooser(i, "Sharing"))

我不确定为什么问题中的代码不起作用,但我的猜测是 intent 与活动的意图有关,并且当我从 Intent 类实例化另一个对象时它会起作用。

【讨论】:

    【解决方案4】:

    你可以替换startActivity(Intent.createChooser(i, "Sharing")) startActivity(i)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    相关资源
    最近更新 更多