【发布时间】: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 为内容。我的问题是:
- intent 如何“知道” smsNumber 应该在电话号码部分,而 sms 在内容部分?
- 我也猜想“sms_body”这个名字确实会影响它后面的数据的作用(又名sms是消息的内容)?
编辑:我找到了对此的解释。应该在Common Intents
【问题讨论】:
-
extra bundle本质上是一个 KeyValue 存储。 SMS 应用程序获取此捆绑包并使用键“sms_body”查找值。这种行为(即密钥)必须硬连线到应用程序中,并不是每个短信应用程序都支持它。 -
谢谢,我有点明白你在说什么。只要它被称为“sms_body”,intent 就会接受该值,我的问题是我还没有找到为 putExtra 的关键部分指定这些名称(如 sms_body)的官方文档。我所做的更像是查找人们的代码并得出 sms_body 是必要的结论。
-
那是因为没有所有使用的意图键的官方文档。因此,作为 SMS 应用程序开发人员,您没有义务内置处理此问题,尽管他们中的大多数人都会这样做。
标签: android