如何以编程方式注册广播接收器?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (57)

我想知道以编程方式注册广播接收器的最佳做法/方法是什么。我想根据用户的选择注册特定的接收者。

由于注册是通过清单文件完成的,我想知道是否有适当的方法在代码中实现这一点。

提问于
用户回答回答于

您想要控制清单中发布的组件是否是活动的,而不是在运行时动态注册接收器(通过Context.RegierRecader())。

如果是这样的话,您可以使用PackageManager.setComponentEnabledSset()来控制这些组件是否处于活动状态:

http://developer.android.com/reference/android/content/pm/PackageManager.html#setComponentEnabledSetting(android.content.ComponentName, int, int)

接收器组件主要用于当您需要确保每次发送广播时都会启动应用程序。

用户回答回答于

在你的onCreate方法可以这样注册接收器:

private BroadcastReceiver receiver;

@Override
public void onCreate(Bundle savedInstanceState){

  // your oncreate code should be

  IntentFilter filter = new IntentFilter();
  filter.addAction("SOME_ACTION");
  filter.addAction("SOME_OTHER_ACTION");

  receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      //do something based on the intent's action
    }
  };
     registerReceiver(receiver, filter);
}

请记住在onDestroy方法:

 @Override
 protected void onDestroy() {
  if (receiver != null) {
   unregisterReceiver(receiver);
   receiver = null;
  }
  super.onDestroy();
 }

扫码关注云+社区