我想知道以编程方式注册广播接收器的最佳实践/方法是什么。我想根据用户的选择注册特定的接收者。
由于注册是通过清单文件完成的,我想知道在代码中是否有合适的方法来实现这一点。
发布于 2011-01-26 23:08:34
听起来您想要控制清单中发布的组件是否处于活动状态,而不是在运行时动态注册接收器(通过Context.registerReceiver())。
如果是这样,您可以使用PackageManager.setComponentEnabledSetting()来控制这些组件是否处于活动状态:
注如果您只对在运行时接收广播感兴趣,最好使用registerReceiver()。接收器组件主要用于需要确保每次发送广播时都启动应用程序的情况。
发布于 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();
}
发布于 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。
https://stackoverflow.com/questions/4805269
复制相似问题