我在Android的应用程序类中注册广播接收器,但现在我的问题是取消注册该广播的位置?
public class MyApplication extends Application
{
@Override
public void onCreate() {
.....
// OTHER INITIALIZATIONS
initNetworkBR();
}
private void initNetworkBR() {
br = new BroadcastReceiver() {
....
};
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(br, filter);
}
}
答案 0 :(得分:3)
一个建议是在您的启动器活动或所需活动中取消注册,如下所示:
@Override
protected void onDestroy() {
super.onDestroy();
((MyApplication) getApplication()).unregisterReceiver();
}
在unregisterReceiver
课程中实施MyApplication
方法:
public void unregisterReceiver() {
unregisterReceiver(br);//your broadcast
}
答案 1 :(得分:1)
除了在Application类中使用Broadcast Receiver之外,您还可以为所有活动使用Base类。然后在基本活动中注册BR,然后向孩子提供回叫。 由于Activity具有严格的生命周期模型,因此最好在Activity而不是Application类中使用运行时广播接收器。
public class BaseActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
//registerReceiver Here
}
@Override
protected void onPause() {
super.onPause();
//unregisterReceiver here
}
}
答案 2 :(得分:0)
我认为您应该使用LocalBroadcastManager
来注册和取消注册接收方而不是BroadcastReceiver
。
Benefits to use LocalBroadcastManager
@Override
public void onCreate(Bundle savedInstanceState) {
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("custom-event-name"));
}
@Override
protected void onDestroy() {
// Unregister since the activity is about to be closed.
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
super.onDestroy();
}
答案 3 :(得分:0)
尝试使用以下代码:
如果您已从Manifiest.xml注册
ComponentName component = new ComponentName(context, MyReceiver.class);
int status = context.getPackageManager().getComponentEnabledSetting(component);
if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);
}
如果以编程方式注册接收方:
@Override
public void onCreate(Bundle savedInstanceState) {
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("custom-event-name"));
}
@Override
protected void onDestroy() {
// Unregister since the activity is about to be closed.
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
super.onDestroy();
}
答案 4 :(得分:-1)
您应该在onPause()中使用unregisterReceiver(BroadcastReceiver receiver)取消注册广播接收器。
示例:强>
public class MyActivity extends Activity {
private final BroadcastReceiver mybroadcast = new SmsBR();
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
registerReceiver(mybroadcast, filter);
}
public void onPause() {
super.onPause();
unregisterReceiver(mybroadcast);
}
}