Android 隐式意图是否在内部进行广播?

Android 隐式意图是否在内部进行广播?,android,android-intent,android-broadcast,Android,Android Intent,Android Broadcast,下面的代码使用隐式意图打开URL EditText editText = (EditText) findViewById(R.id.url_editText); Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(editText.getText().toString())); startActivity(myIntent); 它显示了所有支持此action In

下面的代码使用隐式意图打开URL

EditText editText  = (EditText) findViewById(R.id.url_editText);
                Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(editText.getText().toString()));
                startActivity(myIntent);
它显示了所有支持此action Intent.action_视图的应用程序,如Chrome、Firefox等。因此,我假设此过程在内部使用action Intent.action_视图进行广播。如果我误解了,请纠正我

根据上述假设,我尝试了以下代码

Intent myIntent = new Intent(Intent.ACTION_VIEW);
sendBroadcast(myIntent);
但它不起作用。没有显示任何内容。有什么区别。有人能消除我的困惑吗

因此,我假设此过程在内部执行带有动作意图的广播。动作视图

没有

但它不起作用。没有显示任何内容

当然

有什么区别

startActivity()
!=
sendBroadast()
。它们是独立的运算,就像加法和减法是独立的数学运算一样

如果您希望将
Intent
系统看作有点像消息总线,那么该总线有三个完全独立的通道:

  • 活动(
    startActivity()
  • 服务(
    startService()
    bindService()
  • 广播(
    sendBroadcast()
    sendOrderedBroadcast()
    等)

这两者之间的区别在于谁接收了
意图。如果调用
sendBroadcast()。如果调用
startActivity()
意图将被发送到
活动
。这就是为什么:

Intent myIntent = new Intent(Intent.ACTION_VIEW);
sendBroadcast(myIntent);
不启动
活动
,因为
意图
仅对
广播接收者可见

startService()
也是如此。通过调用该方法,
Intent
将只针对
服务
。我猜这种混淆来自广播这个词。这意味着它被发送到任何地方,每个人都可以看到,但事实并非如此。广播只对
广播接收者可见
,就像调用
startActivity()
一样
意图
只针对
活动
而不针对其他活动

您可以找到更多信息。

这与。在启动
活动
之前,它要求系统向其提供
活动
的所有内容的列表,并且可以处理意图——此处不涉及广播

至于
sendBroadcast()
——本质上是一样的,但对于
BroadcastReceiver
s。机制是相同的:匹配意图过滤器,传递
意图
,但是
意图
被传递给所有接收者,而不管其数量如何(与
startActivity()
所做的相反,因为它只能导致启动单个活动,因此如果有多个匹配的活动,则需要选择一个)

我不认为有任何
广播接收者注册为
意图.行动_视图
(因为这是一个行动,其目的是开始一项活动,没有逻辑上的理由去听它,什么也不开始,除了计算活动启动或其他)但是你可以自己注册一个,看看会发生什么