【问题标题】:An Intent that sends SMS message发送 SMS 消息的 Intent
【发布时间】:2018-10-08 14:56:22
【问题描述】:

这将是一个新手问题,但我很好奇 Intent 的 ACTION_SENDTO 是如何工作的。代码是这样的:

TextView textView = (TextView) findViewById(R.id.number_to_call);
String smsNumber = String.format("smsto: %s", textView.getText().toString());
EditText smsEditText = (EditText) findViewById(R.id.sms_message);
String sms = smsEditText.getText().toString();    
Intent smsIntent = new Intent(Intent.ACTION_SENDTO);
smsIntent.setData(Uri.parse(smsNumber));
smsIntent.putExtra("sms_body", sms);

我明白:

  • 这是一个隐含的意图
  • ACTION_SENDTO 是意图的操作
  • setData 接收意图的数据

但无论 putExtra 是什么,我猜它的作用是放入“额外”数据?运行此意图后,它立即将我带到一个普通的消息应用程序,其编号为 smsNumber,sms 为内容。我的问题是:

  1. intent 如何“知道” smsNumber 应该在电话号码部分,而 sms 在内容部分?
  2. 我也猜想“sms_body”这个名字确实会影响它后面的数据的作用(又名sms是消息的内容)?

编辑:我找到了对此的解释。应该在Common Intents

【问题讨论】:

  • extra bundle 本质上是一个 KeyValue 存储。 SMS 应用程序获取此捆绑包并使用键“sms_body”查找值。这种行为(即密钥)必须硬连线到应用程序中,并不是每个短信应用程序都支持它。
  • 谢谢,我有点明白你在说什么。只要它被称为“sms_body”,intent 就会接受该值,我的问题是我还没有找到为 putExtra 的关键部分指定这些名称(如 sms_body)的官方文档。我所做的更像是查找人们的代码并得出 sms_body 是必要的结论。
  • 那是因为没有所有使用的意图键的官方文档。因此,作为 SMS 应用程序开发人员,您没有义务内置处理此问题,尽管他们中的大多数人都会这样做。

标签: android


【解决方案1】:

您可以在 uri 中使用“smsto:XXXXXXXXXX”来提供电话号码,如帖子中的示例所示: ACTION_SEND used to send sms

Uri uri = Uri.parse("smsto:0800000123");   
Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
it.putExtra("sms_body", "The SMS text");   
startActivity(it); 

【讨论】:

  • 感谢您的回复,我认为我的问题更多关于 putExtra("sms_body",...) 部分,我找不到任何在 putExtra 参数中指定字符串名称的文档,因此如何是否指定了“sms_body”?我可以用“body”替换“sms_body”吗?
  • 您可以在 developer.android.com/guide/components/intents-common 找到所有额外内容的列表:developer.android.com/guide/components/intents-common 它回答了您的问题吗?
  • “sms_body”Extra 是一个字符串,所有处理短信发送的应用程序都会查看它,它越来越少,如果不影响应用程序的行为,则无法更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多