在应用程序类中注册和注销广播接收器



我有一个广播接收器,它在Android Applcation类的onCreate((方法中注册,但如何取消注册相同

public class MyApplication extends Application {

@Override
public void onCreate() {
super.onCreate();
registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}

在上面的代码中,我已经在应用程序中注册了它 onCreate(( 方法,并且在应用程序类中没有 onDestroy((/onStop(( 方法来注销 broadcastReceiver。

如何实现它

如果您想在应用运行的整个过程中进行侦听,则无需取消注册。来自文档(截至今天(:

上下文注册

的接收器只要其注册上下文有效,就会接收广播。例如,如果在活动上下文中注册,则只要活动未被销毁,您就会收到广播。如果向应用程序上下文注册,则只要应用正在运行,就会收到广播。

(https://developer.android.com/guide/components/broadcasts.html(

你应该创建一个BaseActivity。

public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(broadcastReceiver);
}
}

和主活动扩展基本活动

例:

public class MainActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

您可以在应用程序类中调用注销接收器,只是您只是这样调用

在 onDesctroy(( 方法调用中的 MainActivity 中

@Override
protected void onDestroy() {
super.onDestroy();
((MyApplication) getApplication()).unregisterReceiver();
}

我们在 MyApplication 类中创建unregisterReceiver((方法

public class MyApplication extends Application {

@Override
public void onCreate() {
super.onCreate();
registerReceiver(broadcastReceiver, new IntentFilter("TIMEZONE_CHANGED"));
}
public void unregisterReceiver() {
unregisterReceiver(broadcastReceiver);
}

从您要取消注册的位置调用此函数

unregisterReceiver();

请在清单中使用静态注册的广播接收器,这不需要您调用registerReceiver()unRegisterReceiver()

<receiver
android:name=".MyTimeChangeReceiver">
<intent-filter>
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
<action android:name="android.intent.action.TIME_SET" />
</intent-filter>
</receiver>

最新更新