简体   繁体   English

注册广播接收器的方法

[英]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 8Android 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM