问题描述
因此在我的应用中,我有一个电话号码和一个电话联系人的URI。当用户按下按钮时,我想打开用户的短信应用程序,将给定的电话号码设置为消息接收者,并将电话联系人附加为vCard,并附带一条简短的预填充消息。
我跟随this post向特定的电话号码发送预设消息,并跟随this post通过编程将vCard附加到文本消息,它们可以独立工作,但不能正常工作放在一起工作。也就是说,我可以使我的应用程序打开一个带有我指定的收件人和消息的短信应用程序,或者我可以使我的应用程序打开带有vCard和预填充消息的短信应用程序,但是用户必须手动选择收件人。
说明:
test_button.setonClickListener {
val phoneNumber = "9828675309"
val contactLookupKey = getContactLookupKey() // uses a cursor to grab a lookup key from phone contacts
val contactUri = Uri.withAppendedpath(Contacts.CONTENT_VCARD_URI,contactLookupKey)
val intent = Intent(Intent.ACTION_SEND,Uri.parse("smsto:$phoneNumber"))
intent.putExtra("sms_body","Hi,I would like to share this contact with you.")
startActivity(intent)
}
如果我不附加电子名片,则该按钮将打开一个phoneNumber
被设置为收件人的消息传递应用程序。但是,一旦我附上电子名片...
test_button.setonClickListener {
val phoneNumber = "9828675309"
val contactLookupKey = getContactLookupKey() // uses a cursor to grab a lookup key from phone contacts
val contactUri = Uri.withAppendedpath(Contacts.CONTENT_VCARD_URI,I would like to share this contact with you.")
intent.type = ContactsContract.Contacts.CONTENT_VCARD_TYPE
intent.putExtra(Intent.EXTRA_STREAM,contactUri)
startActivity(intent)
}
现在,当消息传递应用程序启动时,vCard会适当地附加到预填充的消息上,但是未设置收件人的电话号码,因此用户必须手动键入收件人的电话号码,或从他们的收件人中选择收件人通过消息传递应用程序联系。本质上,初始意图中提供的Uri.parse("smsto:$phoneNumber")
被忽略。我认为这是因为将Intent类型设置为ContactsContract.Contacts.CONTENT_VCARD_TYPE
,会更改Intent的处理方式,并且不允许设置收件人电话号码。
在创建初始意图时,我也尝试使用ACTION_SENDTO,但这会导致以下错误
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SENDTO typ=text/x-vcard (has extras) }
在寻找这种情况的答案时,我发现的所有帖子似乎都是关于将短信发送到指定的电话号码或发送vCard,但从来没有在一起。我找到的最接近的似乎是this post,它描述的功能几乎与我正在寻找的功能相同,除了它们在步骤3“用户键入要发送vCard的号码”中指出的位置外,我要此数字由我的应用以编程方式指定。我要的甚至有可能吗?用例似乎并不多,但似乎出于某种原因,将文本发送到以编程方式指定的数字和以编程方式发送vCard彼此不兼容。
是否可以通过SmsManager实现?我宁愿仅利用用户对消息传递应用程序的选择,但是如果使用SmsManager可以阻止用户不得不手动指定收件人,则考虑使用它。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)