BroadcastReceiver& getIntent()的区别

时间:2013-01-06 09:42:28

标签: java android android-intent broadcast

这是一个愚蠢的问题。搜索后得到答案;)

2 个答案:

答案 0 :(得分:0)

Android使用接收器的概念和"Broadcasting”意图的概念来帮助您基本上听取手机上发生的某些操作。您可以实现一个接收器来监听您可能在应用程序内部发送的自己的意图(也许是对您的某个应用程序的数据集进行了更改,并且您希望将其广播到您的接收器并让接收器执行一些额外的操作但是,接收器最常用于收听系统本身广播的意图!

例如:

在您的Android清单中,定义一个新的接收器:

<receiver android:name=".receivers.PhoneIntentReceiver" android:enabled="true">
<intent-filter>
    <action android:name="android.intent.action.PHONE_STATE"></action>
</intent-filter>
</receiver>

基本上,您正在PhoneIntentReceiver中定义一个名为manifest的接收器对象,该对象已启用,并将侦听具有操作类型PHONE_STATE的系统广播。每当有来电或挂断现有电话时(即手机状态发生变化时),系统都会广播此特定intent

实际的类看起来像这样:

  public class PhoneIntentReceiver extends BroadcastReceiver {   
    @Override   
    public void onReceive(Context context, Intent intent) {   
  //get the data from the passed intent   
  //this is the intent that was broadcasted by the system   
  Bundle bundle = intent.getExtras();    
  String phoneState = bundle.getString("state");
  String phoneNumber = bundle.getString("incoming_number");
  //perform operations using phoneState data
}
     

}

请注意,我们扩展了BroadcastReceiver类并覆盖了onReceive方法。每当广播动作PHONE_STATE的意图时,就会调用此方法,从那里我们可以获得存储在intent中的额外信息并使用它。请注意,在这种情况下,action extra是“state”,这里的状态将是“RINGING”,“OFFHOOK”或“IDLE”。

我希望你现在能得到改变。

答案 1 :(得分:0)

getIntent()用于获取启动Intent的{​​{1}}。对于Activity,并不总是需要知道哪个Activity启动了他。例如,Intent中的startActivity并不特别。 只有当Launcher想要做一些特别的事情时,他才想要明确地知道它。例如“创建电子邮件”而不是去邮件应用程序。

请记住,只有1 Activity可以开始1 Intent

Activity是在一个或多个BroadcastReceiver上注册自己的组件。如果通过Intents发送/广播Intent,则会启动此sendBroadcast。因此,BroadcastReceiver总是想知道BroadcastReceiver启动了他,Intent或类似的WIFI_CONNECTED。据我所知,为什么onReceive上有一个参数,而Activity只有一个getIntent()。 (如果我错了,请纠正我)

请记住,只发送1 Intent,并且可以启动0或更多BroadcastReceivers。 (所有注册的人都已启动)