我有一个广播接收器,它在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>