15

我的应用程序有一个按钮来启动默认的短信活动,除了新的 Android 4.4(kitkat) 之外,它在所有 android 版本上都运行良好。这里是代码:

public void onClick(View arg0) {
    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.setType("vnd.android-dir/mms-sms");
    smsIntent.putExtra("address", member.getPhoneNumber().trim());
    context.startActivity(smsIntent);
}

我收到错误消息

11-08 02:08:32.815: E/AndroidRuntime(14733): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=vnd.android-dir/mms-sms (has extras) }

我知道谷歌对默认短信应用程序如何处理短信意图进行了一些更改。但我的应用程序不是短信应用程序,但它仅具有使用收件人号码启动默认短信应用程序的功能。所以请帮忙。

4

4 回答 4

34

要启动带有数字填充的 SMS 应用程序,请使用操作ACTION_SENDTO

Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("smsto:" + Uri.encode(phoneNumber)));
startActivity(intent);

这将适用于 Android 4.4。它也应该适用于早期版本的 Android,但是由于 API 从未公开,因此行为可能会有所不同。如果您之前的方法没有问题,我可能会坚持使用 4.4 之前的版本并使用ACTION_SENDTO4.4+。

于 2013-11-13T18:10:03.160 回答
0

要在不插入号码的情况下启动短信应用程序,您应该删除 setType

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("sms:"));
intent.putExtra("sms_body", "smsMsgVar");
startActivity(intent);
于 2019-02-25T13:23:08.237 回答
0

当您使用模拟器进行测试时,问题发生了,

请使用实际设备进行测试。

于 2019-05-01T19:26:57.203 回答
0

在 Kotlin 中,此代码有效:

val defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(activity)  
            val sendIntent = Intent(Intent.ACTION_SEND)
            sendIntent.type = "text/plain"
            sendIntent.putExtra("address", "sms:"+contactNumber)
            sendIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_msg_body))
            Timber.e("defaultSmsPackageName: "+defaultSmsPackageName)
            if (defaultSmsPackageName != null){ //Can be null in case that there is no default, then the user would be able to choose any app that support this intent.
                sendIntent.setPackage(defaultSmsPackageName)
                activity!!.startActivity(sendIntent)
            }
于 2020-06-25T12:17:51.173 回答