【问题标题】:intent.resolveActivity() returning null for ACTION_SEND intentintent.resolveActivity() 为 ACTION_SEND 意图返回 null
【发布时间】:2020-04-15 11:37:28
【问题描述】:

当用户单击我的应用中的按钮时,我想在他们的设备上启动默认的 SMS 应用,其中包含固定电话号码和示例文本。

为此,我决定关注the official documentation。我使用了示例代码中的确切函数:

fun composeMmsMessage() {
    val intent = Intent(Intent.ACTION_SEND).apply {
        data = Uri.parse("smsto:+2340000000000")  // I used a valid phone number in my actual code
        putExtra("sms_body", "Hi there!")
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

我认为还值得一提的是,我是从片段运行它,我认为 packageManager 与活动相关联。另外,我已经在三种不同的设备(两个 Kitkats,一个 Oreo)上测试了这个应用程序。

但是,我注意到intent.resolveActivity(packageManager) 始终为空。因此,这永远行不通。有没有比官方文档中更好的方法来做到这一点?

【问题讨论】:

  • 只是想确定,您正在运行您的应用程序的设备是否有任何短信应用程序?
  • @akashzincle 是的,确实如此。我已经在其他三台设备上尝试过这个应用程序;结果相同。

标签: android kotlin android-intent sms


【解决方案1】:

尝试一次,而不是 ACTION_SEND,使用 ACTION_SENDTO

fun composeMmsMessage() {
val intent = Intent(Intent.ACTION_SENDTO).apply {
    data = Uri.parse("smsto:+2340000000000")  // I used a valid phone number in my actual code
    putExtra("sms_body", "Hi there!")
}
if (intent.resolveActivity(packageManager) != null) {
    startActivity(intent)
}

}

【讨论】:

    【解决方案2】:

    我发现了一个简单的修复方法,就像一个魅力:

    fun composeMmsMessage() {
        val intent = Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", "+2340000000000", null)).apply {
            putExtra("sms_body", "Hi there!")
        }
        if (intent.resolveActivity(packageManager) != null) {
            startActivity(intent)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多