首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >以编程方式注册广播接收器

以编程方式注册广播接收器
EN

Stack Overflow用户
提问于 2011-01-26 21:50:27
回答 5查看 217.7K关注 0票数 159

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-26 23:08:34

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

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

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

注如果您只对在运行时接收广播感兴趣,最好使用registerReceiver()。接收器组件主要用于需要确保每次发送广播时都启动应用程序的情况。

票数 68
EN

Stack Overflow用户

发布于 2011-01-26 22:36:17

在你的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();
 }
票数 277
EN

Stack Overflow用户

发布于 2012-05-28 14:44:34

在Activity/Fragment中的任意位置定义广播接收器,如下所示:

mReceiver = new BroadcastReceiver() {
 @Override
 public void onReceive(Context context, Intent intent) {
     Log.d(TAG," onRecieve"); //do something with intent
   }
 };

onCreate()中定义IntentFilter

mIntentFilter=new IntentFilter("action_name");

现在在onResume()中注册BroadcastReciever,并在onPause()中注销它,因为如果活动暂停,则不会使用广播。

@Override
protected void onResume() {
     super.onResume();
     registerReceiver(mReceiver, mIntentFilter);
}

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

有关详细教程,请查看broadcast receiver-two ways to implement

票数 42
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4805269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档