这是一个愚蠢的问题。搜索后得到答案;)
答案 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
。 (所有注册的人都已启动)