[英]Ways to registering broadcast receiver
in the project that I got to work on there's a use of Broadcast receivers
.在我开始工作的项目中,使用了
Broadcast receivers
。 Now, those receivers are registered in the Manifest
and also there's this method:现在,这些接收器已在
Manifest
中注册,并且还有这个方法:
private static void enableComponent(Context context, Class<?> component) {
ComponentName connectionReceiverComponent = new ComponentName(context, component);
context.getPackageManager().setComponentEnabledSetting(connectionReceiverComponent, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}
I'm a bit confused about it, because since Android 8
we can't register receivers in the Manifest
anymore, instead we have to use runtime registration, using context.registerReceiver()
, thus it is not necessary even to put the receivers in the Manifest.我对此有点困惑,因为自
Android 8
以来,我们不能再在Manifest
中注册接收器,而是我们必须使用运行时注册,使用context.registerReceiver()
,因此甚至不需要将接收器放入清单。 And yet, the registration that uses ComponentName
still works on Android 8
and Android 9
.然而,使用
ComponentName
的注册仍然适用于Android 8
和Android 9
。 Can you please explain what's difference between those two methods, and why it works and Android 8
and beyond?您能否解释一下这两种方法之间的区别,以及为什么它有效和
Android 8
及更高版本?
In Activity you can register like this.在活动中,您可以像这样注册。
private BroadcastReceiver receiver;
@Override
public void onCreate(Bundle savedInstanceState){
IntentFilter filter = new IntentFilter();
filter.addAction("SOME_ACTION");
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//do something based on the intent's action
}
};
registerReceiver(receiver, filter);
}
Or in your ActivityManifest或者在你的 ActivityManifest
<receiver
android:name=".ConnectivityBroadcastReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.